MINO-o'-2016 3. テストFW

こっちもテストから行きます。

LEDテスト。
キーボードの時と同じなのでコードは略。
今回は引っかかりました。昨日書いたDACの罠にかかってMCUへの書き込みが出来なかったのです。DACへの線と書き込みの線が共有だからですね。180度回して付け直したらOK。LEDもちゃんとつきました。

スイッチテスト。
今回は使用しないですが、念のため。

#include<avr/io.h>

int main(){
  uint8_t x;

  DDRB = 0x06;  // PB1, PB2=OUT
  x=PINB;
  if( x & _BV(4)) {
    PORTB = 0x04; // PB1=L, PB2=H
  }
  else {
    PORTB = 0x02; // PB1=H, PB2=L
  }
  while(1);
}

問題なくOK。

DACテスト。305Hzの矩形波がでてくるはずです。

#include<avr/io.h>
#include<avr/interrupt.h>
#include<avr/sleep.h>
#include<avr/cpufunc.h>
#include<stdint.h>

EMPTY_INTERRUPT( TIMER0_OVF_vect );

int main(){
  uint8_t ctr = 0;
  uint8_t fast = 0;
  DDRB = 0x29;  // PB[0,3,5]=OUT
  PORTB = 0x10; // PB0=LRCK=LO, PB4 PUP

  if( PINB & 0x10 ) fast = 1;
  SPSR = 0x01;
  SPCR = 0x70;

  set_sleep_mode( SLEEP_MODE_IDLE );
  sleep_enable();

  // 20MHz/8/256/4/8=305Hz
  TCCR0A = 0x00;
  TCNT0 = 0x00;
  TIMSK0 = 0x01; // OVF
  TCCR0B = 0x02;

  sei();
  if( fast ) {
    while(1){
      register uint8_t lo8 = 0x00;
      register uint8_t hi8 = ((ctr&0x10)?0x01:0x00);
      sleep_cpu();
      asm volatile("out %[spdr],%[hi8]\n\t"
"nop\n\t" "nop\n\t" "nop\n\t" "nop\n\t"
"nop\n\t" "nop\n\t" "nop\n\t" "nop\n\t"
"nop\n\t" "nop\n\t" "nop\n\t" "nop\n\t"
"nop\n\t" "nop\n\t" "nop\n\t"
"out %[spdr], %[lo8]\n\t"
"nop\n\t" "nop\n\t" "nop\n\t" "nop\n\t"
"nop\n\t" "nop\n\t" "nop\n\t" "nop\n\t"
"nop\n\t" "nop\n\t" "nop\n\t" "nop\n\t"
"nop\n\t" "nop\n\t" "nop\n\t" 
::[spdr] "I" (_SFR_IO_ADDR(SPDR)), [hi8] "r"(hi8),[lo8] "r"(lo8));
      PINB = 0x01;
      ++ctr;
      ctr &= 31;
    }
  }
  else {
    while(1){
      register uint8_t lo8 = 0x00;
      register uint8_t hi8 = ((ctr&0x10)?0x01:0x00);
      sleep_cpu();
      asm volatile("out %[spdr],%[hi8]\n\t"
"nop\n\t" "nop\n\t" "nop\n\t" "nop\n\t"
"nop\n\t" "nop\n\t" "nop\n\t" "nop\n\t"
"nop\n\t" "nop\n\t" "nop\n\t" "nop\n\t"
"nop\n\t" "nop\n\t" "nop\n\t" "nop\n\t"
"out %[spdr], %[lo8]\n\t"
"nop\n\t" "nop\n\t" "nop\n\t" "nop\n\t"
"nop\n\t" "nop\n\t" "nop\n\t" "nop\n\t"
"nop\n\t" "nop\n\t" "nop\n\t" "nop\n\t"
"nop\n\t" "nop\n\t" "nop\n\t" "nop\n\t"
::[spdr] "I" (_SFR_IO_ADDR(SPDR)), [hi8] "r"(hi8),[lo8] "r"(lo8));
      PINB = 0x01;
      ++ctr;
      ctr &= 31;
    }
  }
}

SPIの送信タイミングの確認を兼ねてます。
で、右しか聞こえない問題発覚。半田付けミスでした。
つけ直したらOK。両方から聞こえます。
ちょっと波形がアレですが気にしないことにします。