私はマイクロコントローラーのプログラミングにかなり慣れていません。私は Arduino の経験がある程度ありますが、プロジェクトをほぼ完成させた後、現在のプロジェクトをより安価で小規模なものに移行することにしました。そのため、現在 Atmel studio で AVR ATmega32 を使用しています。
ATmega32 を使用して MAX7219 チップと通信し、LED マトリックスと多重化しようとしています。ただし、通信したい複数の異なるデバイスがあります。
マイクロコントローラで提供されている SPI ピンを実際に使用せずにデバイスと通信するにはどうすればよいですか? テストプロジェクトを作成しましたが、何か問題があるようで、何が問題なのかわかりません。すべての LED が点灯しているので、なんとかテスト モードになったと思いますが、その後は何もできません。ディスプレイをクリア/シャットダウンすることさえできません。配線を再確認しました。ピン構成とピンの割り当てに関して、私のコーディングはおそらく間違っていますか? これに関する提案や、コードを記述するためのより良い方法はありますか?
MA7219 データシートへのリンクは次のとおりです。
//test
#include <avr/io.h>
int main(void)
{
DDRB = 0b00000111; // pin 1(data), 2(clock) and 3(latch) are outputs
PORTB = 0 << PINB0; // data pin 1 is low
PORTB = 0 << PINB1; // clock pin 2 is low
PORTB = 0 << PINB2; // latch pin 3 is low
uint16_t data;
data = 0b0000110000000000; // data to shift out to the max7219
//read bit
uint16_t mask;
for (mask = 0b0000000000000001; mask>0; mask <<= 1)
{
//iterate through bit mask
if (data & mask)
{ // if bitwise AND resolves to true
// send one
PORTB = 1 << PINB0;
// tick
PORTB = 1 << PINB1;
// tock
PORTB = 0 << PINB1;
}
else{ //if bitwise and resolves to false
// send 0
// send one
PORTB = 0 << PINB0;
// tick
PORTB = 1 << PINB1;
// tock
PORTB = 0 << PINB1;
}
}
PORTB = 1 << PINB2; // latch all the data
PORTB = 1 << PINB0; // data pin 1 is high
PORTB = 0 << PINB1; // clock pin 2 is low
PORTB = 0 << PINB2; // latch pin 3 is low
}