· 

MPLAB X IDEでAVRマイコン開発(2)

つづきです。

外部入力も含めてシミュレーションする。前回のプログラムであえて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の理由"とか書こうかな、、、いや、好きずきだし、場合によって向いている向いてないあるよね。しかし、基本的な動作の確認用としてはすばらしいよ。