Forum: Mikrocontroller und Digitale Elektronik UART-Ausgabe auf Platine fehlerhaft


von Floyd (Gast)


Lesenswert?

Hallo zusammen!
Habe einen Mikrocontroller auf dem STK500 programmiert und auch 
getestet. Jetzt wollte ich eine Platine basteln, doch ich komm nicht 
ganz weiter.
Im ersten Schritt wollte ich eine einfache Stringausgabe realisieren. 
Ist der Controller auf dem STK500, erfolgt die Übertragung fehlerfrei. 
Setze ich den Mikrocontroller auf meine Platine kommt der String 3mal 
halb und dann beim 4.mal ganz an.

Hat einer von Euch schon mal so ein Problem gehabt? Und wie kann ich es 
lösen?

Gruß
  Floyd

von Michael U. (Gast)


Lesenswert?

Hallo,

laß mich raten: Baudrate etwas daneben, weil auf dem STK mit Quarz und 
auf der Platine mit internem Oszi oder so?
Pegelwandler mit MAX232? Spannungen stimmen?

Ansonsten Schaltplan und Programm posten, dieses Forum zerstört offenbar 
Glaskugeln... ;))

Gruß aus Berlin
Michael

von Floyd (Gast)


Lesenswert?

Als Taktgeber habe ich schon beides ausprobiert: Einen externen 8Mhz 
Quarz sowie den internen RC. Die Quelle war auf der Platine die gleiche, 
wie auf dem STK.
Als Spannungswandler habe ich einen HIN202 - den Max gab es zu diesem 
Zeitpunkt nicht mehr... Hab die Spannungen auch mit einem Multimeter 
durchgemessen; die sind ok.

Hab mir die Übertragung noch mal genauer angesehen und festgestellt, 
dass der String nicht immer nach dem gleichen Muster im Terminal 
erscheint. Es soll aus Testzwecken nur "Hallo" ausgegeben werden. Das 
Resultat hat folgendes Aussehen "Ha Ha Ha Ha Hallo Hallo Ha Ha Ha Hallo 
Hallo...". Ich lass die Ausgabe in einer Endlosschleife laufen. Demnach 
kommt der String in unregelmäßigen Abständen sogar vollständig an.

Der Schaltplan liegt leider auf einem anderen Rechner. Werde ihn morgen 
mal posten. Freue mich aber selbstverständlich über weitere Anregungen.

Wünsche Euch einen schönen Abend
  Floyd

von Thomas (Gast)


Lesenswert?

Poste mal Deine Sende-Routine. Vielleicht sendest Du zu schnell ohne zu 
warten (  while ( ! ( UCSR0A & (1<<UDRE0)) ); ). Dann wird der letzte 
Sendevorgang nicht ordentlich beendet, sondern vom nächsten ersetzt. Das 
bedeutet, dass der nächste Vorgang den vorigen überhohlt.

Gruß,
Thomas

http://www.naventics.net

von Floyd (Gast)


Lesenswert?

Guten Morgen
Nachdem ich das Posting gelesen habe, dachte ich schon "Ja, dass wird es 
sein", doch ein Blick in meinen Quellcode hat ergeben, dass ich diese 
while-Schleife schon eingebunden hatte.
Habe den Fehler nach einer nahezu unendlichen Anzahl von Versuchen 
ermitteln können. Es lag am Sockel! Da ich keinen 40poligen zur 
Verfügung hatte, habe mir einen aus zwei niederpoligen 
zusammengebastelt. Leider sind durch den Verlust der Stege keine 
optimalen Pinausrichtungen möglich gewesen, so dass es zu internen 
Spannungen gekommen ist -> nicht alle Pins waren permanent verbunden. 
Das Resultat habt Ihr ja oben gesehen.

Danke den fleißigen Lesern und Helfern.

Habt einen schönen Donnerstag.
  Floyd

von Rahul, der Trollige (Gast)


Lesenswert?

>Habt einen schönen Donnerstag
Heute ist Mittwoch...

Schönes Wochenende!

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.