Forum: Compiler & IDEs UART empfangen/prüfen/nutzen


von Patrice A. (patrice_a)


Lesenswert?

Hallo

also ich möchte einen Befehl empfangen, diesen dann auf Richtigkeit 
prüfen und dadurch meinen Kanal ändern.
1
int main()
2
  {    
3
    char udata;
4
    char buffer[40];
5
    int8_t u;
6
    
7
    uart_init();                          //  init uart interface
8
    stdout_init();                          //  init stdout interface to use DEBUG_PRINT_P and DEBUG_PRINT
9
    ADC_Init();  
10
    TIMER_Init();
11
    u=0;
12
    sei();                              // Interrupts Global zulassen
13
    
14
    while(1)
15
      {  
16
        udata=uart_getchar();                  // empfangene Zeichen in udata speichern
17
        if(udata!=0xff)                      // Zeichen ungleich 0?
18
        {
19
          
20
          buffer[u]=udata;                  // udata in buffer schreiben
21
          u++;                        // Zähler
22
          if (udata=='\r')                  // Eingabe beendet
23
          {
24
            if(strncmp("<Kanal",buffer+(u-9),6)==0)      // Eingabe prüfen
25
            {
26
              if(buffer[u-2]=='>')              // Endzeichen
27
              {
28
                k=buffer[u-3]-'0';            // ASCII umwandeln
29
                k+=3;
30
                ADMUX = (ADMUX & ~(0x1f))|(k & 0x1F);  // Kanal ändern
31
              }else
32
              {
33
                printf("Fehler! Falsches Endzeichen.");
34
                u=0;
35
              }  
36
            }else
37
            {
38
              printf("Fehler! Falsche Eingabe.");
39
              u=0;
40
            }
41
          }          
42
          if(u==33)                      // Zähler zuruecksetzen
43
          {
44
            u=0;
45
          }
46
      
47
        }      
48
      }
49
  }

Das Problem ist nun das nach jeder 4ten Eingabe "Fehler! Falsche 
Eingabe." kommt. Das bedeutet das der String falsch gelesen wird. Ich 
weiß einfach nicht warum. Ich hat die Buffergröße von 32 auf 33 dann auf 
40 geändert aber immer derselbe Fehler. Den Zähler zuruecksetzen habe 
ich auch vorher und nachher probiert und immernoch falsch.
Irgendjemand eine Idee?

Gruß

von Patrice A. (patrice_a)


Lesenswert?

hatte mich beim Zähler verzählt .. wird nun bei 32 zurueckgesetzt
sollte aber eigentlich nicht den 4ten Befehl beeinflussen
Problem besteht weiterhin

Desweiteren hat jmd vielleicht eine Idee wie ich nach der 
Kanalumstellung kurz warten kann so das der ADC zeit hat sich 
einzustellen? Ein delay wuerde ich nur ungern benutzen

von Patrice A. (patrice_a)


Lesenswert?

bitter .. wenn ich u nach ADMUX zuruecksetze gehts .. also buffer auf 9 
und u immer zurueck ..

klappt alles ..

danke fuer lesen vielleicht braucht ja jmd den code ;)

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
Noch kein Account? Hier anmelden.