Hallo Leute, ich sitze jetzt 2 Tage an diesen Problem und sicherlich könnt ihr mir helfen. Ich habe das ATMegaEvoBoard mit AT90CAN128 von http://www.microcontroller-starterkits.de/ und versuche über den USB-Anschluss Zeichen an meinen PC zu senden. Das Board ist korrekt als USB-Serial Port erkannt und auf 9600 Baud, 8 Databits, kein Parity, 1 Stop Bit und kein FlowControl eingestellt. Ich empfange auch Daten aber nur Müll. Habe mir auch schon das Datenblatt und verschiedene Beiträge hier durchgelesen, finde aber meinen Fehler nicht. Ich verwende AVR-Studio 4.13 SP1, AT90CAN128 plugin V106 und WinAVR 20070525. Bin über jede Hilfe dankbar. Christian
Hallo Christian, hast Du die Fuses denn auf externen Oszillator umgestellt? Gruss Otto
Hallo Christian,
1 | int main(void) |
2 | {
|
3 | uart1_init(); |
4 | sei(); // generelle Interruptfreigabe |
5 | |
6 | char s[7]; |
7 | s[1]="H"; |
8 | s[2]="e"; |
9 | s[3]="l"; |
10 | s[4]="l"; |
11 | s[5]="o"; |
12 | s[6]="!"; |
13 | s[7]="!"; |
14 | uart1_send(s,7); |
15 | }
|
fangen die Arrays nicht bei NULL an?( s[0..6] )Du überschreibst Dir mit s[7] die nächste Variable im Speicher. Welche, weiss ich jetzt auf Anhieb auch nicht. Am Ende vom zu sendenen String kommt eigentlich eine NULL, damit die Senderoutine weiss, wo der String aufhört. Hier egal, das Du die Länge explizit mit angibts.
1 | int main(void) |
2 | {
|
3 | uart1_init(); |
4 | sei(); // generelle Interruptfreigabe |
5 | |
6 | char s[7]; |
7 | s[0]="H"; |
8 | s[1]="e"; |
9 | s[2]="l"; |
10 | s[3]="l"; |
11 | s[4]="o"; |
12 | s[5]="!"; |
13 | s[6]=0x00; |
14 | uart1_send(s,7); |
15 | }
|
>Ich empfange auch Daten aber nur Müll.
Kannst Du den Müll in hexadezimaler Schreibweise aufzeichnen?
0xFF - "Müll" = erwartetes Zeichen, könnte es das sein?
Wie sieht dein Pegelwandler aus (USB auf dem Evalboard oder extern)?
Wie Otto schon frug, stimmen die 8Mhz?
Gruß
AxelR.
@Otto Die Fuses sind wie folgt eingestellt: Brown-Out detection disabled; JTAG Interface enabled; Serial Program downloading enabled; Boot flash section size=4096; Ext. Crystal Osc.; Frequency 8.0- MHz; Startup Time: 16K CK + 4,1 ms; @Axel Jup, das stimmt. Habe das doch glatt übersehen ;-) Daran lag es aber leider auch nicht. Ich bekomme folgende Hex-Ausgabe 28 08 49 08
Ein C-String ist immer nullterminiert. "H" ist äquivalent zu 'H' plus '\0'. Deshalb müsste es, wenn man die Zeichen schon einzeln schreibt, eher heißen
1 | char s[7]; |
2 | s[0]='H'; |
3 | s[1]='e'; |
4 | s[2]='l'; |
5 | s[3]='l'; |
6 | s[4]='o'; |
7 | s[5]='!'; |
8 | s[6]=0x00; |
9 | //oder alternativ:
|
10 | s[6] = '\0'; |
Bei der obigen Schreibweise (OP und folgende Postings) werden jedem Array-Element zwei Zeichen zugewiesen, was natürlich nicht gut gehen kann... Die einfachste Lösung ist aber sicher
1 | char s[] = "Hello!"; |
Also bitte '' und "" unterscheiden. Sind zwei verschiedene Paar Schuhe...
So, ich habe es nun geschafft über den USART1 (USB-Anschluss) Daten an meinen PC zu senden. Leider schaffe ich es immer noch nicht Daten über den USART0 zu senden. In AVR Studio kann ich es einwandfrei simulieren. Vielleicht sieht jemand von euch den Fehler. Ist vielleicht die IO.h Datei von winavr defekt? Dann würde es unter AVR Studio laufen aber beim compilieren durch winavr fehlerhaft werden. Gruß, Christian
Fehler eingeschränkt! Der Code läuft einwandfrei. Ich habe die Ports auf ne eigene MAX232 Schaltung gesetzt und es lief. Liegt also am Board. Wenn ich den Fehler genau kenne, werde ich ihn hier posten. Falls es noch ander gibt die sich damit plagen. Gruß, Christian
Abschlußbericht: Ich habe zwei Fehler bei dem Board gefunden. Erstens war ein Pin des ST202EB IC's nicht richtig mit dem Board verbunden. Der Kleber, der den SMD-Chip beim löten festhält ist über den Pin-Anschluss gelaufen. Den Fehler konnte ich einfach durch nochmaliges per Hand löten beheben. Der zweite Fehler ist da gravierender. Laut Datenblatt des Boards ist der Pin7 vom ST202EB mit Pin2 vom SUB-D Stecker und Pin8 vom ST202EB mit Pin3 vom SUB-D Stecker verbunden. Dieses ist aber genau umgekehrt. Dadurch ist der Sender auf den Sender und der Empfänger auf den Empfänger angeschlossen. Entweder man korrigiert das jetzt selber auf den Board oder verwendet ein Nullmodemkabel. Danke nochmals für die Hilfe von euch und ich hoffe, dass anderen die mit diesem Board arbeiten dieses eine Hilfe ist. Gruß, Christian
RX-TX vertauscht? Iss ja 'nen Ding. Passiert mir sicher auch hin und wieder. Auf Bastelplatinen kein Problem. Aber bei einem kommerziellen Produkt? Sicher, das das nicht evtl. so gewollt ist? Hast Du eine SUB-D Buchse oder einen Stecker am Board?
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.