Die Anpassung ist aber ganz einfach:
http://www.kreatives-chaos.com/code/2313_uart.c
Habs aber nicht geteset ...
MfG Kjion
Druckbare Version
Die Anpassung ist aber ganz einfach:
http://www.kreatives-chaos.com/code/2313_uart.c
Habs aber nicht geteset ...
MfG Kjion
Code:static uint8_t state = 0;
// empfangenes Zeichen auslesen
uint8_t buffer = UDR;
switch (state)
{
case 0:
if (buffer == '<')
{
state = 1;
}
else state = 0;
break;
case 1:
if (buffer == 'C')
{
state = 2;
}
else state = 0;
break;
case 2:
if (buffer == 'H')
{
state = 3;
}
else state = 0;
break;
case 3:
if (buffer == '1')
{
state = 4;
}
else state = 0;
break;
case 4:
if (buffer == '>')
{
PORTD = 0b11011111;
PORTB = 0b11110111;
// PORTB &= ~(1<<PB3);
// PORTB |= (1<<PB4);
// PORTD &= ~(1<<PD5);
p_string = ch1;
USR |= (1<<UDRE);
}
else state = 0;
break;
case 5:
if (buffer == '2')
{
state = 5;
}
else state = 0;
break;
case 6:
if (buffer == '>')
{
PORTD = 0b11111111;
PORTB = 0b11101111;
// PORTB |= (1<<PB3);
// PORTB &= ~(1<<PB4);
// PORTD |= (1<<PD5);
p_string = ch2;
USR |= (1<<UDRE);
}
else state = 0;
break;
default:
state = 0;
}
In case 3 prüft er ja, ob 1 kommt, und wenn nicht, geht er auf 0 zurück. D.h. ich komme nie in case 4 rein.
in case 3 das else state=0 entfernen hat mich leider auch nicht weiter gebracht.
Wie kann ich ihm bei bringe, dass er sowohl nach einer 1 als auch nach einer 2 ausschau halten soll, und dem entsprechend weiter vorgehen soll?
:-k
Probiere ich eben mal aus...Zitat:
Zitat von Kjion
Funktioniert leider auch nur einmal...bleibt in CH2 hängen.Code:{
static uint8_t state = 0;
static uint8_t channel = 0;
// empfangenes Zeichen auslesen
uint8_t buffer = UDR;
switch (state)
{
case 0:
if (buffer == '<')
{
state = 1;
}
else state = 0;
break;
case 1:
if (buffer == 'C')
{
state = 2;
}
else state = 0;
break;
case 2:
if (buffer == 'H')
{
state = 3;
}
else state = 0;
break;
case 3:
channel = buffer;
state = 4;
break;
case 4:
if (buffer == '>')
if (channel == '1')
{
PORTD = 0b11011111;
PORTB = 0b11110111;
p_string = ch1;
USR |= (1<<UDRE);
}
if (channel == '2')
{
PORTD = 0b11111111;
PORTB = 0b11101111;
p_string = ch2;
USR |= (1<<UDRE);
}
else state = 0;
break;
default:
state = 0;
}
Wenn ich uC resete, dann <CH1> eingebe, wechselt er...
Wenn ich jetzt <CH2> eingebe, wechselt er auch...
Und von hier an hängt er...
Wenn ich nach dem Reset mit <CH2> anfange hängt er sich gleich auf...
Du solltest dem Code noch eine Klammer mehr spendieren, dann sollte das auch gehen...Code:{
static uint8_t state = 0;
static uint8_t channel = 0;
// empfangenes Zeichen auslesen
uint8_t buffer = UDR;
switch (state)
{
case 0:
if (buffer == '<')
{
state = 1;
}
else state = 0;
break;
case 1:
if (buffer == 'C')
{
state = 2;
}
else state = 0;
break;
case 2:
if (buffer == 'H')
{
state = 3;
}
else state = 0;
break;
case 3:
channel = buffer;
state = 4;
break;
case 4:
if (buffer == '>') {
if (channel == '1')
{
PORTD = 0b11011111;
PORTB = 0b11110111;
p_string = ch1;
USR |= (1<<UDRE);
}
if (channel == '2')
{
PORTD = 0b11111111;
PORTB = 0b11101111;
p_string = ch2;
USR |= (1<<UDRE);
}
}
state = 0;
break;
default:
state = 0;
}
Tschuldigung, alles wieder zurück...
Habe den Fehler entdeckt...
Ich muss nach Case 4 wieder zurück auf state=0, sonst hängt er ja eben an diesem Punkt.
Ach ja, nochmals vielen Dank für die Unterstützung...
Danke...habe ich ergänzt...Zitat:
Zitat von Kjion
Hallo nochmals,
darf ich eigentlich weiter nerven, oder habe ich mein Kontingent erreicht? [-o<
Solange dir noch jemand antwortet scheint's noch nicht so weit zu sein :-)
Ich interpretiere das mal eben als ein ja :-bZitat:
Zitat von Kjion
Derzeit habe ich noch probleme mit der Rückmeldung.
Der Controller sollte mir ja zurück geben, in welchem Zustand er jetzt ist.
So wie es in dem Code war hat es ja irgendwie nicht geklappt.
Ok, eine allgemeine Frage.
Ist es nicht möglich, einen string in Form eines Arrays zu definieren und das dann mit UDR auszugeben?
char ch1[7] = "CH1_OK\n"
und dann an der nötigen Stelle es auf zu rufen...
UDR = ch1;
Wo habe ich meinen Denkfehler?
Du hattest ja in deinem Code (wenn ich die avr-lib nicht falsch verstanden habe) Pointer drin.
Vielleicht noch zu erwähnen, in dem jetztigen Zustand gibt er mir ein Dreickchen oder einen dichen Strich zurück...