Forum: Mikrocontroller und Digitale Elektronik Bascom DMX sendet falsche Kanäle


von Luca E. (derlucae98)


Angehängte Dateien:

Lesenswert?

Hallo,

Ich habe ein Problem beim Senden von DMX Kanälen. Zum Testen verwende 
ich eine Varytec Par 56 LED.

Hier der Code:
1
$regfile = "m32def.dat"
2
$crystal = 16000000
3
$baud = 250000
4
5
Config Com1 = Dummy , Synchrone = 0 , Parity = None , Stopbits = 2 , Databits = 8 , Clockpol = 1,
6
Config Porta = Input
7
Dim Null_byte(1) As Byte
8
Usart_tx Alias Portd.1
9
Config Usart_tx = Output
10
Config Adc = Single , Prescaler = Auto , Reference = Avcc
11
Dim Fader(512) As Integer
12
13
Do
14
Fader(1) = Getadc(0)
15
Fader(2) = Getadc(1)
16
Fader(3) = Getadc(2)
17
Shift Fader(1) , Right , 2
18
Shift Fader(2) , Right , 2
19
Shift Fader(3) , Right , 2
20
21
22
Ucsrb.txen = 0                                              
23
Usart_tx = 0                                           
24
Waitus 200                                              
25
Usart_tx = 1                                            
26
Ucsrb.txen = 1                                          
27
Waitus 16                                               
28
Printbin Null_byte(1) ; 1 ; Fader(1) ; 512                 
29
30
31
Loop
Ich habe folgendes Problem:
Fader(1) bzw. ADC 0 ist der erste Kanal, Rot. Das funktioniert soweit 
auch. Der zweite Kanal der Lampe ist Grün. Bascom sendet hier aber den 
3. Kanal, zusehen als Blau. Der dritte Kanal wäre eigentlich Blau, 
Bascom sendet hier aber Kanal 4, Strobe.

Warum verschieben sich die Kanäle ab Kanal 1 jeweils um 1? Ich habe es 
nicht geschafft Kanal 2 zu senden, also Grün.
Hat jemand eine Idee was ich falsch mache?

Schaltplan ist als Anhang dabei.

Danke im Voraus!

von Martin K. (maart)


Lesenswert?

Luca E. schrieb:

Erkläre doch mal diese Zeile hier:

1
> Printbin Null_byte(1) ; 1 ; Fader(1) ; 512

von Luca E. (derlucae98)


Lesenswert?


von Luca E. (derlucae98)


Lesenswert?

Habe es hinbekommen...
1
$regfile = "m32def.dat"
2
$crystal = 16000000
3
$baud = 250000
4
5
Config Com1 = Dummy , Synchrone = 0 , Parity = None , Stopbits = 2 , Databits = 8 , Clockpol = 1,
6
Config Porta = Input
7
Dim Null_byte(1) As Byte
8
Usart_tx Alias Portd.1
9
Config Usart_tx = Output
10
Config Adc = Single , Prescaler = Auto , Reference = Aref
11
Dim Fader(255) As Integer
12
13
Dim Puffer(255) As Byte
14
Do
15
Fader(1) = Getadc(0)
16
Fader(2) = Getadc(1)
17
Fader(3) = Getadc(2)
18
Shift Fader(1) , Right , 2
19
Shift Fader(2) , Right , 2
20
Shift Fader(3) , Right , 2
21
22
puffer(1) = fader(1)
23
Puffer(2) = Fader(2)
24
Puffer(3) = Fader(3)
25
Ucsrb.txen = 0                                              'Usart ausschalten
26
Usart_tx = 0                                                'Reset abfallende Flanke
27
Waitus 200                                                  'minimale Länge des Resets
28
Usart_tx = 1                                                'Reset aufsteigende Flanke
29
Ucsrb.txen = 1                                              'Usart einschalten
30
Waitus 16                                                   'MARK zw. RESET und Startbyte min. 8us
31
Printbin Null_byte(1) ; 1 ; Puffer(1) ; 255                 'jetzt die Daten
32
33
34
Loop

Thread kann gelöscht werden...

MfG

von Martin K. (maart)


Lesenswert?

Du kannst mit dieser Lösung allerdings nur bis Kanal 256 adressieren.

von Weingut P. (weinbauer)


Lesenswert?

uuuhhh ... Du belegst Dir 1024 Bytes im Ram für 3 Datenbytes?? Respekt 
...

Sowei ich mich erinnere ist beim DMX nach dem Break das erste Byte ne 0 
als Startcode, dann gehts mit CH1 los. VOr der 0 kommt glaub ich 8µs die 
Markierung.
Möglicherweise wollen Deine Slaves aber auch nicht die Frames so fix 
hintereinander weg um die Ohren bekommen, da können n paar nop's 
zwischen den Bytes hinter nem TXC-Flag Wunder wirken.

von Weingut P. (weinbauer)


Lesenswert?

Ach so, nur noch als Hinweis, es müssen nicht zwingend alle Frames 
gesendet werden wenn nix drinnen steht.
Wenn man nur 3 braucht sendet man eben 3

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.