Hallo Leute! Ich hab das Problem, das meine serielle Schnittstelle nicht senden kann. Das Programm sollte "test" auf dem Display ausgeben uwenn UDRE gesetzt ist. Das tut es aber nicht.WARUM? Bitte um Hilfe.(ist dringend) main.c: #include <stdlib.h> #include <avr/io.h> #include <avr/delay.h> #include <avr/pgmspace.h> #include "lcd.h" #include <lcd.c> void sendeneinzeichen(unsigned char daten) { while (!(UCSRA & (1<<UDRE))); //Warten bis UDR leer ist lcd_puts("test"); UDR=daten; } /* ** constant definitions */ int main(void) { char buffer[7]; int num=13564; /* initialize display, cursor off */ lcd_init(LCD_DISP_ON); /* convert interger into string */ itoa( num , buffer, 10); /* put converted string to display */ lcd_puts(buffer); //UART INIT //UBRR = 23 UBRRH=0x00; UBRRL=23; //TXD einschalten UCSRB|=(1<<TXEN); //Frame Format 1SB 8DB 1STP 0PB UCSRC=(1<<UMSEL)|(1<<UCSZ1)|(1<<UCSZ0); itoa( num , buffer, 10); for(;;) { sendeneinzeichen('x'); lcd_clrscr(); } }
Das lcd_clrscr(); in der for-Schleife löscht dir das Disp schneller als es anzeigen kann. Es können aber noch andere Fehler drinnen sein.
Hallo! Vielleicht haben wir einfach nur Glück, denn auf unserem Display steht, was wir sehen wollen. Das eigentliche Problem besteht einfach darin, dass auf der anderen Seite der seriellen SChnittstelle einfach kein Signal ankommt. Kannst du dir das vielleicht auch erklären? MfG saschisch
Ich verwende ein fertige UART-Routine und hatte das Glück das sie immer so funktioniert hat wie ich es wollte und habe mir so eine Menge leere Kilometer erspart. Vom PC her einfach mal RxD und TxD verbinden und schauen ob das Terminal das Echo anzeigt, im Terminal natürlich Echo ausschalten.
Bist du sicher, dass deine Baudrate richtig eingestellt ist? Die 23 kommen mir etwas komisch vor (ausser du hast nen Quarz mit so ner krummen Frequenz). Hat denn die serielle schon mal funktioniert? Ansonsten: verdrahtung checken... Gruss
Hallo! Die 23 kommen bei einer Frequenz von 3,6864 Mhz exakt heraus ;) Wir haben uns heute die komplette Verdrahtung angeschaut und wir sind zu dem Entschluss gekommen, dass wir fehlerfrei gearbeitet haben :) Wir haben bis heute außerdem mit einem USB - Serial Adapter gearbeitet und vertrauen dem aber nicht. Also haben wir heute das ganze direkt zu einer seriellen Schnittstelle geführt und schätzt mal..... es funktioniert trotzdem nicht!! Binamverzweifeln MfG Saschisch
Was tut es denn eigentlich? Bist du dir auch sicher, dass du wirklich mit den 3,6864 Mhz arbeitest (und nicht etwa mit den internen 1 MHz)?
Das ist ein guter Hinweis! Aber ich weiß ehrlich gesagt nicht wie ich das nachprüfen kann. Bitte erklär es mir und sobald ich wieder zu meinem µC komme mache ich das ! MfG Saschisch
Fusebits angucken. Ich nehme dafür immer den Terminalmodus von avrdude. Meine Kollegen nehmen zuweilen dafür auch AVR Studio, aber die suchen da doch meist länger 'rum als ich. Anyway, falls du die Fuses noch nicht geändert hast, kannst du erstmal davon ausgehen, dass du mit 1 MHz fährst. Das geht mit der UART sogar ganz brauchbar (zumindest bei Vcc = 5 V, für das der RC-Oszillator bei den meisten AVRs kalibriert ist), sofern man das U2X-Bit einschaltet (Oversampling von 16fach auf 8fach reduziert). Da ist der nominelle Baudratenfehler bei 9600 Bd nur noch 0,2 %, damit kann jede RS-232-Verbindung eigentlich leben.
> Aber ich weiß ehrlich gesagt nicht wie ich das nachprüfen kann. Schreib Dir ein Programm, dass eine LED im Sekundentakt (theoretisch) blinken lassen soll. Ob die LED einmal oder dreimal in der Sekunde´blinkt, siehst Du mit freiem Auge.
OK danke! Ich habe mir schon mal so eine Art LED Lciht gebaut und das mit einer Frequenz von theoretischen 1 kHz blinken lassen. Am Oszi waren das dann aber 3, ... ms. Ich habe mir damals gedacht, dass das daher rührt, dass die Befehle ein bisschen länger dauern beim Abarbeiten und habe dann einfach die AVR Lib delay.h verwendet. Ist das schon ein Beweis dafür? MfG Saschisch
Das whrscheinlichste ist, dass der AVR mit einer anderen Taktfrequenz arbeitet als Du glaubst. Oder Du hast Dich bei der Berechnung der 1 kHz vertan.
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.