Hallo,
bin noch bei meinen Anfängen mit uC Programmierung und habe mich unter
anderem auch mit UART beschäftigt. Habe dazu einen C Code, mit dem ich
versuchen möchte auf dem PC ein Zeichen zu empfangen. Dazu habe ich PD0
an RX und PD1 an TX vom STK500 angeschlossen.
Da ich leider keinen externen Quarz habe, benutze ich den internen
Oscillator mit 8Mhz 64ms.
Benutze einen Atmega8.
Ich habe gelesen, das ein externer Quarz besser ist, aber auch, das es
mit dem internen funktionieren müsste. Ich habe noch einen 4MHZ externen
Quarz hier liegen.
Frage dazu: Wieso funktioniert die Übertragung nicht? Habe das Kabel
natürlich auch auf Spare gewechselt und im Hyperterminal 9600 Baud
eingestellt, keine parität und mit sowohl 1 als auch 2 Stopbits
ausprobiert. Empfange keine Zeichen.
Müssen noch andere Fuses gesetzt werden ?
Christian S. schrieb:> Ich habe gelesen, das ein externer Quarz besser ist,
Besser ist er auf jeden Fall.
Allerdings ist das nicht dein Problem.
Du empfängst gar nichts. Wenn die Taktfrequenz etwas zuviel daneben
liegt (wie es beim internen Oszillator schon sein kann), dann empfängst
du was. Nur sind die Zeichen falsch. Aber kommen wird was.
> Frage dazu: Wieso funktioniert die Übertragung nicht? Habe das Kabel> natürlich auch auf Spare gewechselt und im Hyperterminal 9600 Baud> eingestellt, keine parität und mit sowohl 1 als auch 2 Stopbits> ausprobiert. Empfange keine Zeichen.http://www.mikrocontroller.net/articles/AVR_Checkliste#UART.2FUSART
Hallo,
Schleife ist eingebaut,.
Betätige ich nun die Reset Taste, erscheint im Terminal bei jedem Druck
eins dieser Zeichen:
~~~~~~~~~~~~~~~~~~~~~
Viele Grüße
Christian S. schrieb:> Frage dazu: Wieso funktioniert die Übertragung nicht?
Gegenfrage: was meinst du, was an deinem Problem so viel anders ist als
an den anderen 10 RS232-Problemen, die allwöchentlich hier auftauchen?
Kurzum: hast du mal die Suche im Forum bemüht und die Beträge und die
Antworten darauf duchgelesen und verstanden?
> Bin die Checkliste durchgegangen und es war alles so, wie in der> Checkliste gefordert.
Du hast die gesamte Checkliste, insbesondere den Abschnitt
Spannungsversorgung, Reset, Fusebits und Takterzeugung durch?
Was kommt bei dem Test mit der Taktfrequenz raus?
1
Wird das Programm laufen gelassen, muss die LED 1 Sekunde ein/1 Sekunde aus sein.
Es ist einfach so: wenn der uC nicht kaputt ist, dann funktioniert auch
die serielle Schnittstelle.
> Der C-Code ist okay?
Welcher C-Code?
Hallo,
ersteinmal danke für die Antwort.
Ich schaue hier nochmal im Forum weiter nach Problemen, die mit UART
aufgetreten sind.
Den Taktfrequenztest habe ich nicht gemacht, da ich ersteinmal mit dem
internen Oszilator Zeichen empfangen möchte, auch wenn es ungenau ist.
Mit C-Code meinte ich den von mir geposteten C-Code.
Zwei Fragen haben sich noch aufgetan:
Die beiden TX und RX Pins PD0 und PD1 muss ich jeweils als Aus bzw. als
Eingang definieren, richtig?
Und: Das RS232 Programmierkabel vom STK500, ist das das richtige Kabel
für die Verwendung am SPARE?
Viele Grüße
Christian
@ Christian S. (kruemel)
>Den Taktfrequenztest habe ich nicht gemacht, da ich ersteinmal mit dem>internen Oszilator Zeichen empfangen möchte, auch wenn es ungenau ist.
MÖÖÖÖÖP! Falsch!!!
Christian S. schrieb:> Den Taktfrequenztest habe ich nicht gemacht, da ich ersteinmal mit dem> internen Oszilator Zeichen empfangen möchte, auch wenn es ungenau ist.
Dann sei versichert, dass >95% aller UART Probleme darauf beruhen, dass
der µC nicht mit der Taktfrequenz arbeitet, die der Programmierer zum
Berechnen der Registerwerte herangezogen hat.
Ein paar Prozent entfallen noch auf nicht richtig ausgekreuzte Kabel und
ein klitzekleiner Prozentsatz entfällt auf sonstiges.
Aber Hauptursache #1 ist die falsch angegebene Taktfrequenz
Christian S. schrieb:> Und: Das RS232 Programmierkabel vom STK500, ist das das richtige Kabel> für die Verwendung am SPARE?
Ich denke du bist die Checkliste durchgegangen?
Dann hast du sicherlich auch den µC-raus-Brücke-rein Test gemacht und so
die komplette Hardware der Übertragungsstrecke getestet.
Nochmal zurück auf Anfang:
Und wenn in der Checkliste ein Test vorgeschlagen wird, dann den auch
machen und nicht einfach nur durchlesen.
(das du den internen Oszi benutzt anstelle eines QUarzes ist natürlich
fatal. Dadurch kann es sein, dass dein PC ganz was anderes empfängt als
du wegsendest. Aber grundsätzlich müsste der Empfang damit erst einmal
klappen. Hie rist zu unterscheiden zwischen: funktioniert erst mal
überhaupt nicht und funktioniert im Prinzip liefert aber falsche
Ergebnisse)
> Den Taktfrequenztest habe ich nicht gemacht, da ich ersteinmal mit dem> internen Oszilator Zeichen empfangen möchte
Auch das ist Quatsch.
Zuerst möchtest du den µC in einer Schleife senden lassen und du siehst
dir am PC in einem Terminalprogramm an, was der empfängt. Geht es in
diese Richtung, dann funktioniert auch die andere Richtung prinzipiell.
Der einzige Unterschied: Mit dem PC hast du ein Anzeigeinstrument an dem
du sehen kannst, ob die Übertragung klappt, während du in der anderen
Richtung im Nebel stocherst.
Hallo,
Ich habe nun das Led Testprogramm laufen lassen.
Ich habe die Taktfrequenz mit
#define F_CPU 8000000
auf 8Mhz eingestellt. Bei diesem Takt leuchtet die LED eine Sekunde und
ist auch 1 Sekunde aus. Je kleiner die Frequenz desto schneller das
Blinken.
Dann habe ich auf meinem STK500 einen Jumper bei RX und TX bei RS232
Spare gesetzt. Bei meinem Terminalprogramm passiert aber nichts, ich
tippe was, aber die Zeichen kommen nicht zurück.
Einstellungen Terminalprogramm (Hyperterminal):
9600 Bit pro Sekunde
8 Datenbits
Parität keine
Stoppbits 1
Flusssteuerung kein
Christian S. schrieb:> Bei meinem Terminalprogramm passiert aber nichts, ich> tippe was, aber die Zeichen kommen nicht zurück.
Also: Verdrahtung untersuchen.
Brücke doch mal direkt am PC (zur Not mit einer Büroklammer) die Pins 2
und 3 der D-SUB Buchse. Dann muss was zurückkommen, sonst passt deine
Terminaleinstellung noch nicht.
Und dann machst du das selbe mit angeschlossenem Kabel (wieder Pin 2 und
Pin 3 brücken)...
Christian S. schrieb:> Habs hinbekommen, Fehler lag in der While-SchleifeLothar Miller schrieb:>> Der C-Code ist okay?> Welcher C-Code?
Und ich sach noch...
Mannomannomannomann... :-/