Forum: Mikrocontroller und Digitale Elektronik Dmx mit Bascom generiert


von Niclas (Gast)


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

von kladde (Gast)


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.

von holger (Gast)


Lesenswert?

Beitrag "Atmel Studio 6 Problem"

Dabei waren wir gestern schon fast fertig.
Wieso jetzt Bascom?

von Bastler (Gast)


Lesenswert?

Komisch, daß das Atmel noch nicht weiß. Die behaupten immer noch, daß 
das Bit USBS im Register UCSRC zwischen 1 und 2 Stopbits umschaltet.

von kladde (Gast)


Lesenswert?

Bastler schrieb:
> Komisch, daß das Atmel noch nicht weiß. Die behaupten immer noch, daß
> das Bit USBS im Register UCSRC zwischen 1 und 2 Stopbits umschaltet.

Bei welchem µC? Beim AT90S8515 behauptet Atmel das nicht.

von holger (Gast)


Lesenswert?

>Bei welchem µC? Beim AT90S8515 behauptet Atmel das nicht.

In seinem anderen Thread benutzte er einen ATMega8.
Vermutlich greift er hier wieder mal ins Klo weil
er nicht weiss was er tut;)

von Niclas (Gast)


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?

von holger (Gast)


Lesenswert?

>Kann mir den vlt einer von euch sagen
>ob der Code mit einem atmega8 funktioniert?

Der kann nicht funktionieren. Und zwar deswegen:

$regfile = "8515def.dat"

Das ist kein ATMega8.

von holger (Gast)


Lesenswert?

>@holger: Ich kann beides ein wenig nur weiß nicht mit welchem Programm
>ich weiterarbeiten soll?

Bleib bei Ulrichs Code.

von Niclas (Gast)


Lesenswert?

Ich meinte auch wenn da atmega8 steht und angeschlossen ist.

von kladde (Gast)


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!

von Christian K. (christian_rx7) Benutzerseite


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

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.