つづきです。
外部入力も含めてシミュレーションする。前回のプログラムであえてclkIO/256に変更したTimer/Counter1のソースをT1に戻して、T1に外部信号を入れてシミュレーションします。
まずは現在のデバッグセッションを停止する。
/* * File: main.c * Author: hoge * * Created on June 3, 2023, 11:10 AM */ #include <stdio.h> #include <stdlib.h> /* * */ #include <avr/io.h> int main(int argc, char** argv) { // Clear Timer/Counter1 registers TCCR1A = 0; TCCR1B = 0; // Set timer mode and clock source TCCR1A |= (1 << COM1A1) | (1 << COM1A0) | (1 << WGM11); // Fast PWM mode, non-inverted output TCCR1B |= (1 << WGM13) | (1 << WGM12); // Fast PWM mode, non-inverted output TCCR1B |= (1 << CS12) | (1 << CS11) | (0 << CS10); // External clock source (T1 pin, falling edge) //TCCR1B |= (1 << CS12) | (0 << CS11) | (0 << CS10); // clkIO/256 // Set TOP value to 104 ICR1 = 14; // Set compare value to 100 for L output OCR1A = 10; // Set up OC1A pin as output DDRB |= (1 << PB1); while(1){ // } return (EXIT_SUCCESS); }
コードを変更。
Window-->Simulator-->Stimulus
こうなる。
今回はこちらで指定してみる。"Clock Stimulus"でもできるけど。
ここを押すと信号を入れる端子を指定できる。
こうする。
最終的にこうする。行を追加したり削除したりするのは左の+やら×やらのあるアイコンを使う。書き方にちょっとコツがいる。3行目がなんで?って感じだけど、8usで1になってほしいが同時に0に戻ってほしいって感じかなー。
で、再生ボタンを押す。
こうなる。
で、デバッグを開始する。
ブレークしたところで、Logic Analyzerを表示させて、T1も表示するよう追加する。
こうする。
usで指定したので8instruction Cycles周期はおかしい。たぶんバグ。Windows版だとちゃんと128instruction周期になる。16MHzでシミュレーションしていると思うので128instruction周期は正解。Linux版のバグだと思う。
Windows版で同じようにやった結果。Microchipにクレームを入れるとか大それたことはしない。
で、こうする。Linux版はcycでしか指定できないゾって前もってわかっていれば問題ない。
で、デバッグ開始して、進めていく。
はい、こうなりますー。うまくいったぜー。やるなーMPLAB。"今すぐVSCode+Arduino拡張機能をやめてMPLABに移行すべき10の理由"とか書こうかな、、、いや、好きずきだし、場合によって向いている向いてないあるよね。しかし、基本的な動作の確認用としてはすばらしいよ。
コメントをお書きください