Hallo ich habe noch ein kleines Problem mit meinem Programm. Ich habe A/D gewandelte Werte und gebe Sie auf einem Display über I2C aus, was alles auch wunderbar funktioniert. Zusätzlich will ich diese Werte die sich in Form eines Strings vorfinden auf dem Hyperterminal anschauen. Habe bereits COM1 und Frequenz am Terminal eingestellt und im Programm selbst die uart_putchar() eingefügt. Diese gebe ich mittels fdevopen durch printf aus. Aber es funktioniert noch nicht. Benutze einen mega 16 und habe TX über UCSRB freigeschaltet Baudrate ist auch eingestellt auf 9600. Also falls jemand Tipps hat würde ich mich sehr freuen. MFG andym
Gast
#521314
Funktioniert UART grundsätzlich nicht oder funktioniert fdevopen/printf
nicht? UART kannst du durch dieses Codestückchen testen:
#if 1
{
char *p;
p = "Kanal 2: ";
while(*p)
uart_putchar(*p++);
p = s;
while(*p)
uart_putchar(*p++);
uart_putchar('\r');
}
#else
fdevopen(uart_putchar, 0);
printf("Kanal 2: %s\r",s); // Weitergabe der Variable an putchar
#endif
Hi UART funktioniert daher kann es eigentlich nur noch fdevopen sein oder es liegt irgendwie am Hyperterminal, da ich über Matlab mit COM1 kommunizieren konnte und auch Werte bekam. PS:kann ich den String über UART ausgeben ohne fdevopen zu benutzen
Gast
#522162
Die printf-Ausgabe erfolgt über den festgelegten I/O-stream 'stdout'. Den musst Du definieren und zwar so: static FILE uart0_stream = FDEV_SETUP_STREAM(uart0_putchar, uart0_getchar, _FDEV_SETUP_RW); static FILE uart1_stream = FDEV_SETUP_STREAM(uart1_putchar, uart1_getchar, _FDEV_SETUP_RW); Damit habe ich zwei Files definiert uart0_stream und uart1_stream. Diese werden nun (GANZ wichtig!) dem Standardstream 'stdout' zugeordnet, z.B.: stdout = &uart0_stream; //stdout = &uart1_stream; ..also so gehts bei mir. Vielleicht hilfts..? Evtl. liegts aber wirklich am Terminalprogramm? Teraterm hier ist nicht ganz so seltsam und bockig wie Hyperterm: http://hp.vector.co.jp/authors/VA002416/teraterm.html Man kann Einstellungen speichern und es hat auch eine "Reset Port"-Funktion, mit der man den UART des PC wieder flottmachen kann, wenn er sich durch undefiniertes Portgeklimper abgeseilt hat... Grüßle