Задача передать данные из
Arduino Mega2560 в AVR микроконтроллер
Atmega8A .
Нашел
обратную задачу и она работает.
Изначально писал руками по даташиту Atmega и материалам
раз,
два,
три.
Пробовал использовать готовые библиотеки для
Arduino и для
Atmega.
Код Arduino:
unsigned char n;
void setup() {
Serial1.begin(9600);
pinMode(19,INPUT);//RXD pin is set for INPUT
pinMode(18,OUTPUT);
}
void loop() {
// if (Serial1.available()) {
//for(n=100; n<= 255;n++){
//Serial1.print(n, BIN);
Serial1.print(0b00001000, BIN);
delay(1000);
//}
// }
}
Код Atmega:
#define F_CPU 16000000UL
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void) {
unsigned char m;
m = 7;
portIni();
LCDIni();
setPos(0,0);
//unsigned char n; // Переменная общего счётчика
char buffer [64];
DDRD |= (1 << PIND0);//PORTD pin0 as INPUT
DDRC=0xFF;//PORTC as OUTPUT
int UBRR_Value = 6; // 9600 baud rate
UBRRH = (unsigned char) (UBRR_Value >> 8);
UBRRL = (unsigned char) UBRR_Value;
UCSRB = (1 << RXEN) | (1 << TXEN);
//UCSRC = (1 << USBS) | (3 << UCSZ0);
UCSRC = (1<<URSEL)|(1<<USBS)|(3<<UCSZ0);
//UCSRB = (1<<RXEN)|(1<<TXEN)|(1<<RXCIE)|(TXCIE);
/* Set frame format: 8data, 1stop bit */
//UCSRC = (1<<URSEL)|(3<<UCSZ0);
unsigned char receiveData;
//sprintf(buffer, "Wait...", m);
//LCDString(buffer);
//_delay_ms(1000);
while (1)
{
while (! (UCSRA & (1 << RXC)) );
receiveData = UDR;
if (receiveData >= 0x01){
LCDClear();
sprintf(buffer, "%3d", receiveData);
LCDString(buffer);
_delay_ms(2);
} else {
LCDClear();
sprintf(buffer, "Wait...", m);
LCDString(buffer);
_delay_ms(1000);
}
}
}
Закомментированный код, специально не убирал, там параметры которые так же проверялись.
Результат один и тот же - передаёт некорректные данные. По отладчику протеуса основной проблемой является некорректное
число бода.
Собственно вопрос как откорректировать\подобрать данный параметр или проблема в чём-то другом?