16x8マトリックスLED 第二弾 その2 [Arduino]
ATtiny2313でシリアル入力をして、それをマトリックスLEDに表示していくスケッチです。
よく分からないながらも、いろんなサイトを参考にして、何とか形になりました。
こんな感じでワイヤーを4本つなぎ、シリアル入力選択用のジャンパを外しておきます。
そしてATtiny2313 (Int. 8MHz) に、次のスケッチを書き込みます。
ATtiny2313 に書き込みが終わったら、ワイヤーをはずして、ジャンパーピンをArduinoの0番ピンからの入力にします(FT232RLからのデータを直接受け取る)。
そしたら、シリアルモニターでボーレートを合わせ(とりあえず9600にしてみた)、なにか適当に入力するとその文字が2進数表記で表示されるようになりました。
よく分からないながらも、いろんなサイトを参考にして、何とか形になりました。
こんな感じでワイヤーを4本つなぎ、シリアル入力選択用のジャンパを外しておきます。
そしてATtiny2313 (Int. 8MHz) に、次のスケッチを書き込みます。
// 電光掲示板(シリアル受信, ATtiny2313):シリアルでデータを受信し、受信されるごとにスライドしていく #define BAUD 9600 // ボーレート // ATtiny2313 のピンとマトリックスLEDの対応配列(ポート PD0 なら 0xD0 ということにした) const byte pin_matrixCol[8] = { 0xB4, 0xA1, 0xA0, 0xB1, 0xD3, 0xB2, 0xB6, 0xB7}; // Matrxの列のポート const byte pin_matrixRow[8] = { 0xB0, 0xB5, 0xD5, 0xB3, 0xD6, 0xD4, 0xD1, 0xD2}; // Matrxの行のポート byte matrixImage[16]; // イメージの配列 byte matrixIndex = 0; // イメージの表示開始位置 void setup() { UBRRH = (F_CPU / 16 / BAUD - 1) >> 8; UBRRL = (F_CPU / 16 / BAUD - 1); UCSRB = (1 << RXEN) | (0 << TXEN) | (1 << RXCIE); // 受信許可,送信不可,割り込み許可 UCSRC = (0 << USBS) | (3 << UCSZ0); // stopbit 1bit , 8bit送信 sei(); } void loop() { byte x, y; for( x = 0; x < 8; x++ ) { for( y = 0; y < 8; y++ ) { if ( matrixImage[ ( x + matrixIndex ) % 16 ] & (1 << y) ) setPixelTn2313( pin_matrixCol[x], pin_matrixRow[y]); else setMatrixAllOffTn2313(); if ( matrixImage[ ( x + 8 + matrixIndex ) % 16 ] & (1 << y) ) setPixelTn2313( pin_matrixRow[y], pin_matrixCol[x]); else setMatrixAllOffTn2313(); } } } ISR(USART_RX_vect) { // 割り込みによる受信 matrixImage[matrixIndex++] = UDR; matrixIndex %= 16; } void setMatrixAllOffTn2313() { // Tiny2313をすべて入力に(ハイ・インピーダンスに) DDRA = B00000000; PORTA = B00000000; DDRB = B00000000; PORTB = B00000000; DDRD = B00000000; PORTD &= B00000001; // PD0 は RXD (シリアル受信用なので触らず) } void setPixelTn2313(byte pin_H, byte pin_L) { setMatrixAllOffTn2313(); switch (pin_H & 0xF0) { case 0xA0: DDRA = 1 << (pin_H & 0x0F); PORTA = 1 << (pin_H & 0x0F); break; case 0xB0: DDRB = 1 << (pin_H & 0x0F); PORTB = 1 << (pin_H & 0x0F); break; case 0xD0: DDRD = 1 << (pin_H & 0x0F); PORTD |= 1 << (pin_H & 0x0F); break; } switch (pin_L & 0xF0) { case 0xA0: DDRA |= 1 << (pin_L & 0x0F); break; case 0xB0: DDRB |= 1 << (pin_L & 0x0F); break; case 0xD0: DDRD |= 1 << (pin_L & 0x0F); break; } }
ATtiny2313 に書き込みが終わったら、ワイヤーをはずして、ジャンパーピンをArduinoの0番ピンからの入力にします(FT232RLからのデータを直接受け取る)。
そしたら、シリアルモニターでボーレートを合わせ(とりあえず9600にしてみた)、なにか適当に入力するとその文字が2進数表記で表示されるようになりました。
2012-01-07 17:43
nice!(0)
コメント(0)
トラックバック(0)
コメント 0