Servus, ich hab einen ATMEGA32 und ein AVR-Entwicklungsboard mit ISP-Schnittstelle und einer RS232 Schnittstelle!! Wollte jetzt mal versuchen ein Zeichen vom Microcontroller zum Computer zu senden!! Zum Testen hab ich als erstes eine Brücke zwischen RX und TX gesetzt und mit dem Terminal einen Text gesendet und es ist auch zurückgekommen, aber wenn ich jetzt meinen Microcontroller einbaue und mein Programm rüberlade kommen keine Zeichen an!! Das Programm sieht folgender maßen aus: Habe die Schnittstelle folgender maßen eingestellt: UBRRH = 0x00; UBRRL = 0x51; Da ich mit einer Baudrate von 9600 und einem externen Quarz von 8MHz arbeite!! UCSRC = 0x86; für 8 Datenbits!! UCSRB = 0x18; für senden und empfangen!! Dann hab ich zum senden eines Zeichen: UDR = 'Z' geschrieben!! Kann mir einer vielleicht sagen was ich falsch gemacht habe oder was ich vergessen habe!! MFG Thomas
Hi
>UBRRL = 0x51;
Das ist 81D, du brauchst aber für 9600Bd 51D (0x33).
MfG Spess
statt die register mit irgendwelchen nicht nachvollziehbaren zahlen zu laden solltest besster die bitseinzeln setzt. REGISTER = 1 << BIT1 | 1 << BIT2 ... hast du auch einen pegelwandler dran?
spess53 wrote: > Hi > >>UBRRL = 0x51; > > Das ist 81D, du brauchst aber für 9600Bd 51D (0x33). > > MfG Spess Tut mir leid hab mich verschrieben meinte UBRRL = 51!! Also ohne 0x!! MFG Thomas
Jupp wrote: > statt die register mit irgendwelchen nicht nachvollziehbaren zahlen zu > laden solltest besster die bitseinzeln setzt. > > REGISTER = 1 << BIT1 | 1 << BIT2 ... > > hast du auch einen pegelwandler dran? Das mit dem Zuordnen über die Bitmanipulation das weiß ich schon aber ich mach das lieber mit Zahlen!! Einen Pegelwandler hab ich nicht dran geht direkt vom Computer zur eintwicklungsplatine und von dort auf einen Chip der es dan in TX und RX umwandelt!! MFG Thomas
> Da ich mit einer Baudrate von 9600 und einem externen > Quarz von 8MHz arbeite!! Stellt sich die Frage nach den Fuses.... Otto
tja, dann geht es jetzt in Rätselraten über. Vielleicht mal das komplette Programm? Evtl. ser. Interrupts aktiviert, aber keinen handler dafür? Ich tippe aber eher auf nichtgesetzte fuse-Bits, d.h. das Teil läuft trotz angeschlossenem Quarz noch mit dem internen Oszillator, merkt der nämlich nicht selbst.
Thomas Tz wrote: > Das mit dem Zuordnen über die Bitmanipulation das weiß ich schon aber > ich mach das lieber mit Zahlen!! und erwartest, dass die Leute hier gefälligst das Datenblatt runterladen, damit sie sehen können, was du setzt... > Einen Pegelwandler hab ich nicht dran geht direkt vom Computer zur > eintwicklungsplatine und von dort auf einen Chip der es dan in TX und RX > umwandelt kann es sein, dass du keine Ahnung hast, was ein Pegelwandler ist? > !! einmal reicht völlig, und es gibt auch noch andere Satzzeichen in der deutschen Sprache
H.joachim Seifert wrote: > tja, dann geht es jetzt in Rätselraten über. > Vielleicht mal das komplette Programm? Evtl. ser. Interrupts aktiviert, > aber keinen handler dafür? > Ich tippe aber eher auf nichtgesetzte fuse-Bits, d.h. das Teil läuft > trotz angeschlossenem Quarz noch mit dem internen Oszillator, merkt der > nämlich nicht selbst. Kann schon sein hab die Fuses-Bits auf Ext. Crystal/Resonator High Freq.: Startup Time 258CK+64 gestellt und die ISP-Frequenz auf 2MHz gestellt!! Kann man das nicht irgendwie feststellen ob er mit dem 8MHz Quarz läuft oder nicht? MFG Thomas
Hier mal das ganze Programm: #include <avr/io.h> #include <stdio.h> #include <avr/delay.h> int main (void) { UBRRH = 0; UBRRL = 51; UCSRC = 0x86; UCSRB = 0x18; while(1) UDR = 's'; return 0; } Ich stell es noch um und bau noch die Bitmanipulation ein das es besser zu lesen ist! MFG Thomas
Otto wrote: > Lass eine LED blinken und rechne aus, wie schnell sie blinken müsste. Aber blinkt die LED dan nicht so schnell das sie dan dauernd an ist weil man das nicht mehr sieht das blinken? MFG Thomas
1. Nein - berechne das Blinken auf 1Hz bei 1MHz Takt blinkt sie mit 8 Hz bei 8MHz Takt 2. Warte doch besser, bis das Zeichen auch gesendet wurde.
ok, wenn ISP mit 2 MHz funktioniert, läuft der Chip auch mit ext. Quarz. Und, wie schon gesagt, frage vor dem Schreiben ins UDR ab, ob die UART überhaupt ein neues Zeichen aufnehmen kann. Kannst aber erstmal auch mit delay arbeiten, bei 9600Baud braucht ein Zeichen etwas mehr als 1ms. Ausserdem fehlt bei dir noch eine Klammerung: int main (void) { UBRRH = 0; UBRRL = 51; UCSRC = 0x86; UCSRB = 0x18; while(1) {UDR = 's'; delay_ms (2); } return 0; }
Passiert immmer noch nichts!! Nur wenn ich RX und TX unterm Betrieb verbinde kommen lauter komische Zeichen an!! Die sich aber auch ändern wenn ich ein anderes Zeichen sende!! MFG Thomas
> Nur wenn ich RX und TX unterm Betrieb verbinde RX und TX vertauscht? > kommen lauter komische Zeichen an!! Einstellung Terminalprogramm: Startbit, Stopbit, Parität?
Otto wrote: >> Nur wenn ich RX und TX unterm Betrieb verbinde > > RX und TX vertauscht? > >> kommen lauter komische Zeichen an!! > > Einstellung Terminalprogramm: Startbit, Stopbit, Parität? Habs gefunden hab doch tazächlich TX und RX vertauscht!! Trotz das ich nach Plan angeschlossen habe!! Hab aber festgestellt das der Plan zum Entwicklungsboard nicht stimmt den da ist es anders herum eigezeichnet!! MFG Thomas
Tja, das ist ein altes Problem :-) Entweder man bezeichnet Rx und Tx mit dem eigenen Signal oder mit dem, was daran angeschlossen werden soll..., das wird dir immer wieder begegnen. Beide Ansätze sich richtig und logisch :-)
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.