Перейти к содержанию
    

player631

Новичок
  • Постов

    1
  • Зарегистрирован

  • Посещение

Репутация

0 Обычный
  1. Доброго времени суток всем! Мне требуется связать Arduino Pro Mini и Attiny828 по SPI протоколу, в роли мастера будет ардуино. Никак не могу разобраться. Подключаю все верно, но передачи нет. Ошибок в коде найти не могу, делал все с помощью datasheet на аттину, изучением библиотек ардуино ну и гугла конечно:) Вот код для Ардуино (Arduino IDE): #include <SPI.h> #include <LiquidCrystal_I2C.h> #include <OneWire.h> LiquidCrystal_I2C lcd(0x27, 16, 2); const byte SLAVE_1 = 10; const byte SLAVE_2 = 9; void setup() { // put your setup code here, to run once: SPI.begin(); SPI.setClockDivider(SPI_CLOCK_DIV16); pinMode(SLAVE_2, OUTPUT); digitalWrite(SLAVE_2, HIGH); lcd.init(); lcd.backlight(); lcd.print("test"); } byte transferAndWait(byte SLAVE) { digitalWrite(SLAVE, LOW); delay(20); byte rx = SPI.transfer(3); delay(20); digitalWrite(SLAVE, HIGH); return rx; } void loop() { // put your main code here, to run repeatedly: byte data = transferAndWait(SLAVE_1); if(data != 0) { lcd.clear(); lcd.print(data); delay(1500); } if(transferAndWait(SLAVE_2) == 3) { lcd.clear(); lcd.print("123"); delay(1500); } } Здесь подключаю еще к ней экранчик, чтобы видеть делается/ передается ли что то вообще. А вот код для Аттину (Atmel Studio 7): #define F_CPU 1000000 #define DD_MISO DDD1 #define DD_MOSI DDD0 #define DD_SCK DDD3 #define DDR_SPI DDRD #include <avr/io.h> #include <util/delay.h> void SPI_SlaveInit(void) { DDR_SPI = (1<<DD_MISO); SPCR = (1<<SPE); } char SPI_SlaveReceive(void) { SPDR = 3; while(!(SPSR & (1<<SPIF))); _delay_ms(20); return SPDR; } int main(void) { DDRA = 0xFF; SPI_SlaveInit(); PORTA |= (1<<PORTA5); _delay_ms(2000); PORTA &= ~(1<<PORTA5); _delay_ms(500); while (1) { int data = SlaveReceive(); if(data != 0) { for(int i = 0; i < data; i++) { PORTA |= (1<<PORTA5); _delay_ms(500); PORTA &= ~(1<<PORTA5); _delay_ms(500); } } else { PORTA |= (1<<PORTA5); _delay_ms(1000); PORTA &= ~(1<<PORTA5); _delay_ms(500); } } } У Аттину код уже переделанный на 1000 раз после долгих мучений)) Вроде как застрявает программа на SlaveReceive функции или "while(!(SPSR & (1<<SPIF)))" иногда даже тут. Подключал лампочку опять же для проверки что происходит. Пробовал просто "замкнуть" MOSI и MISO на ардуино между собой, там все хорошо, передает то что нужно. Никак не могу разобраться Заранее спасибо.
×
×
  • Создать...