AutomaticTelegraphKeyProject.c

Similar documents
割り込み 今までのプログラムは 順番にそって命令を実行していくのみ それはそれで良いが 不便な場合もある 例えば 時間のかかる周辺機器を使う場合 その周辺機器が動作を終了するまで CPU は待たなければいけない 方法 1( ポーリング ) 一定時間毎に 周辺機器の動作が終了したか調べる 終了していれ

mbed祭りMar2016_プルアップ.key

スライド 1

PIC

スライド 1

スライド 1

1. プログラム実行時の動作プログラムを実行すると以下のように動作します 1) NUCLEO-F401RE 上の LED LD2( 緑 ) が 200mSec 間隔で点滅します 2. プロジェクトの構成 2.1. プロジェクト F401N_BlinkLD2 の起動画面 TrueSTUDIO で作成し

CoIDE 用 STM32F4_UART2 の説明 V /03/30 STM32F4 Discovery の非同期シリアル通信ポート UART2 の送受信を行うプログラムです Free の開発ツール CoIDE で作成したプロジェクトサンプルです プログラムの開始番地は 0x08000

CoIDE 用 F4D_VCP の説明 V /07/05 USB の VCP( 仮想 COM ポート ) による非同期シリアル通信を行うプログラムです Free の開発ツール CoIDE で作成した STM32F4 Discovery 用のプロジェクトです プログラムの開始番地は 0x

Lab GPIO_35 GPIO

arduino プログラミング課題集 ( Ver /06/01 ) arduino と各種ボードを組み合わせ 制御するためのプログラミングを学 ぼう! 1 入出力ポートの設定と利用方法 (1) 制御( コントロール ) する とは 外部装置( ペリフェラル ) が必要とする信号をマイ

1. USB の VCP( 仮想 COM ポート ) について USB の VCP( 仮想 COM ポート ) は USB を非同期シリアル通信として使用するための USB のドライバです PC には VCP ドライバをインストールする必要があります USB の VCP( 仮想 COM ポート )

3 4 PIC

1. 使用する信号 1.1. UART 信号 UART 通信に使用する信号と接続相手との接続は以下の通りです UART 信号表 番号 CPU 機能名 CPU 信号名 基板コネクタピン番号 方向 接続相手の信号名 1 USART1_TX PA9 CN > RxD 2 USART1_R

1. A/D 入力について分解能 12bit の A/D コンバータ入力です A/D 入力電圧とディジタル値との対応は理論上 入力電圧 0V : 0 入力電圧 +3V : 4095 です 実際はオフセットと傾きがあり ぴったりこの数値にはなりません 2. A/D 入力に使用する信号 STM32L_A

RTC_STM32F4 の説明 2013/10/20 STM32F4 内蔵 RTC の日付 時刻の設定および読み込みを行うプログラムです UART2( 非同期シリアル通信ポート 2) を使用して RTC の設定および読み込みを行います 無料の開発ツール Atollic TrueSTUDIO for

講習会 Arduino

スライド 1

スライド 1

tri_s_tg12864_vcp の説明 2014/02/05 飛石伝ひ CPU 基板 の LCD TG12864 の表示プログラムです 漢字表示 (JIS208) を行うことができます USB の VCP ( 仮想 COM ポート ) を使用して非同期シリアル通信により 表示試験を行うことができ

PowerPoint プレゼンテーション

1. UART について UART は Universal Asynchronous Receiver Transmitter の頭文字をとったもので 非同期シリアル通信と呼ばれます シリアル通信とは 一本の信号線でデータをやりとりするために 1bit ずつデータを送出することをいいます データを受

スライド 1

(Making the electronic circuit with use of micro-processor)

スライド 1

Microsoft Word - 実験4_FPGA実験2_2015

回路 7 レジスタ ( 同期イネーブル及び非同期リセット付 ) 入力データを保持するのに用いる記憶素子 使用用途として, マイクロプロセッサ内部で演算や実行状態の保持に用いられる Fig4-2 のレジスタは, クロック信号の立ち上がり時かつ 信号が 1 のときに外部からの 1 ビットデータ R をレ

1. LCD LS027B4DH01 について LS027B4DH01 は 400dot x 240dot のグラフィック LCD です 秋月電子通商で購入できます 外形サイズ : 62.8 x x 1.53mm LCD のフレキシブルケーブルの根元の部分はちょっと力を加えただけで表示が

/* モジュールストップ解除 */ SYSTEM.MSTPCRA.BIT.MSTPA24 = 0; /* MSTPA24(S12ADA 制御部 ) クロック供給開始 */ SYSTEM.MSTPCRA.BIT.MSTPA17 = 0; /* MSTPA17(S12ADA0) クロック供給開始 */

内容 1. 仕様 動作確認条件 ハードウェア説明 使用端子一覧 ソフトウェア説明 動作概要 ファイル構成 オプション設定メモリ 定数一覧 変数一

Microsoft Word - PIC-P14マニュアル.doc

SDC_SDIO_STM32F4 の説明 2013/09/17 SDIO インターフェースで SD カードをアクセスするプログラムのプロジェクトサンプルです FAT でファイルアクセスするために FatFs( 汎用 FAT ファイルシステム モジュール ) を使用しています VCP(USB 仮想 C

SpeC記述のC記述への変換 (SpecCによるソフトウェア記述の実装記述への変換)

SOPC Builder ペリフェラル 簡易ユーザ・ガイド - PIO (Parallel I/O)

GR-SAKURA-SAのサンプルソフト説明

GenieATM 6300-T / 6200-T シリーズ 1. 基本的な機器オペレーションのために 1-1. 機器への接続 機器への接続方法は 以下の 2 通りがあります シリアルポートを使用してログインする LAN 経由で Telnet または SSH を使用して仮想 Interface からロ

スライド 1

Nios II - PIO を使用した I2C-Bus (2ワイヤ)マスタの実装

回路 : Vdd GND 回路図と呼べるようなものではありません オシレータは外部 ( セラミック発振子 ) なので GP4 と GP5 は使えません 四角の枠内はモジュールなので ここから VDD GND TX RX の4 本をつなぐだけです 測定端子 (GP0) は 1MΩの抵抗と 2MΩの半固

1 142

Power Calculator

ここをクリックしてダウンロードする ダウンロードした zip ファイルを解凍する とインストーラが現れます インストーラを 起動してインストールを開始しましょう イ ンストーラの [ Next > ] ボタンを押してい けばインストールできます ライセンスの画面では I accept the ter

untitled

Taro-テキスト.jtd

Microsoft Word - SU1202教本(Disp)原稿.docx

Arduino UNO IS Report No. Report Medical Information System Laboratory

Jan/25/2019 errata_c17m11_10 S1C17 マニュアル正誤表 項目 リセット保持時間 対象マニュアル発行 No. 項目ページ S1C17M10 テクニカルマニュアル システムリセットコントローラ (SRC) 特性 19-3 S1C17M20/M

1. 新規プロジェクト作成の準備新規プロジェクトのためのフォルダを用意して そこにプロジェクトを作成します [ 新しいフォルダー ] をクリックして希望のフォルダに新しいフォルダを作成します この例では TrST_F401N_BlinkLD2 というフォルダを作成しました TrST_F401N_Bl

ディジタル電子回路 設計演習課題

ESP32-KEY-KIT-R1 (ESP-WROOM-32 ) Copyright c 2

訂正 _ 第 1 回 1 Arduino Arduino を用意する 入力 アナログ Analog 入出力 任意の電圧を扱える 電源系 外部入力 7 12V デジタル digital 入出力 リセットボタン Low High いわゆる 01 が入出力される 通常は Low 0V GND High 5

#include "uart.h" // #define RTC8583 0xA0 // RTC address #define CTRL 0x00 // RTC register notation START/STOP #defin

Microsoft Word - 工学ゼミ3_テキスト

Microsoft Word - SU1203教本(Sens)原稿.docx

Microsoft PowerPoint - DIX9211_Mega8_R24.pptx

スライド 1

CCD リニアイメージセンサ用駆動回路 C CCD リニアイメージセンサ (S11155/S ) 用 C は 当社製 CCDリニアイメージセンサ S11155/S 用に開発された駆動回路です S11155/S11156-

Microsoft PowerPoint - RL78G14_動画マニュアル_タイマRD.ppt [互換モード]

AN424 Modbus/TCP クイックスタートガイド CIE-H14

ANDIAMO Manual

Microsoft Word - テキスト.docx

NL-22/NL-32取扱説明書_操作編

Microsoft Word - PIC-USBマイコンボード_v1-02@WEB公開用資料.docx

Verilog HDL による回路設計記述

1 138

,, ( ) 5 ma ( ) 5V V 5 6 A B C D E F G H I J , LED LED, LED, 7 LED,, 7 LED ( ) V LED VCC 5V 7 LED VCC f g f a g b a b c e d e d c dp dp VCC (

Microsoft Word - SU1204教本(Driver)原稿.docx

Microsoft PowerPoint pptx

Notes and Points for TMPR454 Flash memory

NI P1200 Release Notes Cover

スライド 1

ターゲット項目の設定について

2015/04/01 改定 オムロン DeviceNet ユニット CJ1W-DRM21 に関するコンフィグレーション作業について 1. 概要 DeviceNet ユニット CJ1W-DRM21 を装着したオムロン製 CJ2 シリーズと WAGO-I/0-SYSTEM DeviceNet 対応バスカ

DSP5Dアップグレードガイド

三菱電機マイコン機器ソフトウエア株式会社


Introduction Purpose This training course demonstrates the use of the High-performance Embedded Workshop (HEW), a key tool for developing software for

スライド 1

図 1 で示すように割り込み作業に対応していない間は CPU が他の作業を行えま す 割り込みが発生した時に作業中の仕事を一時停止し 割り込みハンドラに 入ってタスクを実行します 割り込み作業が終わった後停止した作業を再開し ます 割り込み対応コードが停止したプロセスに影響ありますので なるべく 最

WinBook WV BIOS セットアップ マニュアル BIOS セットアッププログラムについて BIOS セットアッププログラムとはパソコンの BIOS 設定を確認 変更するためのプログラムです 本機では AMI BIOS を使用しています セットアッププログラムは マザーボード上のフラッシュメ

Transcription:

** * プログラム名 著作権表示 プログラム開発環境 * * Pressure Vibration Telegraph Paddle ( 感圧振動パドル ) * * Author JH1IFZ K.A.Yoshida PressElecKeyProgを元に変更開始 2017.04.29- * * mikroc Ver. 6.0.0 * * wrighter pickit2 App Ver.2.61 Device File Ver.1.62.14 OS Firm Ver.2.32 * * * ** * MPU 名 PIC 16F1823 ハードウェア設定 * * * * ピン番号 名称 設定 用途 * * 1 Vdd 電源 +3.7V 電源 +3.7V * * 2 RA5AN0 Digital output 振動出力 (TR 介しアクチュエータ駆動 ) * * 3 RA4AN3 Digital output 電鍵出力 ( 半導体リレー ) * * 4 RA3MCLR Digital input ストレートキー入力 ( タクトSW) * * 5 RC5 Digital output モニター LED 青 * * 6 RC4 Digital output 未使用 PBSW 入力 ( 定型句 1) * * 7 RC3AN7 Digital output 未使用 PBSW 入力 ( 定型句 2) * * 8 RC2AN6 Digital output 未使用 * * 9 RC1AN5 Digital output 未使用 * * 10 RC0AN4 Digital output 未使用 * * 11 RA2AN2 Analog input 送出スピード調整用 VR 電圧 * * 12 RA1AN1 Analog input 短点感圧素子電圧入力 * * 13 RA0AN0 Analog input 長点感圧素子電圧入力 * * 14 Vss 電源 GND 電源 GND * * * * * * ポート設定 * * B8 7 6 5 4 3 2 1 0 1: 入力 0: 出力 * * TRISA ---001111 * * TRISC ---000000 * * 1: アナログ 0: デジタル * * ansela ---000111 * * anselc ---000000 * * * * WPUA - - 0 0 0 1 0 1 1 弱プルアップ 1: 有効 * * * * * * * ** * MPU 名 PIC 12F675 ハードウェア設定 * * * * ピン番号 名称 設定 用途 * * 1 Vdd 電源 +3.7V * * 2 GP5AN0 Digital output 振動出力 (TR 介しアクチュエータ駆動 ) * 1

* 3 GP4AN3 Digital output 電鍵出力 ( 半導体リレー ) * * 4 GP3MCLR Digital input モード切替 PBSW 入力 ( 予備 ) * * 5 GP2AN2 Analog input 送出スピード設定用 VR 電圧 * * 6 GP1AN1 Analog input 短点感圧素子電圧入力 * * 7 GP0AN0 Analog input 長点感圧素子電圧入力 * * 8 Vss 電源 GND * * * ** * &GPIO3 porta portc.b2 * * GPIO.F5 porta.f5 * * * * * * * * * * * ** * mikroc 設定 * * * * Project Settings * * * * Device Name P12F675 * * Clock Freq. 8MHz * * Build Debug Release, Software * * * * Library Manager ADC,Button,Conversion,C_String,EEProm * * * * ADC,Button,Conversion,C_String,EEProm,Sound,Time * * * * Edit Project * * * * Oscillator Selection : INTOSC :IO function on GP4OSC2 * * WatchdogTimer : Disabled * * Power-Up Timer : Disabled * * GP3MCLR pin function select : Disabled * * Brown-out Detect : Enabled * * Code Protection : ProgramMemory code protection is disabled * * Data Cpde protection : Data mamory code protection is disabled * * Heap Size 2000(automatically setting) * * * ** * 開発記録 * * * * 2015.06.04 開始 * * 2015.06. 一応動作は可能になったが * * 2015.08.10 割込み動作に変更 * * 22:12 SpeedVR LED 点滅 modesw 動作 OK * * 2015.08.11 一応完成 Ver.0.1 * * 2015.08.15 dot 通過しdash 圧力移行の場合をcase2に追加記述 * 2

* これに伴い KeyPressH の値を300から400に増加した * * さらにDash 直後のdotを拾いやするするため一時的にKeyPressLを変更 * *========================================================================== =* * 2017.04.29 PressElecKeyProgを元にをベースに新プロジェクトに移行 * * 04.30 PIC16F1823に決定 ピン割り当て検討 12F675コードは正常 * * 05.01 プロジェクトを12F675 用と16F1823 用に2 分岐したこれは16F1823 * * * ** unsigned int adc_rd; unsigned v_keydownp; unsigned v_speed; unsigned int speed; AD 変換用一時変数 Key 押下圧力格納変数 送出スピードVR 電圧格納変数 送出スピードCNT 対応変数 char Kdown; ストレートキー押下 UP=0,DOWN=1 char mode; エレキーモード (1) UP=0,DOWN=1 <NotUse> char KeyPos; キー位置 UP=0,DOWN=1 char KeyR; パドル右 OFF=0,ON=1 char KeyL; パドル左 OFF=0,ON=1 char sendf = 0; Dot Space 送信後だけ1 <NotUse> char dash = 0; dash 送信後のみ1 <NotUse> char Beep = 1; <NotUse> int KeyPressL = 800; keyl ON 判定閾値 ( 大きいと感度高 ) int KeyPressR = 800; keyr ON 判定閾値 ex800 int Silent =0; <NotUse> 変数定義 状態遷移 State=0 KEYdown 待ち受け char State; State=1 短点送出 State=2 ( 短間送出 ) State=3 補長点送出中 State=4 短点延長出力中 State=5 予備 変数定義割り込み処理 unsigned int cnt; 変数定義 : 外部割込カウンタ 3

int DotLength = 5; int DashLength =200; 外部割込カウンタ cnt を単位とする * interrupt() タイマー割込処理 5msec インターバルタイマ * void interrupt() if (INTCON.T0IF) INTCON.T0IF = 0; TMR0 = -32; cnt--; Timer0 割込みの場合 割込みフラグクリア TMR0 値再設定 160 回 (for 5mS Up Count) 外部割込回カウンタカウントダウン * if(button(&gpio,2,1,0)) 電鍵読み込み KeyDown に格納 1 で押下 * gpio.f4 = 1; for Debug KeyDown = 1; else gpio.f4 = 0; for Debug KeyDown = 0; * ReadKeyDownP() KEY 圧力からのの電圧を読み 変数 v_key に格納する * void ReadKeyDownP() adc_rd = ADC_Read(0); v_keydownp = adc_rd; パドル右チェック アナログポートAN0 よりAD 変換 long に変換し格納 if (v_keydownp <= KeyPressR) KeyR=1; KeyUp なら 0 (NA) 4

else KeyR=0; KeyDown なら 1 (Dot) adc_rd = ADC_Read(1); v_keydownp = adc_rd; パドル左チェック アナログポートAN1 よりAD 変換 long に変換し格納 if (v_keydownp <= KeyPressL) KeyL=1; KeyUp なら 0 (NA) else KeyL=0; KeyDown なら 1 (Dash) * ReadSpeedVR() スピード調整用 VRを読み 変数 v_speed に格納する * void ReadSpeedVR() adc_rd = ADC_Read(2); アナログポートAN0 よりAD 変換 v_speed = adc_rd; long に変換し格納 speed = (v_speed 5 )+1; 元 (v_speed 5)+ 5; * ReadKeySW() ストレートキースイッチを読み変数 Kdown に格納する * void ReadKeySW() if(button(&porta,3,1,0)) RA0 スイッチ Hi で Kdown 0 Lo で Kdown 1 Kdown = 1; else Kdown = 0; * BeepShort() 短点ビープ * 5

void BeepShort() int i; if(beep==1) for (i=0;i<50;i++) * BeepLong() 長点ビープ * void BeepLong() int i; if(beep==1) for (i=0;i<150;i++) * BeepSemiLong() 長点ビープ * void BeepSemiLong() int i; if(beep==1) for (i=0;i<100;i++) アナログポートAN2 よりAD 変換 long に変換し格納 6

* main() メインルーチン * unsigned temp; void main() 重要 Project 設定 メニューバー Edit Project にて設定する必要あり Oscilator Selection INTOSC oscilator 内部クロックに設定 MCU and Oscllator Frequency 500kHz 使用に設定 ( OSCCON = 0b01110000; ) Power-up Timer Enable Enable 使用するに設定 MCLR Pin Function Select Disabled リセットではなく 入力ピンとして使用 する Clock Out Enabele Disabled InternalExternal Switchover Disabled Fail-Safe Clock Monitor Disabled Flash Memory Self-Write Protection Disabeled PLL enable Disabled Stack overflowunderflow Reset Enable Enabled Brown-out Reset Enabel Enabled 使用するに設定 In-Circuit Debugger Mode Disabled Low-Voltage Programming Enable Disabled configure VDD as Vref, リセット後は自動でVddになる int i; *-------------------------------------------------------------------------- -------* 初期化 初期化開始 *-------------------------------------------------------------------------- -------* intcon=0; PORTA = 0b00000000; PORTC = 0b00000000; 割り込み禁止 PortA 初期状態設定 PORTC 初期状態設定 7

TRISA = 0b00001111; PORT A 0,1,2,3(MCLR) を1: 入力に設定 4,5は0: 出力 TRISC = 0b00000000; PORT C 0,1,2,3,4,5 を0: 全 Cポートは出力に設定 AD 利用 PORT の設定 ANALOG=1, DIGITAL=0 必須 ANSELA = 0b00000111; 度 ) ANSELC = 0b00000000; デジタル CM1CON0 = 7; ADCON0 =0b1100000; AN0( 長点感圧 ),AN1( 短点感圧 ),AN2( 送出速 RC0~RC5 は全デジタルで使用 RA3,RA4,RA5も コンパレータ機能 OFF ADコン有効 電源電圧を基準電圧とする ADCON0.ADFM = 1; OPTION_REG = 0x84; プリスケーラ値設定 0x84(=32 回 ) TMR0 = -160; TMR0 カウント値設定 160 回 ( アップカウンタ ) INTCON.T0IE = 1; タイマ割込み許可 INTCON.GIE = 1; 全体割込み許可 ADC_Init(); cnt = DotLength; AD コン初期化 外部割込カウンタ値設定 1 秒 (=5msec * 200 回 ) 初期化終了 do プログラムループ開始点 ReadKeyDownP(); ReadSpeedVR(); if(cnt==0) 割込み処理 portc.f5 = ~portc.f5; porta.f5 = ~porta.f5; バイブレーション cnt=1 ; cnt=speed; if(porta.f3==0) portc.f5 = 1; porta.f5 = ~porta.f5; モニター LED 点灯 バイブレーション 8

else if(keyr==1) portc.f5 = 1; porta.f5 = ~porta.f5; else if(keyl==1) モニター LED 点灯 バイブレーション portc.f5 = 1; モニター LED 点灯 porta.f5 = ~porta.f5; バイブレーション portc.f5 = 1; モニター LED 点灯 クリックバイブ delay_ms(10); portc.f5 = 0; else portc.f5 = 0; モニター LED 消灯 モニター LED 消灯 バイブレーション OFF if(keyl==1) portc.f5 = 1; モニター LED 消灯 else portc.f5 = 0; モニター LED 消灯 * if(sendf==1) cnt= speed; sendf =0; dash =0; else 直前が dot か dash の場合 短スペースを挿入する switch(keypos) case 0: cnt= speed; dash =0; break; 9

case 1: cnt= speed; sendf = 1; dash =0; BeepShort(); break; case 2: if(sendf ==1) if(porta.f5 ==1 ) cnt= (speed*2); sendf = 1; dash =1; BeepSemiLong(); dot 通過し dash 圧力移行の場合 break; cnt= (speed*3); sendf = 1; dash =1; BeepLong(); break; * * ReadModeSW(); * if(mode ==1) Beep=1; else Beep=0; while (1); endless loop (as this condition is always satisfied) 10