Dmx mit Bascom generiert

Gast #4101809
Lesenswert?

Hi,
kann mir einer von euch sagen ob dieser DMX Sende Code funktionieren 
würde?
1
$regfile = "8515def.dat"
2
$crystal = 8000000
3

4
Config Pinc.0 = Input
5
Config Pinc.1 = Input
6
Config Pinc.2 = Input
7
Config Portc.4 = Output
8

9
Config Com1 = 250000 , Synchrone = 0 , Parity = None , Stopbits = 2 , Databits = 8 , Clockpol = 0
10

11
Dim Dmx_werte(300) As Byte
12
Dim Y As Single
13
Dim X As Byte
14
Dim Tmp As Byte
15
Y = 1
16
X = 0
17
Dmx_werte(1) = 255
18

19

20

21

22

23

24
Do
25

26
If X = 0 Then
27
         Portc.3 = 1
28
         Portc.4 = 1
29
         Toggle Portc.3                                     'Reset
30
         Waitus 88
31
         Portb.0 = 1
32
         Waitms 10
33
         Print 0
34
         Waitus 20
35
         X = 1
36
         End If
37
  If X = 1 Then
38

39
         Portc.4 = 0
40
         Print Dmx_werte(y)
41
         Y = Y + 1
42
         Waitus 10
43
         If Y = 300 Then
44
         X = 0
45
         Y = 1
46
         End If
47
         End If
48

49

50

51
Loop
52
End

Danke im vorraus
Gast #4101939
Lesenswert?

Niclas schrieb:
> Hi,
> kann mir einer von euch sagen ob dieser DMX Sende Code funktionieren
> würde?
>
> $regfile = "8515def.dat"

Nein. 2 Stopbits lassen sich auf der HW-UART des µCs nicht einstellen. 
Hättest du kompiliert, hättest du gesehen, das da was nicht geht und 
hättest die Frage eventuell mit Angabe des µC anders gestellt.
Gast #4102002
Lesenswert?

@holger: Ich kann beides ein wenig nur weiß nicht mit welchem Programm 
ich weiterarbeiten soll? Bascom finde ich ist bei Uart viel einfacher?
@alle: Danke für euren Kommentare! Kann mir den vlt einer von euch sagen 
ob der Code mit einem atmega8 funktioniert?
Gast #4102017
Lesenswert?

Niclas schrieb:
> @alle: Danke für euren Kommentare! Kann mir den vlt einer von euch sagen
> ob der Code mit einem atmega8 funktioniert?

Bestimmt. Wenn jemand die DMX Gegenstelle hat, den Code kompiliert und 
auf 'nem ATMega8 ausprobiert. Ich bezweifele, daß, ohne es 
auszubrobieren, verläßliche Aussagen kommen.

Kompiliere es selbst und probier es selbst aus!
Persönliche Seite #4102178
Lesenswert?

Ich hatte mal einen Tastdimmer mit DMX Ausgang gebastelt. War eher Quick 
& Dirty, da es nur darum ging, den LED-Treiber zu testen. Lief mit dem 
Code problemlos.

'DMX Tastdimmer für einen Kanal
'Christian Kreuzer 19.02.2012

$regfile = "m16def.dat"
$crystal = 8000000

Ddra = 255
Porta = 0
Ddrb = 0
Portb = 255
Ddrc = &B00000011
Portc = &B11111100
Ddrd = &B00000010
Portd = &B11111111
'PD1 Ausgang zum RS485 Transmitter
'PD2 Taster Eingang

Taster Alias Pind.2
Ausgang Alias Portd.1

Const Timerwert = 99                                        '20ms Takt

Dim Wert As Byte                                            'Speicher 
des aktuellen Dimmwertes
Dim Tastdauer As Byte                                       'Zähler für 
die Tastdauer
Dim Sendezaehler As Byte                                    'Zähler für 
500ms Sendeintervall
Dim Dimmrichtung As Bit                                     '0 dunkler; 
1 heller
Dim I As Byte


Config Com1 = 250000 , Synchrone = 0 , Parity = Disabled , Stopbits = 2 
, Databits = 8
Ucr.3 = 0                                                   'Transmitter 
aus
Ucr.4 = 0                                                   'Receiver 
aus

Config Timer2 = Timer , Prescale = 1024                     '20ms Takt
Timer2 = Timerwert
On Timer2 20ms_takt_irq
Enable Timer2
Enable Interrupts

Do
   If Taster = 1 Then                                       'Taster 
losgelassen oder nicht gedückt
      If Tastdauer > 3 And Tastdauer <= 25 Then             'kurzer 
Tastendruck
         If Wert = 0 Then
            Wert = 255
         Else
            Wert = 0
         End If
         Gosub Senden
      End If
      If Tastdauer > 25 Then Toggle Dimmrichtung 
'Dimmrichtung umkehren nach langen Tastendruck
      If Wert = 0 Then Dimmrichtung = 1 
'Dimmrichtungsumkehr am Endpunkt
      If Wert = 255 Then Dimmrichtung = 0
      Tastdauer = 0
   End If
   If Taster = 0 And Tastdauer > 25 Then                    'langer 
Tastendruck
      If Dimmrichtung = 0 And Wert > 0 Then Wert = Wert - 1 'dunkler 
dimmen
      If Dimmrichtung = 1 And Wert < 255 Then Wert = Wert + 1 
'heller dimmen
      Sendezaehler = Sendezaehler + 3                       'öfter 
senden
   End If
   If Sendezaehler > 24 Then Gosub Senden                   '500ms 
Sendetakt
   Portc.1 = 0
   Power Idle
   Portc.1 = 1
Loop


Senden:
   'Break
   Ausgang = 0
   Portc.0 = 1
   For I = 0 To 60
      nop
   Next I
   Portc.0 = 0
   Ausgang = 1
   For I = 0 To 20
      nop
   Next I
   'Startbyte und Daten
   Ucr.3 = 1
   Printbin 0 ; Wert
   Ucr.3 = 0
   Ausgang = 1
   Sendezaehler = 0
   Porta = Wert
Return

20ms_takt_irq:
   Timer0 = Timerwert
   Sendezaehler = Sendezaehler + 1
   If Taster = 0 And Tastdauer < 255 Then Tastdauer = Tastdauer + 1 
'Taster gedrückt, Überlauf verhindern
Return

Christian_RX7

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren