Da is wohl ein ; zuviel nach dem while
Hallo!
Ich versuche mich gerad ein wenig an C und möchte gern Bytes vom PC empfangen und am PortC durch eine LED-Leiste anzeigen lassen. Hier mein Code (Aus verschiedensten Tutorials zusammenkopiert):
Was passiert ist dass die LED-Leiste GANZ kurz leuchtet (programmstart) und dann aus ist. Ich habe schon geschaut, ob es vllt mit 1200 Baud (im Terminal-Prog eingestellt) läuft, wegen des /8-Fuses, aber ist nicht. Hab den Ausgang (TXD) der USB-Uart-Bridge an RXD am Mega8 angeschlossen.Code:#include <inttypes.h> #include <avr/io.h> #define F_CPU 7372800L #define BAUD 9600L #define UBRR_VAL ((F_CPU+BAUD*8)/(BAUD*16)-1) // clever runden #define BAUD_REAL (F_CPU/(16*(UBRR_VAL+1))) // Reale Baudrate #define BAUD_ERROR ((BAUD_REAL*1000)/BAUD-1000) // Fehler in Promille int main(void) { UCSRB |= (1<<RXEN); // UART RX einschalten UCSRC |= (1<<URSEL)|(3<<UCSZ0); // Asynchron 8N1 UBRRH = UBRR_VAL >> 8; UBRRL = UBRR_VAL & 0xFF; DDRC = 0xFF; PORTC = 255; while (!(UCSRA & (1<<RXC))) // warten bis Zeichen verfuegbar ; { PORTC = UDR; }; }
Kann mir wer sagen, was ich falsch mache? Hab schon hier im Forum viel rumgelesen, aber dabei keine neuen Erkenntnisse gewonnen.
-> MEIN PROJEKTBLOG <-
Da is wohl ein ; zuviel nach dem while
Nun guuut, aber das Entfernen desselben hat keine sichtbaren Resultate herbeigeführt.
-> MEIN PROJEKTBLOG <-
Das ; war schon in Ordnung.
Da fehlt noch eine Endlos while Schleife. Sonst wird dein Programm nur einmal durchlaufen.
Code:while(1) { while (!(UCSRA & (1<<RXC))) // warten bis Zeichen verfuegbar ; { PORTC = UDR; } }
geht nicht auch ne do/loop-schleife?
-> MEIN PROJEKTBLOG <-
Das ist doch vollkommen egal, ob do loop oder while oder for, hauptsache endlos. Machen tun die doch in dem Fall eh alle dasselbe.
Aber das Semikolon vor der geschweiften Klammer muss trotzdem weg, sonst gehört sie nicht mehr zum while und der Block wird immer ausgeführt.
So viele Treppen und so wenig Zeit!
Hm ich hab das jetzt mal ausprobiert. Wenn ich den USB/RS232-Adapter nur mit der Datenleitung mit dem µc verbinde und nicht mit GND, ist auf PortC Disco. Allerdings leuchtet gar nichts, wenn ich GND verbinde und Daten sende... Ich vermute langsam dass es nen Hardware-Problem ist. Ich werd diesen ominösen Adapter mal per Oszi unter die Lupe nehmen....
-> MEIN PROJEKTBLOG <-
Hallo,
das mit der Seriellen Schnittstelle am PC musst du erst mal in den Griff bekommen.
Verbinde mal RX und TX von der RS232. Wenn du dann was vom PC absendest solltest du es auch gleich wieder empfangen.
Ich hab nicht ganz verstanden, wie du den Atmega an den PC angeschlossen hast. Hast du einen Pegel-Wandler drin, ala MA232 oder setzt du das Signal direkt auf USB um ala FTDI?
Drewle
Nen... Wie ich IIRC einige Male schrob, benutze ich den MySmartUsb von "MyAvr.de". Das ist eine RS232/SPI/TWI/Programmer- Eierlegende-Wollmilchsau für den USB-Port. Es steht als normaler Com-Port am Rechner zur Verfügung. Ich hab es jetzt auch mal mit dem Oszi durchgemessen und festgestellt: Das Teil schmeisst nur GND raus ^^ Hab mich schon mit dem Hersteller in Verbindung gesetzt.. Hoffe ich krieg Ersatz.
-> MEIN PROJEKTBLOG <-
Lesezeichen