Ich hangle mich gerade zum ersten mal durch USART durch aber ich komme
nicht klar.
Ich habe ein Display angeschlossen und das funktioniert auch.
Bevor ich erstmalig Daten Empfange Schicke ich noch schnell was ans
Display und auf Tastendruck lösche ich das Display und komme dann in
meine Endlosschleife für send/receive USART.
- Ich benutze keinen externen Oszillator.
- CKDIV8 ist aus
- Am PC habe ich nur einen Com Port - > Com1
- Nutze Null Modem Kabel
- Als UART Modul nutze ich dieses: http://www.ebay.de/itm/121212075055
Ich bin mir bei dem Modul nicht sicher was ich anschliessen muss. Muss
ich 5V und GND anschliessen? Ich denke ja. Muss ich RX vom Modul mit TX
oder RX vom MC verbinden? Auf dem Modul sind zwei LEDs die habe ich
bisher nicht leuchten sehen!
- Am PC (Windows 7) habe ich Putty und Terminal v1.19 probiert
- F_CPU steht auf 8Mhz
- #define BAUD 2400
- #define BAUDRATE ((F_CPU)/(BAUD*16UL)-1)
mein init sieht so aus:
1
voiduart_init(void)
2
{
3
UBRR0H=(BAUDRATE>>8);
4
UBRR0L=BAUDRATE;// baud rate setzen
5
UCSR0B|=(1<<TXEN0)|(1<<RXEN0);// enable receiver and transmitter
6
UCSR0C|=(1<<UCSZ00)|(1<<UCSZ01);// 8bit data format; 1 stop bit
7
}
So sieht mein send/receive aus
1
// Funktion zum senden
2
voiduart_transmit(unsignedchardata)
3
{
4
while(!(UCSR0A&(1<<UDRE0)));// Wait for empty transmit buffer
5
UDR0=data;// Put data into buffer, sends the data
6
}
7
8
// Funktion zum empfangen
9
unsignedcharuart_receive(void)
10
{
11
while(!(UCSR0A&(1<<RXC0)));// Wait for data to be received
12
returnUDR0;// Get and return received data from buffer
13
}
Und das passiert in der Endlosschleife. Hier habe ich mal probiert
gleich die Daten, nach kurzem Delay, wieder an den PC zu senden
(erfolglos).
1
a=uart_receive();
2
itoa(a,buffer,10);
3
lcd_clrscr();
4
lcd_home();
5
lcd_puts(buffer);
6
_delay_ms(100);
7
uart_transmit(a);
Bisher war bei Blinky, PWM, Timer und Display war die Fehlersuche nicht
so Komplex aber jetzt bei USART gibt es so viele Fehlerquellen!
Könnt ihr mir bitte auch schreiben was richtig ist. Damit ich auch schon
viel gewonnen.
UnendlichHoherPotentialtopf
UnendlichHoherPotentialtopf schrieb:> Muss ich 5V und GND anschliessen?
das wäre gar nicht so schlecht.
> Ich denke ja. Muss ich RX vom Modul mit TX oder RX vom MC verbinden?
Bietet sich auch an.
> Auf dem Modul sind zwei LEDs die habe ich> bisher nicht leuchten sehen!
Vermutlich leuchten sie, wenn die Stromversorgung angeschlossen ist und
Daten transferiert werden.
UnendlichHoherPotentialtopf schrieb:> - Nutze Null Modem Kabel
Ein Nullmodem-Kabel ist auf beiden Seiten weiblich. Wie bekommst du das
an deinen Adapter?
Entsprechend dem Stecker/Buchse Standard brauchst du ein normales
Datenkabel. Denn dein Adapter ist vom Anschluss her wie ein Modem zu
betrachten. Den Adapter könntest du auch direkt an den PC anschliessen.
Genauso wie ein Modem auch. Ist nur meistens unpraktisch. Deswegen
benutzt man ein Kabel.
Nullmodem-Kabel ist aber falsch. Damit verbindet man 2 PCs, bzw.
Terminals.
mfg.
STK500-Besitzer schrieb:> UnendlichHoherPotentialtopf schrieb:>> Muss ich 5V und GND anschliessen?> das wäre gar nicht so schlecht.
Ok, hatte ich ja. Also kann ich das ausschließen. Danke one down!
STK500-Besitzer schrieb:>> Ich denke ja. Muss ich RX vom Modul mit TX oder RX vom MC verbinden?> Bietet sich auch an.
Da hatte ich ein "oder" geschrieben. TX auf TX oder auf RX?
Thomas Eckmann schrieb:> Ein Nullmodem-Kabel ist auf beiden Seiten weiblich. Wie bekommst du das> an deinen Adapter?
Ich hab nen männlich angelötet. Durchgemessen und sollte i.O sein.
Habe nicht nur 2&3 sondern auch 4&6 und 7&8 getauscht.
Danke für den Hinweis.
Ich habe jetzt ein 1:1 Kabel genommen und RX an TX angeschlossen.
Und siehe da es funkt.
Bei "A" bekomme 65 und bei "a" bekomme ich "97".
Und die Antwort wird auch zurück an den PC gesendet.
Die Leds am Modul gehen auch an.
Ich bin begeistert.
Ich muss nochmal spielen aber ich denke es lag am Kabel.
Vielen Dank!
UnendlichHoherPotentialtopf
Thomas Eckmann schrieb:> Denn dein Adapter ist vom Anschluss her wie ein Modem zu> betrachten.
Woher weiss man das? Und ich Dussel hab mir extra noch nen Null-Modem
Kabel gebastelt. Im Artikel
http://www.mikrocontroller.net/articles/AVR-Tutorial:_UART steht das
auch noch, dass man KEINS nutzen soll.
So gehe jetzt auf Rotwein.
Du könntest noch einfacher ansetzen um den UART zu testen, als in einen
Eingabebuffer zu lesen und ans Display zu schicken. Sende z.B. "..." und
ändere so lange an deinen Steckern/Lötstellen/Terminal Einstellungen bis
das Zeichen auch ankommt. Die Gegenrichtung hast du dann in 5 Minuten
auch gelöst.
UnendlichHoherPotentialtopf schrieb:> Woher weiss man das?
Indem man sich ansieht, welche Verbindung mit wem herzustellen ist und
an welcher Position die Leitung an Stecker/Buchse liegt.
> Und ich Dussel hab mir extra noch nen Null-Modem> Kabel gebastelt. Im Artikel> http://www.mikrocontroller.net/articles/AVR-Tutorial:_UART steht das> auch noch, dass man KEINS nutzen soll.
Da ist aber auch kein Modul zwischengeschaltet. Das Tutorial geht von
einer jungfräulichen PC-UART aus.
Letzten Endes, wenn man nicht weiss, welche Belegung der jeweilige
Stecker/Buchse hat, probiert man einfach. Nicht umsonst gab es früher
eine ganze Reihe von 'Zwischenstecker', die zb Leitungen gekreuzt haben
oder die die Pegel der Leitungen mit LED sichtbar gemacht haben.
Karl Heinz schrieb:> Nicht umsonst gab es früher> eine ganze Reihe von 'Zwischenstecker', die zb Leitungen gekreuzt haben
Zweckmässig: eine "Break Out Box" mit beidseitig Stiften an allen
Anschlüssen, die man mit entsprechnden Kabelstückchen verbinden kann.
Georg
Karl Heinz schrieb:> Letzten Endes, wenn man nicht weiss, welche Belegung der jeweilige> Stecker/Buchse hat, probiert man einfach.
Spätestens, wenn irgendwelche Handshakeleitungen genutzt werden, diverse
Baudraten und Baudratenfehler auftreten können (falscher Takt am µC) und
die genutzten Pegel (RS232/TTL) nicht klar sind, ist Ausprobieren die
schlechteste Lösung. Systematisches Vorgehen mit Multimeter für die
Ruhepegel und ein Blick auf die Anzahl der tatsächlich verfügbaren
Schnittstellenleitungen (wg. HW-Handshake) hilft schon mal, um etliche
Kombinationen auszuschließen.
Wolfgang schrieb:> Karl Heinz schrieb:>> Letzten Endes, wenn man nicht weiss, welche Belegung der jeweilige>> Stecker/Buchse hat, probiert man einfach.>> Spätestens, wenn irgendwelche Handshakeleitungen genutzt werden
Ich geh von einem 'voll' verdrahtetem Kabel aus. Rx-Tx, CTS-DTS,
DSR-DTR, GND. Damit kriegt man 99% aller Verbindungen zum laufen.
> , diverse> Baudraten und Baudratenfehler auftreten können
Der unterschied ist, dass du bei falscher Verkreuzung keine Daten am
anderen Ende kriegst, bei Baudratenfehlern kriegst du welche aber sie
sind falsch.
Das lässt sich leicht auseinanderhalten.
> (falscher Takt am µC) und> die genutzten Pegel (RS232/TTL) nicht klar sind, ist Ausprobieren die> schlechteste Lösung. Systematisches Vorgehen mit Multimeter für die> Ruhepegel und ein Blick auf die Anzahl der tatsächlich verfügbaren> Schnittstellenleitungen (wg. HW-Handshake) hilft schon mal, um etliche> Kombinationen auszuschließen.
Mein ehemaliger Admin hatte mit seinen Zwischensteckern und probieren
eine Unterflur-UART von der VAX zu den Terminals schneller
funktionsfähig als du dein Multimeter auch nur ausgepackt hast.
Seit TTL UART in Mode gekommen sind, ist in der Doku normalerweise immer
angegeben, um welche UART es sich handelt: RS232 mit +-12V Pegel oder
TTL. Das ist das kleinere Problem. Das größere Problem ist historisch
gewachsen, weil nicht klar war, wie man einen 2.ten Rechner ansehen
will. Als DTE oder als DCE. Damit ging einher ein Wildwuchs in der
Verwendung von Stecker/Buchse bzw. welche der beiden Belegungen
anzuwenden ist. Wenn gar nichts geht einfach mal die andere Kreuzung
probieren und in mehr als 98% aller Fälle wars das dann auch schon.
Bei einem AVR kommt dann natürlich noch das Tak-'Problem' dazu. Aber das
kann man leicht erkennen: Kommt was, aber das falsche, dann ist es der
Takt. Kommt gar nichts, dann ist zumindest mal die Kreuzung falsch.
UnendlichHoherPotentialtopf schrieb:> Woher weiss man das? Und ich Dussel hab mir extra noch nen Null-Modem> Kabel gebastelt. Im Artikel
Leider gibt es da keinen Standard, häufig hängt es immer vom
Anwendungsfall ab wie der Herstelle die Buchse/Stecker belegt.
Aber in der Regel hat sich folgendes durchgesetzt:
Stecker (wie beim PC oder USB-RS232-Wandler) sind als DTE beschaltet.
Buchsen (bei Modems und andere Geräte die man direkt an den PC
anschließen kann) sind als DCE beschaltet.
Dazwischen brauch man ein RS232-Verlänergungskabel das 1:1 beschaltet
ist.
Für alle anderen Fälle ein NULL-Modem-Kabel mit zwei Buchsen bzw. zwei
Steckern.