Jo. also beim Sender sieht der Code wie folgt aus:
Code:
$regfile = "M8def.dat" ' the used chip
$crystal = 16000000 ' frequency used
$baud = 9600 ' baud rate
$framesize = 48 ' die Größe des Frames
$swstack = 32 ' die Größe des Software-stacks
$hwstack = 32 ' die Größe des Hardware-Stacks
Config Timer0 = Timer , Prescale = 1 'Timer0 einstellen
On Timer0 Fmod 'wenn Timer0 überläuft zum Modulationsinterrupt springen
Config Pind.6 = Output 'Led anschluss
Config Pind.7 = Output 'Sw UART pin
Portd.6 = 0
Portd.7 = 0
Enable Interrupts
Print "hallo computer"
Dim T0preset As Byte 'Timervorladewert
T0preset = 140
Enable Timer0
Open "comd.7:300,8,n,1" For Output As #1 'Software UART auf Portd.7 erzeugen
Do
Print "sende"
Print #1 , "hallo" '"hallo" auf Portd.7 ausgeben
Waitms 500
Loop
Fmod:
Toggle Portd.6
If Pind.7 = 1 Then
Timer0 = 0 'niedrige Frequenz erzeugen, die nicht vom TSOP erkannt wird
Else
Timer0 = T0preset '~38kHz ausgangsfrequenz erzeugen
End If
Return
End
Die Led hängt (natürlich mit vorwiderstand) an Portd.6 .
Immer wenn der Timer überläuft, wird der Zustand des Ports gewechselt.
Lässt man den Timer bei ~115 starten, würde sich theoretisch eine Frequenz von 38kHz ergeben. In der Praxis hat sich erwiesen das es mit werten um 140 funktioniert, vermutlich weil der interrupt selber auch Zeit verbraucht.
Auf Portd.7 habe ich nun ein Software UART gelegt und stelle im Timer0 interrupt, je nachdem welchen Zustand der Pd.7 hat, den startwert vom Timer dementsprechend ein. Bei Pind.7 = 0 startwert 140, damit ergibt sich die vom TSOP benötigte frequenz, dieser erkennt das und schaltet seinen ausgang dementsprechend auch auf 0.
Ist Pind.7 =1 wird ein anderer startwert gewählt, wodurch eine andere frequenz als ~38kHz entsteht und der TSOP auf 1 schaltet.
Mit dem TSOP an einem anderen µC als empfänger müsste das so eigentlich funktionieren.
Tut es leider aber noch nicht, wobei ich es auch seitdem erst einmal ausprobiert habe. 0 oder 1 wird korrekt übertragen (einfach per led am tsop zu testen), aber mit UART kommt nur müll an.
Meine Vermutung dazu ist, dass durch den relativ häufigen aufruf des Timer interrupts der µC, bzw. vielmehr Bascom, mit dem Timing des UART durcheinander kommt. Um dies testen zu können muss ich dann wohl doch auf Hardwareseitige Modulation über NE555 umsteigen.
Möglicherweise hilft aber auch etwas feintuning.
Lesezeichen