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