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
Zieh mal die Ausgabe in die Schleife hinein, damit der AVR ein bischen mehr sendet als nur 1-mal 'x'
1 | ....
|
2 | |
3 | while( 1 ) { |
4 | while (!(UCSRA & (1<<UDRE))) /* warten bis Senden moeglich */ |
5 | {
|
6 | }
|
7 | |
8 | UDR = 'x'; |
9 | }
|
10 | }
|
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, könnte es an der Beschaltung vom Seriellen Ports liegen? Hier ist die Beschreibung http://www.pollin.de/shop/downloads/D810038B. Danke, Florian
sry, habe das pdf vergessen. Hier der richtige Link: http://www.pollin.de/shop/downloads/D810038B.PDF
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
Hallo, habe jetzt folgenden Code benutzt, und es funktioniert immernoch nicht.
1 | int main(void) |
2 | {
|
3 | UCSRB |= 0x08; // UART TX einschalten |
4 | UCSRC |= 0x86; // Asynchron 8N1 |
5 | |
6 | UBRRH = 0x00; |
7 | UBRRL = 0x13; |
8 | |
9 | |
10 | |
11 | while(1) |
12 | {
|
13 | while (!(UCSRA & 0x20)) /* warten bis Senden moeglich */ |
14 | {
|
15 | }
|
16 | |
17 | UDR = 'x'; |
18 | }
|
19 | }
|
für UBRRH habe ich, falls ich mich nicht verrechnet habe bei 1MHz und bei 2400Baud den Wert 25 errechnet. Florian
mach mal
1 | UBRRL = 0x19; |
oder
1 | UBRRL = 25; |
dann sollte es auch funktionieren Gruß Daniel
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
Stimmt, verrechnet :) Aber es funktioniert leider trotzdem nicht. Florian
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.