Hmhm, geht noch nicht.
GND verbunden.
Hier die Codes: (nur Wesentliches)
Sender:
Code:
$regfile = "m32def.dat"
$crystal = 16000000
$baud = 4800
Ddra.7 = 0
Porta.7 = 1
Ddra.6 = 0
Porta.6 = 1
Ddra.5 = 0
Porta.5 = 1
Ddra.4 = 0
Porta.4 = 1
Dim Led(42) As Byte ' Array für Matrixled: 0= Aus, 1= Grün, 2= Rot, 3=orange
Dim I As Byte
' Zuerst alle aus
For I = 1 To 42
Led(i) = 0
Next
Dim A As Byte
A = 1
Dim B As Byte
B = 1
Do
' Eine Matrix-Led mehr aufleuchten lassen:
If Pina.4 = 0 Then
Waitms 300
Toggle Porta.0
Gosub Matrixchange
End If
Loop
Matrixchange:
' nächste LED
Led(b) = A
Incr B
'Falls alle leuchten:
If B = 43 Then
B = 1
For I = 1 To 42
Led(i) = 0
Next
Incr A
If A = 4 Then
A = 1
End If
End If
' nun noch per UART schicken:
For I = 1 To 42
Print Led(i);
Waitms 2
Next
Return
Und der Empfänger:
Code:
$regfile = "m8def.dat"
$crystal = 8000000
$baud = 4800
On Urxc Serielleroutine
Enable Urxc
Enable Interrupts
Dim Empfang As String * 50
Empfang = ""
Do
If Len(empfang) =42 Then
For I = 1 To 42
Blablabla (unwichtig)
Next
Empfang = ""
End If
Loop
Serielleroutine:
Empfang = Empfang + Chr(udr)
Return
Diese If-Abfrage in der Do-loop-Schleife wird nicht erreicht, "Emfpang" wird also nicht 42lang, falls sich überhaupt was tut.
Nun schau ich noch, ob der Serielle Interrupt überhaupt erreicht wird.
Im Empfänger läuft aber noch der Timer0-interrupt, der mit 36kHz einen Interrupt auslöst... Könnte das ein Grund für Störungen sein?
Aaaah, ich habs! Es war tatsächlich der Timer! Hab seinen Prescale mal auf 1024 gestellt, jetzt wird alles sauber und korrekt empfangen...
Jetzt mach ichs einfach so, dass der Mega32 zuerst etwas kurzes schickt, damit der Timer im Mega8 abgestellt werden kann. Dann blinkt halt die Matrix kurz aber was solls.
Herzlichen Gruss und Danke
Mario
Lesezeichen