Das Open-Control-Projekt - Die Alternative zur C-Control-I


Das Forum zur C-Control-1
Welche C-Control-Varianten existieren?
Übersicht - Suchen - Neueste 50 Beiträge - Neuer Beitrag - Login - Registrieren
INFO - FAQ - CC2-Forum - CCPro-Forum 

 For-Next Fehler, Fehler bei RC5 Empfang Kategorie: C-Control I V1.2/2.0 (von MS - 13.01.2005 14:09)

Eigentlich wollte ich ausprobieren, ob sich mit RC5 über einzelne
Steuercodes hinaus auch "längere" Bytesequenzen übertragen lassen,
welche Übertragungsrate man erreichen kann ...

Ich teste auf einer c-control 2 OS 2.01.

Die erste Problem zeigt sich beim Senden.
In einer gestaffelten for .. next .. step Schleife arbeitet die
innere Schleife fehlerhaft, sobald die Schrittweite > 1 gewählt wird.
Das Problem ist am nachfolgenden Programm dargestellt:

'------------------------------------------------
' Testprogramm für RC5-Datenübertragung

define i           byte[1]
define j           byte[2]

i = 0
j = 0

' Auskommentiert zur Ausgabe auf COM1:
' print"#ON_IR#";

FOR i = 0 to 127 step 1

    FOR j = 0 to 63 step 1
'   FOR j = 0 to 63 step 2
'   mit step 1 funktioniert die innere Schleife, aber ...
'   bei Schrittweite von z.B. 2 wird
'   die innere Schleife nicht mehr verlassen und es wird
'   bis 255 hochgezählt (obwohl bei 63 Schluss sein sollte)!

    ' Auskommentiert zur Ausgabe auf COM:
        'put i
        'put j
    ' Ausgabe auf COM:
        Print i, j
        pause 2
    NEXT
NEXT

Als weiteres Problem stellt sich heraus, dass die Unit immer wieder den
Code "255" als Adresse und gelegentlich auch als Kommando empfängt,
obwohl die parallel horchende "alte" c-control und die micro
die richtigen Zeichen empfangen (allerdings in geringerer Geschwindigkeit).
Auch beim Senden mit einer normalen Fernbedienung tauchen diese Fehler auf.

Nachfolgend das auf dem Empfänger laufende Programm:

'----------------------------------------------------------------------
' Testprogramm für den Empfang von RC5-Codes und Anzeige auf LCD 2 x 20

define TOG         bit[1]
define ADDR        byte[2]
define CMD         byte[3]
define counter1    byte[4]
define counter2    byte[5]
define ADDR2       byte[6]
define CMD2        byte[7]
define counter3    byte[8]

counter1 = 0
counter2 = 0
counter3 = 0
addr2    = 0
cmd2     = 0

print"#ON_LCD#";
print"#INIT#";

' Ausgabe der feststehenden Textmaske
print"#L101#";                   'CURSOR AUF ZEILE 1 POS 1
print"ADR ... CMD .. : ...";     'TEXTAUSGABE
print"#L201#";                   'CURSOR AUF ZEILE 2 POS 1
print"ADR ... CMD .. : ...";     'TEXTAUSGABE
print"#OFF#";

'-----------------------------------------------------
#LOOP

'-- UMLEITUNG DER PRINT-FUNKTION AUF DAS IR-MODULE----
print"#ON_IR#";
'---------- IR MODULE DATEN ABFRAGEN ------------------
get ADDR
get CMD
'------- ABFRAGE OB DATEN EMPFANGEN WURDEN ------------
if (ADDR and CMD)=&HFF then goto loop else gosub SHOWDATA
' eigentlich überflüssig ...
goto LOOP
'-----------------------------------------------------

'-----------------------------------------------------
#SHOWDATA
' Bit 6 maskieren
TOG  = ADDR and &b00100000
' Adresse maskieren
ADDR = ADDR and &b00011111
' Kommando maskieren
CMD  = CMD  and &b00111111

' Zähler für Anzahl der empfangenen Sendungen erhöhen
counter1 = counter1 + 1
'--------- UMLEITUNG AUF DAS IR-MODULE ABSCHALTEN -----
print"#OFF#";
'--------- UMLEITUNG AUF DAS LCD MODULE EINSCHALTEN ---
print"#ON_LCD#";

'---------- EMPFANGENE DATEN FORMATIERT AUSGEBEN ------
print"#L105#";                   'CURSOR AUF ZEILE 1 POS 5
IF (ADDR < 10 and ADDR < 100) Then print "  ";
IF (ADDR < 100 and ADDR > 9) Then print " ";
print ADDR;                      'ADRESSE AUSGEBEN

print"#L113#";                   'CURSOR AUF ZEILE 1 POS 13
IF CMD < 10 Then print " ";
print CMD;

print"#L118#";                   'CURSOR AUF ZEILE 1 POS 18
IF (counter1 < 10 and counter1 < 100) Then print "  ";
IF (counter1 < 100 and counter1 > 9)  Then print " ";
print counter1

print"#L205#";                   'CURSOR AUF ZEILE 2 POS 5
IF (ADDR2 < 10 and ADDR2 < 100) Then print "  ";
IF (ADDR2 < 100 and ADDR2 > 9)  Then print " ";
print ADDR2;                     'ADRESSE AUSGEBEN

print"#L213#";                   'CURSOR AUF ZEILE 2 POS 13
IF CMD2 < 10 Then print " ";
print CMD2;

print"#L218#";                   'CURSOR AUF ZEILE 2 POS 18
IF (counter3 < 10 and counter3 < 100) Then print "  ";
IF (counter3 < 100 and counter3 > 9)  Then print " ";
print counter3

addr2    = addr
cmd2     = cmd
counter3 = counter1

'-------- UMLEITUNG AUF DAS IR-MODULE ABSCHALTEN ------
print"#OFF#";
' pause 1
return

Hat dazu jemand irgendwelche Erkenntnisse ?
Wer macht die Fehler, ich oder das OS ?

 Antwort schreiben

Bisherige Antworten:

Re: For-Next Fehler, Fehler bei RC5 Empfang (von RC - 14.01.2005 13:44)
    Fehler bei RC5 Empfang (von MS - 18.01.2005 10:07)
Re: For-Next Fehler, Fehler bei RC5 Empfang (von Henrik - 13.01.2005 23:24)
    Re: For-Next Fehler (von MS - 14.01.2005 11:27)
        <-- diese Antwort sollte nicht sein ... (von MS - 14.01.2005 11:46)
    Re: For-Next Fehler, Fehler bei RC5 Empfang (von MS - 14.01.2005 11:26)
Re: For-Next Fehler, Fehler bei RC5 Empfang (von Dietmar - 13.01.2005 23:08)
    Re: For-Next Fehler (von Patrick - 14.01.2005 1:19)