Moin Leute! Ich hab da ein kleines Problem beim Senden von Daten mit Hilfe der UART bei einem ATmega8 - Controller. In diesem ganz einfachen BSP soll in Anlehnung an das Tutorial einfach die BIN-Zahl 0b00000000 an den PC gesendet werden. Im Anhang befindet sich das C-Program, indem auf Tastendruck das Zeichen übersendet werden soll. Die Gesendeten Daten werden mit HTerm empfangen. Leider erhalte ich immer wieder falsche Zeichen (statt der binären 0b00000000 immer wieder 0b11111011 bzw. 0b11111010). Trotz langen durchsuchen der Foren und lesen des Tutorials konnte ich nichts hilfreiches finden. Über eine schnelle Hilfe würde ich mich freuen! Was ich schon getan habe: * int./ext. Clock mit FuseBit setzen/ansteuern * Baudraten variiren
Das sieht fast invertiert aus. Wie kommst Du vom Controller zum seriellen Port des PC?
Mit Hilfe eines MAX232 und eines Modem-Kabels, wie es ja auch im Tutorial beschreiben wird. Tja.... invertiert ist es ja leider nicht, daran hab ich auch schon gedacht. Wenn noch jemand ne Idee hat immer her damit.... sitze hier schon fast den ganzen Tag und zerbreche mir den Kopf. Bin für jede Hilfe und Anregung dankbar!!!
winavr-c kennt kein biteingabe sondern nur hex. wenn du dieses eingeben tust "0x00000000" also ein "x" statt ein "b", meckert der compiler auch nicht und er setzt eine hexzahl. dieses "b" wertet er auch als hexeingabe. mfg pebisoft
Meines Wissens nach ist das vom Comiler bzw. im zweifelsfall von der Version des verwendeten WinAVRs abhängig. Hab aber auch schon verschiedene Eingabemöglichkeiten ausprobier (binär, dezimal, hex, ASCII) aber nix führte zum Erfolg. Mir würde es auch helfen, wenn jemand bestätigen könnte, dass der Quellcode funktioniert. Somit wüsste ich, dass ich hier nicht mehr auf Fehlersuche gehen muss.
Probiers mal mit: UCSRC = (1<<URSEL)|(1<<UCSZ0)|(1<<UCSZ1); URSEL muss immer gesetzt sein wenn du in UCSRC schreiben willst. Sonst schreibst du in UBRRH.
SUPER SACHE!!!!! Das war es! Vielen Dank! Ich hatte das zwar im Datenblatt gelesen, ging aber immer davon aus, dass wenn ich URSEL einmal setze es auch gesetzt bleibt. Und wenn ich ehrlich bin, so sehe ich den Unterschied der beiden Codefragmente auch nicht wirklich. Ich dachte immer, die von Andreas benutze schreibweise wäre nur eine Kurzform von der meinigen. Könnte mich in dieser hinsicht jemand vielleicht noch etwas mehr beleuchten????
> URSEL muss immer gesetzt sein wenn du in UCSRC schreiben willst. Sonst > schreibst du in UBRRH. Für die Standardversion "8n1" kann man sich es auch komplett sparen, UCSRC anzufassen, die Voreinstellung ist just diese.
Bei deiner Variante schreibst du ja nacheinander. Du musst aber bei jedem schreiben in UCSRC auch URSEL setzen. Gehen würde auch: UCSRC |= (1 << UCSZ1) | (1<<URSEL); UCSRC |= (1 << UCSZ0) | (1<<URSEL);
Aha! Das muss ich mir dann jetzt mal merken. Danke! Ihr habt mir sehr gut weitergeholfen.
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.