Hallo,
ich wollte mit "printf("meine Ausgabe");" eine Mitteilung über die COM-schnittstelle am RN Control schicken, jedoch wird leider nix ausgegeben.
Was muss ich beachten ? Die Com ist ok, in Bascom funktioniert alles...
Danke
Hallo,
ich wollte mit "printf("meine Ausgabe");" eine Mitteilung über die COM-schnittstelle am RN Control schicken, jedoch wird leider nix ausgegeben.
Was muss ich beachten ? Die Com ist ok, in Bascom funktioniert alles...
Danke
Die printf-Funktion spricht in C nicht automatisch die UART-Schnittstelle an.
Du kannst aber wohl mit fdevopen() definieren, dass printf auf die UART schreibt. Die Funktion, die ein Zeichen an die UART ausgibt, musst Du aber dann noch selber implementieren.
Hier mal ein bißchen Code wie's eventuell funktionieren könnte. Ich hab's allerdings selber noch nicht ausprobiert.
Gruß,Code:int uart_putchar(char c) { if (c == '\n') uart_putchar('\r'); loop_until_bit_is_set(UCSRA, UDRE); UDR = c; return 0; } int main(void) { ioinit(); //Schnittstelle initialisieren fdevopen(uart_putchar, NULL, 0); printf ("Hello World"); return 0; }
askazo
Hab's jetzt mal getestet.
Das funktioniert so!
Gruß,
askazo
Hallo, bei mir funktioniert es leider nicht, ich bekomme auch den Compilerfeher:
also, er kennt die ioinit nicht... welche include benötige ich ?Code:undefined reference to `ioinit'
Danke
Alecs
Gar keines, ioinit() implementierst du selber und nimmst die Initialisierungen vor, die du brauchst. Oder nimmst ein ioinit von jemand anderem, welches das tut was du brauchst.
ioinit ist keine vordefinierte Funktion, du kannst die genausogut hamsterrad nennen.
Disclaimer: none. Sue me.
also ich hab nun folgendes Programm:
doch leider kommt keine Ausgabe über die COMCode:#include <../avr/include/io.h> #include <../avr/include/stdio.h> #define USART_BAUD_RATE 9600 #define USART_BAUD_SELECT (F_CPU/(USART_BAUD_RATE*16L)-1) int uart_putchar(char c); int uart_putchar(char c) { if (c == '\n') uart_putchar('\r'); loop_until_bit_is_set(UCSRA, UDRE); UDR = c; return 0; } int main(void) { int zeichen; fdevopen(uart_putchar, NULL, 0); zeichen=printf("Hallo Welt"); printf(" enthaelt %d Zeichen\n",zeichen); //10 Zeichen return 0; }
was ist da falsch, es kommen keine Fehler beim compilieren!!!
Dir fehlt die Initialisierung der COM-Schnittstelle.
-> siehe
http://www.mikrocontroller.net/artic...n_mit_dem_UART
Sorry, ich dachte, Du kennst Dich durch Bascom schon ein wenig mit den Registern der UART aus.
Hier mal ein Programm, das Du direkt kompilieren kannst:
Code:#include <io.h> #include <stdio.h> #define F_CPU 8000000 // 8 MHz Taktfrequenz #define UART_BAUD_RATE 2400 #define UART_BAUD_SELECT (F_CPU/(UART_BAUD_RATE*16l)-1) int uart_putchar(char c) { if (c == '\n') uart_putchar('\r'); loop_until_bit_is_set(UCSR0A, UDRE); UDR0 = c; return 0; } void ioinit(void) { UCSRB = 0x08 //UART Transmitter aktivieren UBRRL = UART_BAUD_SELECT; //Baud Rate einstellen } int main (void) { UartInit(); //Schnittstelle initialisieren fdevopen(uart_putchar, NULL, 0); printf ("HelloWorld"); }
@ askazo: Leider funktionierte dein Code nicht sofort und ich musst diesen nen bisl abändern, doch nun funktioniert er ohne Probleme:Vielen Dank =D> noch mal für die Hilfe, ich hab dieses Beispiel im Fall das noch jemand mal diese Hilfe brauch gepostet!!!!Code:#include <io.h> #include <stdio.h> #define F_CPU 16000000 // 8 MHz Taktfrequenz #define UART_BAUD_RATE 9600 #define UART_BAUD_SELECT (F_CPU/(UART_BAUD_RATE*16l)-1) int uart_putchar(char c) { if (c == '\n') uart_putchar('\r'); while (!(UCSRA & (1<<UDRE))); UDR = c; return 0; } void ioinit(void) { UCSRB = 0x08; //UART Transmitter aktivieren UBRRL = UART_BAUD_SELECT; //Baud Rate einstellen } int main (void) { ioinit(); //Schnittstelle initialisieren fdevopen(uart_putchar, NULL, 0); printf ("Hello World \n"); }
Alecs
Naja, Taktfrequenz und Baud-Rate kann ich ja nicht erraten, da habe ich einfach mal Werte angenommen.
Die 0 bei den Registern UDR und UCSRA sind Copy&Paste-Fehler - hatte das Programm auf dem Mega128 getestet und vergessen, das wieder umzuschreiben...
Aber schön, dass ich Dir helfen konnte
askazo
Lesezeichen