Forum: Mikrocontroller und Digitale Elektronik AT90CAN128 Uart Problem


von Christian M. (inscene)


Angehängte Dateien:

Lesenswert?

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

von Otto (Gast)


Lesenswert?

Hallo Christian,

hast Du die Fuses denn auf externen Oszillator umgestellt?

Gruss Otto

von Falk B. (falk)


Lesenswert?


von Axel R. (Gast)


Lesenswert?

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.

von Christian M. (inscene)


Lesenswert?

@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

von Alex F. (alexf)


Lesenswert?

Versuch mal bitte  s[0]='H'; usw.
Obs allerdings daran liegt ?

Alex

von Johannes M. (johnny-m)


Lesenswert?

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...

von Axel R. (Gast)


Lesenswert?

aja, fiel mir nicht auf, siehste :-)

von Christian M. (inscene)


Angehängte Dateien:

Lesenswert?

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

von Christian M. (inscene)


Lesenswert?

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

von Christian M. (inscene)


Lesenswert?

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

von Axel R. (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.