Hallo zusammen,
vielleicht kann mir jemand helfen. Ich habe ein STK500 und ein Atmega8
da drauf. Eine UART Kommunikation habe ich zum PC hergestellt bzw.
schicke ein Zeichen von dem Controller an den PC. Dazu verwende ich bei
dem Atmega 1MHz und Baudrate von 4800. Allerdings wenn ich das am
Computer lesen möchte, zeigt er mir nur Nullen an bzw. dass er nur
Nullen bekommt,egal welches Zeichen ich sende. Am Oszilloskop sehe ich
dagegen die unterschiedlichen Signale. Zum Empfangen bzw. Anzeigen der
Daten verwende ich das Programm HTerm. Woran könnte das liegen? Hat da
jemand eine Idee?
Vielen Dank im voraus!
Andrey,
hast Du auf dem STK500 die Verbindung vom PortD (Pins PD0 und PD1) zum
Anschluss "RS232 SPARE" (STK500-User Guide, Seite 3-5) hergestellt?
Steckt Dein RS232-Kabel im Anschluss "RS232 Port for Communication"
(STK500-User Guide, Seite 3-1)?
Ciao,
mare_crisium
Ich muss nachhaken
> zeigt er mir nur Nullen an bzw. dass er nur Nullen bekommt
heißt das, das du in hTerm siehst, das etwas ankommt und dieses etwas
sind lauter binäre 0-en (oder immer der Code für das ASCII Zeichen '0',
was auch ungewöhnlich wäre)
Oder steht im hTerm der Cursor still und nichts rührt sich?
Das ist nicht dasselbe. Im einen Fall kommt tatsächlich ein Empfang zu
Stande, im anderen Fall aber nicht. Letzterer Fall könnte zb dadurch
verursacht werden, dass das verwendete Kabel falsch rum gekreuzt ist.
Ich würde als erstes mal die grundsätzliche physikalische Verbindung
testen.
Dazu nimmst du den µC aus seinem Sockel und brückst mit einem Stück
Draht den Tx-Pin mit dem Rx-Pin direkt im µC-Sockel. Wenn du dann am PC
auf der Tastatur klimperst, muss alles was du tippst auch am Monitor
erscheinen. Gegentest: die Brücke rausnehmen und das Echo muss aufhören.
Wenn du diesen Zustand hast, dann ist damit abgeklärt, dass die
physikalische Verbindung, inklusive Kabel, inklusive aller Jumper auf
dem STK grundsätzlich funktionsfähig ist.
Vielen Dank erstmal für die Antworten!
Harald M., ja die Anschlüsse sind richtig verbunden.
Karl Heinz Buchegger,in HTerm sehe ich das ein Signal ankommt und diesel
Signal wird anscheinend als Null interpretiert, d.h. es kommen laute
binäre Nullen.
Die physikalische Verbindung werde ich dann wohl wieder nachprüfen und
sobald ich es getan habe,hier bescheid geben.
Quelltext als PNG?
(Das ist das dümmste was du tun kannst. Wie soll ich mich denn jetzt mit
Cut&Paste auf deinen Quelltext beziehen und daraus Passagen zitieren.
Abgesehen davon hast du eine Menge Arbeit damit, das PNG herzustellen.
Quelltext postest du ganz einfach als .... tata .... Quelltext. Was für
eine Überraschung! Das ist für dich am wenigsten Arbeit und wir können
uns problemlos auf Passagen beziehen)
USART_transmit( 0x01 );
lass dir zuerst mal etwas senden, was ein sichtbares Zeichen ergibt. Das
Bitmuster für 0x01 zu senden und dann mit der Ausgabe kombinieren, dass
beim Empfänger IMMER nur ein 0-Byte ankommt, das war nicht sehr
hilfreich. Denn die USART braucht nur in der Takfrequenz ein klein wenig
daneben sein und schon kommt das einzige 1 Bit im Gesendeten nicht zur
richtigen Zeit beim Empfänger an. Und von 'IMMER' kann auch keine Rede
sein.
USART_transmit( 'A' );
und dann schaun wir mal, was da rauskommt.
Wahrscheinlich das übliche. Deine Taktfrequenz ist ein wenig daneben.
Die F_CPU Angabe stinkt nach internem RC-Generator. Die geht so genau
wie die Messung der Seehöhe durch Messung des Wasserstands in der Donau.
Karl Heinz Buchegger schrieb:> Das> Bitmuster für 0x01 zu senden und dann mit der Ausgabe kombinieren, dass> beim Empfänger IMMER nur ein 0-Byte ankommt, das war nicht sehr> hilfreich. Denn die USART braucht nur in der Takfrequenz ein klein wenig> daneben sein und schon kommt das einzige 1 Bit im Gesendeten nicht zur> richtigen Zeit beim Empfänger an.
Damit bei 0x01 am Empfänger eine 0 ankommt, muss der Takt schon gewaltig
daneben liegen. Hinweis: es wird LSB-first gesendet. ;-)
> eine "129"(dezimal) bekomme. Dementsprechend für
1
USART_Transmitt(0x00);
> "128"> Jetzt weiß ich nicht wo mein Fehler liegt.
Das bedeutet, dass das Stopp-Bit zu früh kommt. Das dürfte jetzt das
schon von Karl Heinz angesprochene "interner RC-Oszillator"-Problem
sein.
Andrey B. schrieb:> Was muss ich denn jetzt genau machen,um dieses Problem zu lösen?
Den Mega nicht mit dem internen RC-Oszllator laufen lassen, sondern
einen Quarz oder Quarzoszillator aktivieren.
Andrey B. schrieb:> #if ((BAUD_ERROR<99) || (BAUD_ERROR>101))> #endif
Ist natürlich auch eine Möglichkeit eine Fehlermeldung zu löschen, die
einem gesagt hätte, dass sich das mit den Zahlenwerten nicht vernünftig
ausgeht.