Hallo,
ich will eine Rolladensteuerung in Bascom erstellen. Dazu frage ich u.a. I/O-Ports (PCF8574) ab. Im Rahmen einer Fehlersuche gebe ich eine Variable aus, die entsprechende Zeile lautet:
Es wird angezeigt, was auch erwartet wird.. ;-)
Stelle ich die Reihenfolge um
dann ist das ERgebnis (ohne an der HW irgend etwas zu ändern) kompletter Nonsens. Schreibe ich diese Zeile hinter die obige erste, wird alles richtig angezeigt. Richtig heißt in diesem Fall, beide "Readback"-Variablen sind 255d, im Fehlerfall eine 255d und die zweite 48d
Das ist doch ein Bug und kein Feature???
Problem ist halt, dass ich mich nicht auf den Compiler verlassen kann, wenn er so undefinierbares Zeug macht. Ich arbeite gerade noch mit der Demo-Version 1.11.8.7 und wollte eine Vollversion kaufen. Aber mit solchen Bugs???
Der Vollständigkeithalber hier noch der gesamte Code. Bitte beachten: hier habe ich viel rumprobiert, daher ist die Struktur und Inhalt nicht wirklich schön.
Gruß
Timo
ich will eine Rolladensteuerung in Bascom erstellen. Dazu frage ich u.a. I/O-Ports (PCF8574) ab. Im Rahmen einer Fehlersuche gebe ich eine Variable aus, die entsprechende Zeile lautet:
Code:
Locate 1 , 1 : Lcd Bin(b_readbackprev_1) ; " " ; Bin(b_readback)
Strdummy = Bin(rolladenstatus_1_out)
Locate 2 , 10 : Lcd Strdummy
Stelle ich die Reihenfolge um
Code:
Strdummy = Bin(rolladenstatus_1_out)
Locate 1 , 1 : Lcd Bin(b_readbackprev_1) ; " " ; Bin(b_readback)
Locate 2 , 10 : Lcd Strdummy
Das ist doch ein Bug und kein Feature???
Problem ist halt, dass ich mich nicht auf den Compiler verlassen kann, wenn er so undefinierbares Zeug macht. Ich arbeite gerade noch mit der Demo-Version 1.11.8.7 und wollte eine Vollversion kaufen. Aber mit solchen Bugs???
Der Vollständigkeithalber hier noch der gesamte Code. Bitte beachten: hier habe ich viel rumprobiert, daher ist die Struktur und Inhalt nicht wirklich schön.
Code:
' 5*2 Taster abfragen, 5*2 Rolladen steuern
' ******************************************************************************
' *** Pins Hardware tr037-2009-R02
' ***
' *** M M M M A1 Z1 A2 Z2 A4 Z4 A3 Z3 A5 Z5 - - - - RA1 RZ1 RA1 RZ1 RA2 RZ2 RA4 RZ4 RA3 RZ3
' ******************************************************************************
'
' Historie
' V1.1b: Ansteuersequenz auf Relais geändert
' ------------------------- µC-Setup ------------------------------------------
$regfile = "m16def.DAT"
$crystal = 8000000
$hwstack = 32
$swstack = 16
$framesize = 24
$baud = 38400
' ------------------------- µC-Setup Ende--------------------------------------
' ADC
Config Adc = Single , Prescaler = Auto
Start Adc
'I2C-Bus
Config Sda = Portc.1
Config Scl = Portc.0
Config I2cdelay = 200
' LCD
Config Lcdpin = Pin , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portc.6 , Db7 = Portc.7 , E = Portc.3 , Rs = Portc.2
Config Lcd = 20 * 2
Cursor Off
Config Portd.7 = Output 'light
'*******************************************************************************
'*** Konstanten ***
'*******************************************************************************
' Konstanten
Const Adr_rtc_w = &HD0 'Adresse schreiben RTC
Const Adr_rtc_r = &HD1 'Adresse lesen RTC
'Const Timer0_reload = 240 'Wert für 0.5ms => das Timing ist entscheidend!!!!!
'*******************************************************************************
'*** Variablen ***
'*******************************************************************************
Dim Hour As Byte , Minute As Byte , Second As Byte ' für RTC
Dim Dummy As Byte , Strdummy As String * 2 ' eine Variable für alles
Dim I As Byte , B_readback As Byte , Ii As Byte
Dim Tastenstatus_1 As Byte , Tastenstatus_2 As Byte
Dim Rolladenstatus_1 As Byte , Rolladenstatus_2 As Byte , Rolladenstatus_1_out As Byte , Rolladenstatus_2_out As Byte
Dim B_readbackprev_1 As Byte , B_readbackprev_2 As Byte
Dim W_adc As Word
'*******************************************************************************
'*** HAUPTPROGRAMM ***
'*******************************************************************************
' Init
Cls
Portd.7 = 1 'Licht an
' alle Ports abschalten(High)
I2cstart
I2cwbyte 64
I2cwbyte &HFF
I2cstop
I2cstart
I2cwbyte 66
I2cwbyte &HFF
I2cstop
I2cstart
I2cwbyte 68
I2cwbyte &H00
I2cstop
Rolladenstatus_1 = &H00 : Rolladenstatus_2 = &H00 : B_readbackprev_1 = &H00
Do
' Defaultwerte
' Tastenstatus_1 = &HFF : Tastenstatus_2 = &HFF
' lese Tastenports ein
I2cstart
I2cwbyte 65
I2crbyte B_readback , Nack
I2cstop
For I = 0 To 7 Step 2 ' erstes Byte auswerten
Ii = I + 1
If B_readback.i = 0 And B_readbackprev_1.i = 1 Then
Toggle Rolladenstatus_1.i
Rolladenstatus_1.ii = 0 'Rolladen an
Elseif B_readback.ii = 0 And B_readbackprev_1.ii = 1 Then
Toggle Rolladenstatus_1.i 'Rolladen an
Rolladenstatus_1.ii = Rolladenstatus_1.i 'Rollanden in andere Richtung
End If
Next
B_readbackprev_1 = B_readback
Rolladenstatus_1_out = Rolladenstatus_1
Locate 1 , 1 : Lcd Bin(b_readbackprev_1) ; " " ; Bin(b_readback)
Strdummy = Bin(rolladenstatus_1_out)
Locate 2 , 10 : Lcd Strdummy ; " " ' ; Bin(rolladenstatus_2)
Waitms 300
Loop
Gruß
Timo