Wiem że temat ten byl wałkowany wielokrotnie ale nie znalazłem rozwiązania. Chodzi mi o to czy ktoś może przetestować kod na jakimś sprawdzonym układzie pod kątem odbierania bajtu. Atmegę łączę bezpośrednio z ukłądem FPGA ale przeważnie odbieram liczbę 130. Jedyne na czym mogę podejrzeć odebrany bajt to wyświetlenie na kolorowym wyświetlaczu pixeli i prawie zawsze pixela wyświetlana jest na wspolrzednych 130x130 (znakxznak), niezależnie od tego jaki bajt wyślę. W FPGA tak podzieliłem zegar żeby uzyskać baud 9600 (3,6864MHz na liczniku liczącym do 384) a avr skonfigurowany jak w kodzie. Atmega smiga na kwarcu zewnetrznym(z kondensatorami) 4MHz. Fuse bity mam ustawione(ISP PROGRAMMER Adama Dybkowskiego)(czy dobrze je ustawilem?):
1 BODLEVEL
1 BODGEN
1 SUT1
0 SUT0
1 CKSEL3
0 CKSEL2
1 CKSEL1
0 CKSEL0
1 RSTDISBL
1 WDTON
1 CKOPT
1 EESAVE
0 BOOTSZ1
0 BOOTSZ0
1 BOOTRST
Na razie interesuje mnie odebranie 1 bajtu tak wiec nie zwracajcie uwagi na indeksowanie tablicy. Niestety nie mam możliwości jak na razie podejrzenia transmisji na PC czy wyświetlaczu alfanum. co przyszło, a szybko chciałbym rozwiązać ten problem. Transmisja ma być jednostronna FPGA(3,3V) -> Atmega(5V). Sprawdziłem i mega poprawnie odbiera poziom 3,3V.
1 BODLEVEL
1 BODGEN
1 SUT1
0 SUT0
1 CKSEL3
0 CKSEL2
1 CKSEL1
0 CKSEL0
1 RSTDISBL
1 WDTON
1 CKOPT
1 EESAVE
0 BOOTSZ1
0 BOOTSZ0
1 BOOTRST
Na razie interesuje mnie odebranie 1 bajtu tak wiec nie zwracajcie uwagi na indeksowanie tablicy. Niestety nie mam możliwości jak na razie podejrzenia transmisji na PC czy wyświetlaczu alfanum. co przyszło, a szybko chciałbym rozwiązać ten problem. Transmisja ma być jednostronna FPGA(3,3V) -> Atmega(5V). Sprawdziłem i mega poprawnie odbiera poziom 3,3V.
int main (void)
{
LCD_init();
USART_initialize(9600);
waitms(500);
LCD_put_clear(WHITE);
unsigned char znak;
int index=0;
while(1)
{
if (readbyte(&znak))//pobranie jednego znaku
{
LCD_put_pixel(BLACK,znak,znak);
mem[index]=znak;//zapisz znak do tablicy
if (index<MAX) index++;
}
}
}
void USART_initialize(long int baud)
{
UCSRB = (1<<RXEN)|(1<<TXEN); // Set RXEN and TXEN enable 00011000
UCSRC = 0x06; // Set to 8 bit, NP, 1 stop bit
if (baud==2400)
{
UBRRL = 0x67; // set Buad Rate
UBRRH = 0x00; // set Buad Rate
} else
if (baud==4800)
{
UBRRL = 0x33; // set Buad Rate
UBRRH = 0x00; // set Buad Rate
} else
if (baud==9600)
{
UBRRL = 0x19; // set Buad Rate
UBRRH = 0x00; // set Buad Rate
} else
if (baud==19200)
{
UBRRL = 0x0C; // set Buad Rate
UBRRH = 0x00; // set Buad Rate
}
}
unsigned char readbyte (unsigned char *data)
{
// non blocking routine..checks Receive complete bit, returns 0 if nothing available
// returns 1 if data available
if (UCSRA & 0x80) {
*data = UDR;
return 1;
} else {
return 0;
}
}