www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AT90CAN128 Uart Problem


Autor: Christian Mertens (inscene)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Otto (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Christian,

hast Du die Fuses denn auf externen Oszillator umgestellt?

Gruss Otto

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Axel R. (axelr) Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Christian,
int main(void)
{
  uart1_init();
  sei();        //  generelle Interruptfreigabe

  char s[7];
  s[1]="H";
  s[2]="e";
  s[3]="l";
  s[4]="l";
  s[5]="o";
  s[6]="!";
  s[7]="!";
  uart1_send(s,7);
}

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.
int main(void)
{
  uart1_init();
  sei();        //  generelle Interruptfreigabe

  char s[7];
  s[0]="H";
  s[1]="e";
  s[2]="l";
  s[3]="l";
  s[4]="o";
  s[5]="!";
  s[6]=0x00;
  uart1_send(s,7);
}


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

Autor: Christian Mertens (inscene)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Alex F. (alexf)
Datum:

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

Alex

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht 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
 char s[7];
  s[0]='H';
  s[1]='e';
  s[2]='l';
  s[3]='l';
  s[4]='o';
  s[5]='!';
  s[6]=0x00; 
  //oder alternativ: 
  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
char s[] = "Hello!";

Also bitte '' und "" unterscheiden. Sind zwei verschiedene Paar 
Schuhe...

Autor: Axel R. (axelr) Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert
aja, fiel mir nicht auf, siehste :-)

Autor: Christian Mertens (inscene)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Christian Mertens (inscene)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Christian Mertens (inscene)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Axel R. (axelr) Flattr this
Datum:

Bewertung
0 lesenswert
nicht 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?

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.