Zdravim vsechny, nevite nahodou nekdo cim by mohlo byt ze me nefunguje komunikace USART na procesoru mega8? Mam tam externi krystal 16MHz, kterej me funguje urcite dobre. Zkousel jsem snad vsechno nastaveni, menit paritu, stop bity, baud rate, ty rychlosti jsem zkousel od 600 do 14400 a na zadne to nejede spravne. Chova se to tak, ze to vzdy prijima spatne znaky. Proste nesmysly. Aji pri samotnym prijmu. Zde prikladam program kde by to melo vypsat znak kterej tam poslu. Zkousel jsem u double speed, u ktere vychazi pri rychlostu 2400 nejmensi chyba (ubrr = 832).
Z jakykoli rady budu moc vdecnej. Diky moc
#include <avr\io.h> // hlavièkový soubor pro použitý mikrokontrolér
#include <inttypes.h>
#define FOSC 16000000UL
#define BAUD 2400
#define MYUBRR FOSC/8/BAUD-1
//#define MYUBRR 832
void USART_Init( unsigned int ubrr);
unsigned char USART_Receive( void );
void USART_Transmit( unsigned char data );
int main(void)
{
USART_Init(MYUBRR);
unsigned char i;
while(1) {
i = USART_Receive();
USART_Transmit(i);
}
}
/**************************************************************************/
unsigned char USART_Receive( void )
{
/ Wait for data to be received /
while ( !(UCSRA & (1<<RXC)) )
;
/ Get and return received data from buffer */
return UDR;
}
/***************************************************************************/
void USART_Transmit( unsigned char data )
{
/* Wait for empty transmit buffer /
while ( !( UCSRA & (1<<UDRE)) )
;
/ Put data into buffer, sends the data /
UDR = data;
}
/**************************************************************************/
void USART_Init( unsigned int ubrr)
{
/* Set baud rate */
UBRRH = (unsigned char)(ubrr>>8);
UBRRL = (unsigned char)ubrr;
UCSRB = (1<<TXEN)|(1<<RXEN);
UCSRC = (1<<URSEL)|(1<<UCSZ0)|(1<<UCSZ1);
UCSRA = (1<<U2X);
}
/***************************************************************************/
administrator: přejmenováno z "CHYBA při komunikacu USART a mega8"