www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik UART funktioniert nicht


Autor: Florian (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich habe mir mal den code ausm avr-gcc tutorial geschnappt und versucht 
damit mein USART zu programmieren, jedoch funktioniert dieses leider 
nicht.

Ich benutze einen Mega8.
Und das Atmel Evulationsboard Ver. 2.01 von Pollin.
Die datei hab ich vorsichtshalber nochmal angehengt.

Wär nett, wenn ihr mir ein paar Tips  geben könntet.

Vielen Dank schon einmal
Florian

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zeile 42

Autor: Otto (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Fuses ?

Otto

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zieh mal die Ausgabe in die Schleife hinein, damit der AVR ein bischen 
mehr sendet als nur 1-mal 'x'
....

    while( 1 ) {
      while (!(UCSRA & (1<<UDRE)))  /* warten bis Senden moeglich                   */
      {
      }
 
      UDR = 'x'; 
    }
}

Autor: Florian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also ich habs auch schon in der schleife gehabt, jedoch funktioniert es 
dann auch nicht.

Zu den Fuses kann ich morgen erst neues sagen, da ich morgen erst wieder 
auf der Arbeit bin, jedoch weiß ich, dass ein interner RC-Oszillator von 
1MHz eingestellt ist.

Danke für eure Antworten
Florian

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Florian schrieb:
> Also ich habs auch schon in der schleife gehabt, jedoch funktioniert es
> dann auch nicht.
>
> Zu den Fuses kann ich morgen erst neues sagen, da ich morgen erst wieder
> auf der Arbeit bin, jedoch weiß ich, dass ein interner RC-Oszillator von
> 1MHz eingestellt ist.

Was grundsätzlich schon einmal problematisch ist.

Was heisst in diesem Zusammenhang eigentlich 'funktioniert nicht'.
Kommt irgendetwas an, kommt gar nichts an?

Hast du die Hardware (MAX232 / Kabel) schon durchgeprüft?

Autor: Florian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also es kommt nichts an.
Ich benutze Putty und hab das Kabel also den USB-Seriell Wandler 
insofern geprüft, dass ich eine Schaltung von einem Kollegen 
angeschlossen habe und die hat einwandfrei funktioniert.

Durchgeprüft hab ich dem MAX232, welchen ich benutze, jedoch noch nicht.
Aber das wird morgen wohl das erste sein, was ich machen werde, vielen 
Dank :D

Florian

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Florian schrieb:
> Also es kommt nichts an.
> Ich benutze Putty und hab das Kabel also den USB-Seriell Wandler
> insofern geprüft, dass ich eine Schaltung von einem Kollegen
> angeschlossen habe und die hat einwandfrei funktioniert.

Das sagt noch gar nichts.

>
> Durchgeprüft hab ich dem MAX232, welchen ich benutze, jedoch noch nicht.
> Aber das wird morgen wohl das erste sein, was ich machen werde, vielen
> Dank :D

Du machst das so:
Am Prozessor verbindest du Rx mit Tx. Dazu nimmst du den Prozessor aus 
seinem Sockel und verbindest du Pins mit einer Drahtbrücke.

Am PC, im Terminalprogramm tippst du Zeichen. Diese Zeichen müssen 
wieder am Terminal erscheinen. Erst dann weisst du, dass die komplette 
Kette PC->Kabel->MAX232->Prozessorsockel->MAX232->Kabel->PC 
funktioniert.

Autor: Florian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
danke für den Tipp, hätt das viel umständlicher versucht, aber das is ne 
klasse Art und Weise zu messehn :D
Werd die Ergebnisse dann mitteilen :P

Danke noch einmal
Florian

Autor: Florian (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich hatte vergessen, dass ich gestern meinen Schultag hatte, von daher 
konnte ich heute erst prüfen.

Wenn ich die Jumper für RX und TX verbinde, dann kommt das Selbe 
Ergebnis, als wenn ich diese nicht verbinde.

Ich habe den MAX232 auch schon ausgetauscht und schon wieder das 
gleiche.

Aber am USB - Seriell Wandler sollte es auch nicht liegen, da dieser bei 
anderen Geräten funktioniert.

Anbei lege ich, was mir Putty nach betätigen der Return Taste 
zurückliefert.

Florian

Autor: Florian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
könnte es an der Beschaltung vom Seriellen Ports liegen?

Hier ist die Beschreibung
http://www.pollin.de/shop/downloads/D810038B.

Danke,
Florian

Autor: Florian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
sry, habe das pdf vergessen.
Hier der richtige Link:
http://www.pollin.de/shop/downloads/D810038B.PDF

Autor: Daemonicus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich hatte schonmal ein ähnliches Problem...

Lösung:

--> Schreibe byteweise die Register nicht bitweise <--
_________________________________________________________
Bsp.:

// USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: On
// USART ReceiveCompleteISR: On
// USART Transmitter: On
// USART Mode: Asynchronous
// USART Baud rate: 9600
UCSRA=0x80;
UCSRB=0x98;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x67;
_________________________________________________________


Es kommt natürlich auch auf Deinen compiler+entw.-umgebung an. Ich habe 
die erfahrung mit einigen entwicklungsumgebungen gemacht, dass einzelne 
registerbits ums verrecken nicht einzeln gesetzt werden (warum auch 
immer). Schreibe ich allerdings ein ganzes byte ins Register, klappt es 
tadellos!

Kannst du vielleicht mal nen Ausschnitt Deines Schaltplans online 
stellen, vielleicht sieht man darauf ja etwas, was evtl. das Problem 
sein könnte...?! Die Beschaltung eines MAX232 ist zwar kein Geheimnis 
aber immer wieder kann man was vergessen!

Gruß

Autor: Florian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
danke für die Antwort werd es gleich ausprobieren.
Der Schaltplan ist in der PDF datei mit drinne, zu der ich vorhin den 
Link geschickt hatte.
Ich benutze das myAVR Workpad, falls du das auch noch wissen willst.

Ich melde mich dann, wenn ichs nochmal ausprobiert habe.

Florian

Autor: Florian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
habe jetzt folgenden Code benutzt, und es  funktioniert immernoch nicht.
int main(void)
{
  UCSRB |= 0x08;                // UART TX einschalten
  UCSRC |= 0x86;    // Asynchron 8N1 

  UBRRH = 0x00;
  UBRRL = 0x13;

  

  while(1)  
  {
    while (!(UCSRA & 0x20))  /* warten bis Senden moeglich */
    {
    }
  
    UDR = 'x'; 
  }     
}

für UBRRH habe ich, falls ich mich nicht verrechnet habe bei 1MHz und 
bei 2400Baud den Wert 25 errechnet.

Florian

Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
0x13 ist 19dez
25dez ist 0x19

Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
mach mal
UBRRL = 0x19;
oder
UBRRL = 25;
dann sollte es auch funktionieren
Gruß Daniel

Autor: Florian (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hier sind übrigens noch die Fuses.

Florian

Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und ändere noch
UCSRC = 0x06;
ab.
Gruß

Autor: Blackbird (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mit dem internen RC-Oszillator hast Du nie die Sicherheit, dass es trotz 
funktionierenden Programm zu vernüftigen Ergebnissen kommt. Kann gehen 
oder auch nicht. Wenn Du aber noch andere Fehler vermutest, z.B. 
Hardware, dann ist es ganz schlecht, gleich mit zwei Unsicherheiten den 
ersten Test zu fahren.
Also: Quarz rein, Baudratenquarz wenn möglich, Fuses passend setzen und 
die Beschaltung so machen wie im vorgegebenen Beispiel.

Dann sollte es gehen (oder die Fehlersuche ist einfacher).


Blackbird

Autor: Florian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stimmt, verrechnet :)

Aber es funktioniert leider trotzdem nicht.

Florian

Autor: Florian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe ein Quarz drinne, nur traue ich mich nicht, es bei den Fuses 
einzustellen, da ich es schon beim letzten Mega8 falsch eingestellt 
hatte und den dadurch nicht mehr nutzen kann :)

Kannst du mir sagen, welches ich setzen muss, mit nem 8MHz Quarz?

Danke,
Florian

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Florian schrieb:

> Wenn ich die Jumper für RX und TX verbinde, dann kommt das Selbe
> Ergebnis, als wenn ich diese nicht verbinde.

Was jetzt?
Kommt was, oder kommt nix? Mach bitte eindeutige Aussagen. Denk immer 
daran: Wir sehen nicht auf deinen Bildschirm!

Solange dieser einfache Test nicht 100% funktioniert, hat es keinen Sinn 
in der Software nach Fehlern zu suchen. Dieser Test gibt dir eine 
Aussage darüber, ob die Hardware komplett stimmt. Über die Rx-Tx Brücke 
sendet sich der PC selbst Zeichen, wobei die Zeichen die komplette 
Hardwarekette entlang laufen müssen:
PC -> Kabel -> MAX232 -> Brücke im µC-Sockel -> MAX232 -> Kabel -> PC

Da wir davon ausgehen können, dass die serielle Schnittstelle im PC in 
Ordnung ist, MUSS das funktionieren. Wenn es nicht funktioniert, ist der 
häufigste Grund darin zu suchen, dass das Kabel falsch rum ist. Also 
Kabel einfach mal probehalber auskreuzen, bzw die Auskreuzung entfernen 
(an einem Ende Pin 2 mit Pin 3 vertauschen).

Auch wichtig: Im PC-Terminalprogramm muss die Flusskontrolle 
abgeschaltet sein.

Nochmal: Dieser Test, muss 100% klappen! Solange das nicht funktioniert, 
hat es keinen Sinn weiter zu machen.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und auch den Gegentest machen.
Wenn du die Brücke im µC-Sockel entfernst und auf dem PC tippst, darf 
keine Antwort mehr kommen. Siehst du das Getippte auf deinem Terminal, 
dann ist 'lokales Echo' eingeschaltet -> ausschalten und nochmal testen

Autor: Florian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich hab die Schaltung jetzt mal an einen anderen PC angeschlossen und 
dort ausprobiert.
Dort funktioniert sie, jedoch erscheint in der Konsole statt einem 'x' 
imer ein 'á'.
Hängt das mit der Baudrate oder mit dem Takt zusammen?

Danke
Florian

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Florian schrieb:
> Ich hab die Schaltung jetzt mal an einen anderen PC angeschlossen und
> dort ausprobiert.

Dann dürfte dein USB/RS232 Wandler der Übeltäter sein.

> Dort funktioniert sie, jedoch erscheint in der Konsole statt einem 'x'
> imer ein 'á'.
> Hängt das mit der Baudrate oder mit dem Takt zusammen?

Beides. Die Baudrate ist mit dem Takt gekoppelt. Stimmt der Takt nicht, 
stimmt auch die Baudrate nicht.
Sagten wir schon einmal, dass der interne RC-Oszillator nicht besonders 
gut geeignet ist um eine serielle Schnittstelle zu betreiben?

Autor: Florian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Okay, danke :)

Worauf muss ich denn jetzt die Fuses setzen, ich hatte ja erwähnt, dass 
ich ein 8MHz Quarz angeschlossen hab, jedoch hab ich gemerkt, dass das 
ein Irrtum war und ich ein 16MHz Quarz angeschlossen habe.

Es gibt aber ja so viele möglichkeiten, für einen externen Quarz, und da 
weiß ich nicht genau, was ich jetzt  einstellen soll.

Florian

Autor: neuling (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
fuses? nimm mal D9 FF

dann hast nur SPIEN an das ist SPI enable

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Florian schrieb:

> Es gibt aber ja so viele möglichkeiten, für einen externen Quarz, und da
> weiß ich nicht genau, was ich jetzt  einstellen soll.

http://www.mikrocontroller.net/articles/AVR_Fuses

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.