batti112
22.06.2004, 19:51
Hi!
Habe an meinem Atmega8 ein "UART-Modul" angebaut.
Senden kann der µC ohne Probleme und ohne Störungen.
Allerdings reagiert er auf ein Senden vom PC aus überhaupt nicht.
Das Proggy soll nur die empfangenen Daten wieder zum PC zurücksenden.
Nutze folgenden Code:
void init_uart()
{
outp( (CPU_Frequency / (UART_Baud_Rate*16L))-1 , UBRRL );
outp( 0, UBRRH );
outp( (1 << URSEL) | (3 << UCSZ0), UCSRC);
outp( (1 << RXCIE) | (1 << TXEN) | (1 << RXEN), UCSRB);
sei();
}
SIGNAL(SIG_UART_RECV)
{
uart_send( inp(UDR) );
}
void uart_send(char character)
{
loop_until_bit_is_set(UCSRA, UDRE);
outp(character, UDR);
}
int main()
{
outp( 15 , DDRD ); /* PIN 5-8 as Input*/
init_uart();
delay(3);
uart_send('H');
uart_send('a');
uart_send('l');
uart_send('l');
uart_send('o');
uart_send(10);
uart_send(13);
while(1);
return 0;
}
************************************************** **********************************
Müsste die Interrupt-Routine nicht auch bei Datenschrott reagieren?
Kann es an einer Fehlkofiguration der Schnittstelle liegen? (Obwohl die vom µC gesendeten Daten korrekt vom PC empfangen werden?)
Oder das wahrscheinlichste, hab ich einen hab ich einen Fehler gemacht? Zwinkern
Würde mich auch über programmiertechnische Tipps sehr freuen.
MfG
Batti
Habe an meinem Atmega8 ein "UART-Modul" angebaut.
Senden kann der µC ohne Probleme und ohne Störungen.
Allerdings reagiert er auf ein Senden vom PC aus überhaupt nicht.
Das Proggy soll nur die empfangenen Daten wieder zum PC zurücksenden.
Nutze folgenden Code:
void init_uart()
{
outp( (CPU_Frequency / (UART_Baud_Rate*16L))-1 , UBRRL );
outp( 0, UBRRH );
outp( (1 << URSEL) | (3 << UCSZ0), UCSRC);
outp( (1 << RXCIE) | (1 << TXEN) | (1 << RXEN), UCSRB);
sei();
}
SIGNAL(SIG_UART_RECV)
{
uart_send( inp(UDR) );
}
void uart_send(char character)
{
loop_until_bit_is_set(UCSRA, UDRE);
outp(character, UDR);
}
int main()
{
outp( 15 , DDRD ); /* PIN 5-8 as Input*/
init_uart();
delay(3);
uart_send('H');
uart_send('a');
uart_send('l');
uart_send('l');
uart_send('o');
uart_send(10);
uart_send(13);
while(1);
return 0;
}
************************************************** **********************************
Müsste die Interrupt-Routine nicht auch bei Datenschrott reagieren?
Kann es an einer Fehlkofiguration der Schnittstelle liegen? (Obwohl die vom µC gesendeten Daten korrekt vom PC empfangen werden?)
Oder das wahrscheinlichste, hab ich einen hab ich einen Fehler gemacht? Zwinkern
Würde mich auch über programmiertechnische Tipps sehr freuen.
MfG
Batti