Hallo Gemeine, ich bin neu. Martin mein Name. Versuche gerade mittels Uart meinen ATmega8151 16Mhz zu steuern. Verwende GCC und Avr Studio. Mein Prgramm soll wenn es ein Steuerzeichen "#" bekommt abhängig von den nächsten drei Zeichen etwas unternehmen. Das Klappt auch, jedoch nur, wenn ich den _delay drin lasse. Wenn ich es raus nehme, erkennt er zwar noch das steuerzeichen, jedoch nicht mehr die weiteren. Verwende die uart.h von Peter Fleury. Vielen Dank bei der Hilfe. #include <stdlib.h> #include <avr/io.h> #include <avr/interrupt.h> #include <avr/pgmspace.h> #include <util/delay.h> #include <string.h> #include "uart.h" #define UART_BAUD_RATE 9600 int main(void) { char c, tmp[3]; uart_init( UART_BAUD_SELECT(UART_BAUD_RATE,F_CPU) ); sei(); DDRD = (1<<PD5); PORTD = (1<<PD5); while(1) { c = uart_getc(); _delay_ms(1); //uart_puts("warten\n"); if(c == '#'){ //tmp = "0"; uart_puts("erkannt\n"); for(int i=0; i<=2; i++){ tmp[i] = (char)uart_getc(); } if(tmp[0] == '0'){ PORTD = (0<<PD5); uart_puts("LED an\n"); } else if(tmp[0] == '1'){ PORTD = (1<<PD5); uart_puts("LED aus\n"); } else { uart_puts("nichts\n"); } } }
Hallo Martin, frag doch mal die Returncodes ab. Wahrscheinlich kommt UART_NO_DATA, wenn Du das delay rausnimmst. Viel Erfolg, MartinBe
hm könnte sein. Das würde dann wohl an der Übertragungsgeschwindigkeit von 9600 baud liegen. Sprich ich frage schneller ab, es kommt aber nichts neues -> da '#' erkennt er zwar, aber nicht das nächste Zeichen, weil es noch garnicht kommt. (macht Sinn)
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.