PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : UART ermöglicht Senden, Empfang scheint allerdings gestört



batti112
22.06.2004, 14:37
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? ;-)

Würde mich auch über programmiertechnische Tipps sehr freuen.

MfG

Batti

batti112
22.06.2004, 14:39
Ach ja, eins hab ich noch vergessen ;-)
Habe keinen Kondensator zwischen VCC und GND geschalten der eventuelle "Störspannungen" auffängt. Aber wenn dies der fall wär, dann müssten die gesendeten Daten doch auch gestört sein..., oder nicht?

MfG
Batti

Kjion
23.06.2004, 10:20
Hi,

ich sehe jetzt spontan eigentlich keinen Fehler. Vor allem wenn du Daten mit dem PC korrekt empfangen kannst...

Was ist denn das für ein Quarz bzw. welche Baudrate verwendest du ??

Aber noch was allgemeines:
Man kann statt "outp( 0, UBRRH );" auch einfach "UBRRH = 0;" schreiben. Du die "outp" bzw. "inp" Methode wird von dem Compiler in den nächsten Version irgendwann nicht mehr unterstüzt werden, daher sollte man die andere Schreibweise nutzen ( die nebenbei auch noch viel übersichtlicher ist wie ich finde )...

MfG Kjion

( PS : Ich hab in deinem Beitrag mal einen Codetag gesetzt. Es ist einfach besser zu überblicken so )

batti112
23.06.2004, 12:30
Hi!
Verwende einen 4Mhz Quartz und eine Baud-Rate von 9600.
Gestern abend lief er auffeinmal, über meinen Windowsrechner.
Muss da mal weitertesten, denn der Empfang vom Linuxrecher war bis dato völlig ok.
Doch irgendwie geht bei dem jetzt nichts mehr so wirklich.

Werde das verfolgen und mich dann wieder melden.

MfG
Batti