Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum

Probleme mit Serial_ReadExt(0) Kategorie: Verschiedenes (von intron - 4.01.2011 16:32)
Ich nutze:
C-Control Pro Mega32
Hallo,
mit einer PC-Software möchte ich PWM-Werte (3 PWM Kanäle mit je 8 Bit) über die RS232
Schnittstelle an die C-Control Pro Mega32 übertragen. Die 3 Kanäle werden jeweils mit
GroÃ?buchstaben 'R', 'G' und 'B' als ASCII-Zeichen kodiert, gefolgt von einem in 2 ASCII-Zeichen
zerlegten Byte als PWM-Wert, also insgesamt 3 ASCII-Zeichen.
Z.B.
PWM-Kanal 0 mit Wert 0x49: gesendet wird: 'R'+'4'+'9'
PWM-Kanal 1 mit Wert 0xA3: gesendet wird: 'G'+'A'+'3'
PWM-Kanal 2 mit Wert 0x1F: gesendet wird: 'B'+'1'+'F'
usw.

zum Empfang der Daten benutze ich die interruptgesteuerte RS232 Konfiguration (Serial_Init_IRQ()).
In einer while-Schleife wird gefragt, ob 3 Zeichen empfangen wurden. Wenn ja, wird 3mal die Funktion
Serial_ReadExt(0) aufgerufen und die empfangenen ASCII-Werte in char-Variablen geschrieben:

    while(1)
    {if(Serial_IRQ_Info(0,RS232_FIFO_RECV)>=3)
        {   color=Serial_ReadExt(0);     //1. Zeichen codiert Kanal,
            value[0]=Serial_ReadExt(0);  //2. Zeichen codiert Highbyte des PWM-Wertes
            value[1]=Serial_ReadExt(0);  //3. Zeichen codiert Lowbyte des PWM-Wertes
            PWM=Str_ReadNum(value,16);   //zwei ASCII in hex konvertieren
            .....

in "color" wird entweder 'R', 'G' oder 'B' geschrieben, in das char-Array value[] die beiden
ASCII-Zeichen des zerlegten byte für den PWM-Wert (z.B. 'R87' -> color='R', value[0]='8',
value[1]='7'). Die Funktion Str_ReadNum(value,16) setzt dann das byte aus den beiden ASCII-Zeichen
wieder zusammen (für das Beispiel ist PWM=0x87).
Nun das eigentliche Problem:
Für die Kanäle 0 und 1 (also 'R' und 'G') funktioniert es. Bei dem 3. Kanal ('B') funktioniert
es nicht mehr, da die Funktion "Serial_ReadExt(0)" das ASCII-Zeichen 'B' aus irgendeinem Grund
als Hexadezimalwert interpretiert. Ich habe das auch mit A, C, D, E, F bzw. a, b, c, d, e, f
versucht, jedoch mit dem gleichen Ergebnis.
Gibt es eine Möglichkeit, alle Zeichen einheitlich als ASCII-Werte zu lesen bzw. zu interpretieren
bzw. einen "Programmiertrick", um dieses Problem zu umgehen (am einfachsten ist es - und es geht
auch so - ist natürlich, wenn der Kanal nicht mit 'B' sondern mit einen Nicht-hexadezimalzeichen
-also z.B. 'X' - codiert, aber dennoch wäre es schön, das Problem zu lösen und nicht zu umgehen)?

Vielen Dank!


 
 


    Antwort schreiben


Antworten:

Re: Probleme mit Serial_ReadExt(0) (von Franz-Peter - 4.01.2011 17:18)
    Re: Probleme mit Serial_ReadExt(0) (von intron - 5.01.2011 10:35)
    Re: Probleme mit Serial_ReadExt(0) (von Torsten - 4.01.2011 19:19)