Ich hatte genau dieses Problem, dass der Port gelegentlich auf high blieb. Habe mir dann wie im Codebeispiel zu sehen geholfen. Ist sicher nich die feine englische Art aber es läuft perfekt. Es wäre für mich ziemlich wichtig das waitus in einer Variablen zu haben damit ich die Wartezeit zwischen den Bits bei unterschiedlichen Fernbedienungen im Programm ändern kann. Leider klappt das bisher nur mit einer Konstante. Habe gelesen, bei einem schnelleren Quarztakt ist es auch mit einer Variablen möglich. Teste ich noch, bin aber auch für jeden anderen Tipp dankbar.
Hier der abgeänderte Code:
Code:
$regfile = "m8def.dat"
$crystal = 8000000
$hwstack = 200
$swstack = 200
$framesize = 200
Config Portb.1 = Output
Irled Alias Portb.1
Dim Pwmwert As Word
Dim L As Byte
Dim H As Byte
Dim Code1 As String * 120 , Stellenzaehler As Byte , Bitwert_str As String * 1 , A As Byte
L = 0
H = 1
Config Timer1 = Timer , Prescale = 1 , Compare A = Disconnect , Clear Timer = 1
Pwmwert = 110
Compare1a = Pwmwert
Const Bitlaenge = 600
Do
Wait 2
Gosub Sendecodeklimaanlage
Loop
Sendecodeklimaanlage:
Code1 = "1111111111111110000000101010101010010101001001001001001010010010100101010101010100101001001001001001001"
Gosub Auswertung
Return
Auswertung:
Stellenzaehler = Len(code1)
For A = 1 To Stellenzaehler
Bitwert_str = Mid(code1 , A , 1)
Select Case Bitwert_str
Case "1"
Gosub Sendehigh
Case "0"
Gosub Sendelow
End Select
Next A
Return
Sendehigh:
Config Timer1 = Timer , Prescale = 1 , Compare A = Toggle , Clear Timer = 1
Start Timer1
Waitus Bitlaenge
Stop Timer1
Config Timer1 = Timer , Prescale = 1 , Compare A = Disconnect , Clear Timer = 1
Return
Sendelow:
Waitus Bitlaenge
Return
End
Lesezeichen