Ich wollte mal selbst mit den WS2801 Stripes rumspielen und hab mich mal an einer Lösung mit Bascom versucht und mich an einigen Beispielen orientiert.
Folgendes ist dabei rausgekommen, für die Datenübertragung hab ich einen USB - Seriell Konverter mit FTDI Chip verwendet (den MK-USB von mikrokopter.de).
Im Moment läuft das ganze auf einem Atmega32 der noch von ne'r anderen Schaltung übrig war.
Grundsätzlich funktioniert das ganze zwischenzeitlich, ich bin mir noch nicht ganz sicher ob alle LEDs die richtigen Kanäle anzeigen.
Im Moment nervt ein Flackern das ich nicht wegbekomme (vielleicht hat ja jemand einen Tipp?). Das Flackern scheint nicht vom COM Port zu kommen, stecke ich das Kabel ab flackerts trotzdem (nur die Farben ändern sich dann natürlich nicht mehr).
So hier nunmal der jetzige Code:
$regfile = "m32def.dat"
$crystal = 8000000
$baud = 250000
$hwstack = 40
$swstack = 40
$framesize = 40
Config Com1 = Dummy , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 1
Config Spi = Hard , Interrupt = Off , Data Order = Msb , Master = Yes , Polarity = High , Phase = 1 , Clockrate = 4 , Noss = 0
Spiinit
'Puffer für das angekommene Byte aus dem "DMX-Signal"
Dim X As Byte
'Byte aus dem letzten Interruptdurchgang
Dim Exx As Byte
'Byte aus dem vorletzten Interruptdurchgang
Dim Exxx As Byte
'Array, in dem alle 64 Kanäle gespeichert werden
Dim Puffer(193) As Byte
'Der aktuelle Kanal in der Empfangsroutine
Dim Kanal As Byte
'Zähler für den Puffer
Dim Zaehler As Byte
On Urxc Empfang
Enable Urxc
Enable Interrupts
Do
For Zaehler = 1 To 190 Step 3
Spiout Puffer(zaehler) , 3
Next Zaehler
Waitus 600
Loop
'--------------------------------------------------------------
'
'Empfang:
'
'steht in der USART ein Byte an, wird ein Interrupt
'ausgelöst und folgender Code abgearbeitet:
'--------------------------------------------------------------
Empfang:
X = Udr
Incr Kanal
If X = &HA1 And Exx = &H5A And Exxx = &HA5 Then Kanal = 0
If Kanal < 193 Then Puffer(kanal) = X
Exxx = Exx
Exx = X
Return
Alles anzeigen