Puh, das war ein mächtiges Stück Arbeit, aber jetzt sollte das Timing passen. Mit einem AT-Mega8 und 8Mhz Quarz. Ausgang ist der Pin 13, an Pin 23 kann mit 0-5Volt der Kanal 1 gedimmt werden.
DA ich gerade kein DMX512 Gerät habe wärs nett, wenn das jemand testet.
Code:$regfile = "m8def.dat" $crystal = 8000000 Ddrc = &B00000000 Ddrd = &B11111111 Admux = &B01100000 Adcsra = &B11100110 Dim Temp As Word Dim Kanal As Byte Dim Puffer(65) As Word Dmxout Alias Portd.7 Declare Sub Dmx() Enable Interrupts Do Puffer(1) = Adch Call Dmx Loop Sub Dmx() Dmxout = 0 'Reset Waitus 88 Dmxout = 1 $asm .def Tmp1 = R17 'Marker .def Tmp2 = R18 ldi Tmp1, $15 Make_loop1: dec Tmp1 brne Make_loop1 nop $end Asm For Kanal = 0 To 32 '8 'Anzahl der Kanäle Temp = Puffer(kanal) '20 $asm .def Temp1 = R17 .def Temp2 = R18 .def Txbyte = R19 Putchar: LDS Txbyte, {Temp} '2 LDI Temp1 , 9 '1 COM Txbyte '1 SEC '1 Putchar0: BRCC Putchar1 '1 oder 2 nop '1 CBI Portd,Pd7 '2 RJMP putchar2 '2 Putchar1: SBI Portd,Pd7 '2 NOP '1 nop '1 Putchar2: LDI Temp2 , $7 '1 Sd_loop0: DEC Temp2 '1 BRNE Sd_loop0 ''''''''''''''''' nop LSR Txbyte '1 DEC Temp1 '1 BRNE putchar0 '1 oder 2 $end Asm nop nop nop Dmxout = 1 '2 $asm .def Tmp1 = R17 .def Tmp2 = R18 ldi Tmp1, $1b Make_loop0: dec Tmp1 brne Make_loop0 $end Asm '2Stoppbits und der Marker = 16µs Next Kanal '10 End Sub







Zitieren

Lesezeichen