Hallo. Ich sitzte zurzeit an einem projekt bei welchem ich mit Hilfe eines ATmega8, einen Lichtsensor auslesen, einige Berechnungen durchführen und die Ergebnisse schließlich per USB an einen PC übertragen will. Also einfach mal schlau gemacht sich einen UART zu USB Konverter gekauft und das Beispielprogramm aus dem AVRGCC Tutorial, bei welchem ein einzelnes Zeichen gesendet werden soll ausprobiert. Nun zum Problem: Ich habe das Program "hterm" installiert um mir die Zeichen welche ich über die USB-Schnittstelle empfange ansehen zu können. gesendet wird ein "x" in einer Endlosschleife. empfangen wird jedoch "[" (01011011) und in unregelmäsigen Abständen auch immer wieder ein "K" (01001011). Ich bin mir nun einfach nicht sicher ob der µC selbst bereits einen Fehler macht, der Konverter möglicherweise beschädigt ist (ist nämlich sehr anfällig gegenüber elektrostatischer Aufladung) oder ich einfach zu dumm bin und irgendeinen idiotischen Fehler gemacht habe^^. Mein Programmcode (welcher wie gesagt aus dem Tutorial entnommen ist) befindet sich genauso wie meine beschaltung im Anhang. Verwendet wurde dieser Konverter: http://www.conrad.at/ce/de/product/197326/Conrad-Mini-USB-zu-UART-Konverter?queryFromSuggest=true Hoffe ihr könnt mir etwas weiterhelfen mfg Stefan
Stefan. L. schrieb: > in der 2ten Zeile mit dem .. #define BAUD 9600 nein, diese anweisung macht überhaupt nichts. Das ist nur eine Define.
Hmm ich habe jedoch nichts anderes als diesen Code zum "einstellen" einer Baudrate beim UART- AVRGCC Tutorial gefunden. Wärst du wohl so nett und würdest mir die richtige Definition erläutern?
https://www.mikrocontroller.net/articles/AVR-GCC-Tutorial/Der_UART es fehlt soetwas wie: UBRRH = UBRR_VAL >> 8; UBRRL = UBRR_VAL & 0xFF;
Da du ja die setbaud.h benutzt, schau sie dir doch einfach mal genauer an. Da ist am Anfang ein Beispiel wie man die setbaud.h verwenden soll/kann
Hauptsache erstmal per Copy&Paste den Code reinklatschen, nix denken und dann wenns nicht geht umgehend einen Thread eröffnen. Sauber. Wie soll ein #define alleine die Baudrate setzen? In jedem Beispiel zu UART sieht man wie der UBRR Register gesetzt wird. Im Datenblatt hats Beispielcode dazu. Einfach mal das scheiß DB lesen. Das wär mal was oder?
Peter II schrieb: > https://www.mikrocontroller.net/articles/AVR-GCC-T... > > es fehlt soetwas wie: > > UBRRH = UBRR_VAL >> 8; > UBRRL = UBRR_VAL & 0xFF; ok danke schonmal für den Hinweis :) wenn ich das richtig verstehe sind das also 2 8bit Register in welchen die Baudrate gesetzt wird? Oder passiert in den beiden Registern etwas anderes? Im Endeffekt wäre in diesem Beispiel laut meiner Überlegung die Baudrate: (00001000 11111111) sprich 2303 ?? Sollte ich mich wiedermal irren, würde ich mich um eine Erklärung was in dem Beispiel mit den Registern eigentlich passiert freuen.
Stefan. L. schrieb: > atmel.png Meine C-Dateien heißen mit Nachnamen nicht *.png sondern *.c Stefan. L. schrieb: > Hmm ich habe jedoch nichts anderes als diesen Code zum "einstellen" > einer Baudrate beim UART- AVRGCC Tutorial gefunden. Du musst besser suchen... Das erste Codebeispiel lautet "UART initialisieren". Dort wird allerdings keine Baudrate eingestellt. Aber gleich danach kommt das hier:
1 | Nun ist noch das Baudratenregister UBRR der verwendeten UARTs einzustellen, |
2 | bzw. bei neueren AVRs die beiden Register UBRRL und UBRRH. |
> Im Endeffekt wäre in diesem Beispiel laut meiner Überlegung die > Baudrate: (00001000 11111111) sprich 2303 ?? Warum musst du überlegen? Das Ausrechnen macht doch der Compiler für dich:
1 | // Berechnungen
|
2 | #define UBRR_VAL ((F_CPU+BAUD*8)/(BAUD*16)-1) // clever runden
|
3 | |
4 | void uart_init(void) |
5 | {
|
6 | UBRRH = UBRR_VAL >> 8; |
7 | UBRRL = UBRR_VAL & 0xFF; |
Stefan. L. schrieb: > Sollte ich mich wiedermal irren, würde ich mich um eine Erklärung was in > dem Beispiel mit den Registern eigentlich passiert freuen. Soll ich dir den Text im Datenblatt dazu vorlesen? UBRR ist ein 16 Bit Register, aufgeteilt in 2x8 Bit Register in dem die Baudrate eingestellt wird. Den Wert kann man berechnen oder in einer Tabelle im DB nachschlagen. Den schreibt man rein und fertig. So stehts im DB, so stehts im Tutorial, aber natürlich wiederholen wir alles einfach nochmal. Und jetzt Tanzen wirs vor? gruß cyblord
Kann es sein, dass du den Konverter falsch angeschlossen hast? Auf dem Foto sieht es so aus, als wenn er eine Lochreihe zu weit rechts eingesteckt wurde.
Daniel C. schrieb: > Da du ja die setbaud.h benutzt, schau sie dir doch einfach mal > genauer > an. Da ist am Anfang ein Beispiel wie man die setbaud.h verwenden > soll/kann werd ich mir bei Gelegenheit gleichmal ansehen, danke^^. cyblord ---- schrieb: > Hauptsache erstmal per Copy&Paste den Code reinklatschen, nix > denken und > dann wenns nicht geht umgehend einen Thread eröffnen. Sauber. > > Wie soll ein #define alleine die Baudrate setzen? > > In jedem Beispiel zu UART sieht man wie der UBRR Register gesetzt wird. > Im Datenblatt hats Beispielcode dazu. Einfach mal das scheiß DB lesen. > Das wär mal was oder? Sorry aber ich bin eben noch ein Anfänger was Microcontroller angeht. Somit wusste ich nich das dieses define nicht ausreicht^^.. Und wenn dich so ein Thread nervt bzw. anscheinend etwas agressiv macht, dann ignorier ihn doch einfach oder Box in nen Sandsack oder was auch immer. Aber eine solche Formulierung ist einfach unhöflich und unnötig. Hätte ich die genaue Funktion der beiden Register verstanden hätte ich wohl kaum diesen Thread eröffnet ;)
Toff schrieb: > Kann es sein, dass du den Konverter falsch angeschlossen hast? Auf > dem > Foto sieht es so aus, als wenn er eine Lochreihe zu weit rechts > eingesteckt wurde. Jup scheint am photo passiert zu sein .. hatte ihn davor jedoch richtig drinnen.. Hab das ganze nur an einen andren Platz umgesteckt damit die andren aufbauten nicht für Verwirrung auf dem Foto sorgen..
> Warum musst du überlegen? Das Ausrechnen macht doch der Compiler für > dich:// Berechnungen > #define UBRR_VAL ((F_CPU+BAUD*8)/(BAUD*16)-1) // clever runden > > void uart_init(void) > { > UBRRH = UBRR_VAL >> 8; > UBRRL = UBRR_VAL & 0xFF; ohjaa... Sorry hatte da gerade nen dummen Denkfehler :s .... Danke auf jeden Fall für die Hilfe So ein Danke an alle welche produktive Hilfe geleistet haben, Sobald ich wieder die möglichkeit dazu habe werde ich es gleichmal testen :)
Stefan. L. schrieb: > Und wenn dich so ein Thread nervt bzw. anscheinend etwas agressiv macht, > dann ignorier ihn doch einfach oder Box in nen Sandsack oder was auch > immer. Aber eine solche Formulierung ist einfach unhöflich und unnötig. Unnötig auf jeden Fall. Du scheinst massiv resistent gegen Beratung zu sein. Unhöflich ist im übrigen auch das hochladen von Code als Bild. > Hätte ich die genaue Funktion der beiden Register verstanden hätte ich > wohl kaum diesen Thread eröffnet ;) Hättest du ins DB geguckt, hättest du Funktion der Register dort nachlesen können und vielleicht hättest du sie dann verstanden. Wer weiß. Aber Copy&Paste und im Forum fragen ist viel einfacher gell? Wozu soll man sich auch selber die Mühe machen. Versteh ich.
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.