[HOWTO] DMX-512 met een Picmicro

Pagina: 1 2 Laatste
Acties:
  • 25.513 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

Anoniem: 200590

Ik ben er mee bezig.
Trouwens. Sinds wanneer wordt er hier iemand afgekraakt die iedereen probeert te helpen???
Aangezien er toch een paar mensen mee bezig zijn, is het blijkbaar wel iets dat op ieders verlanglijstje staat.

Voor mensen die niet kunnen wachten en dus NU resultaat willen:
Geef geld uit: DMX---9Kanal-PWM-Interface

Voor de anderen: Nog even geduld.
Er wordt aan gewerkt.

En door de hele tijd te zeggen dat het niet werkt, of dat er errors inzitten komen we ook geen stap verder.

VRIENDELIJKE groeten...

[ Voor 4% gewijzigd door Anoniem: 200590 op 24-02-2007 14:58 ]


Acties:
  • 0 Henk 'm!

  • Thijsch
  • Registratie: Februari 2002
  • Laatst online: 24-07-2024
Hm vreemd, van enkelen hoor ik dat de code wél werkt, en bij anderen weer niet. Een vreemde zaak. Wil de code uberhaupt niet compileren of is er meer aan de hand?

Acties:
  • 0 Henk 'm!

  • Corpse2
  • Registratie: Januari 2004
  • Laatst online: 07-01-2023
ik heb het nog even getest, het asm bestandje dat in de openingspost staat krijg ik niet gecompileerd:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Warning[205] F:\DMXCODE2.ASM 5 : Found directive in column 1. (__CONFIG)
Message[302] F:\DMXCODE2.ASM 63 : Register in operand not in bank 0.  Ensure that bank bits are correct.
Message[302] F:\DMXCODE2.ASM 64 : Register in operand not in bank 0.  Ensure that bank bits are correct.
Message[302] F:\DMXCODE2.ASM 65 : Register in operand not in bank 0.  Ensure that bank bits are correct.
Message[302] F:\DMXCODE2.ASM 68 : Register in operand not in bank 0.  Ensure that bank bits are correct.
Message[302] F:\DMXCODE2.ASM 69 : Register in operand not in bank 0.  Ensure that bank bits are correct.
Message[302] F:\DMXCODE2.ASM 70 : Register in operand not in bank 0.  Ensure that bank bits are correct.
Message[302] F:\DMXCODE2.ASM 71 : Register in operand not in bank 0.  Ensure that bank bits are correct.
Message[302] F:\DMXCODE2.ASM 72 : Register in operand not in bank 0.  Ensure that bank bits are correct.
Message[305] F:\DMXCODE2.ASM 134 : Using default destination of 1 (file).
Error[113]   F:\DMXCODE2.ASM 153 : Symbol not previously defined (NO_DMX)
Error[128]   F:\DMXCODE2.ASM 153 : Missing argument(s)
Error[113]   F:\DMXCODE2.ASM 156 : Symbol not previously defined (NO_DMX)
Error[128]   F:\DMXCODE2.ASM 156 : Missing argument(s)
Message[305] F:\DMXCODE2.ASM 209 : Using default destination of 1 (file).
Message[305] F:\DMXCODE2.ASM 250 : Using default destination of 1 (file).


ik had ook een keer geprobeerd om gewoon de code uit de pdf te kopieren maar dat geeft een gelijkaardig resultaat. |:(

keep trying...


Acties:
  • 0 Henk 'm!

  • naftebakje
  • Registratie: Februari 2002
  • Laatst online: 15:09
Die "message[302] ...." fouten, mag je gewoon negeren, dat is een foutje van de compiler (hij kan niet controleren of de bankswitching goed is, en geeft dus altijd meldingen), kan je afleggen met een command ("errorlevel -302" aan het begin van je code zetten, als ik het goed heb).

Die paar met [305], dat is waarschijnlijk geen probleem, daar is de bestemming niet opgegeven en wordt de standaard bestemming gekozen, zal ws gewoon een "slordigheidje" zijn (niet dat het slecht is, het werkt gewoon dus is het niet noodzakelijk om de puntjes op de i te gaan zetten, kruipt al genoeg tijd in zo).

De error met NO_DMX kan opgelost worden door dat symbol bovenaan je code te definiëren, de [128]'s erna zijn waarschijnlijk ook doordat NO_DMX niet gedefiniëerd is.

En die eerste, [205], die los je op door een tab of spatie voor "__CONFIG" te zetten.


Allemaal niet zo moeilijk als je al wat ervaring met MPLAB hebt, mss daardoor dat enkelingen het al werkend hebben gekregen. Kijk eens wat je kan doen met deze uitleg, en laat het weten als het werkt hé ;)

[ Voor 11% gewijzigd door naftebakje op 24-02-2007 21:35 ]

Als de boer zijn koeien kust, zijn ze jarig wees gerust. Varkens op een landingsbaan, leiden nooit een lang bestaan. Als de boer zich met stront wast, zijn zijn hersens aangetast. Als het hooi is in de schuur, zit het wijf bij den gebuur.


Acties:
  • 0 Henk 'm!

  • _ferry_
  • Registratie: Januari 2002
  • Niet online

_ferry_

Moderator Tweaking

Nipple Tweaker

Ik heb de code niet doorgelezen, maar iemand op MSN vertelde tegen mij dat er ergens __CONFIG staat, maar dat dit in kleine letters hoorde te zijn, en dat hij er daarom over struikelde. Geen idee of dat het is, ik vertel alleen maar wat hij zei :P

Acties:
  • 0 Henk 'm!

  • Corpse2
  • Registratie: Januari 2004
  • Laatst online: 07-01-2023
een beetje terug in deze thread had ik ook al enkele van die warnings weggekregen (hetgeen _ferry_ naar verwijst en ongeveer de dingen die naftebakje zegt) maar hetgeen ik hier net gezet heb was om aan te geven wat het probleem met de huidige code is omdat Thijsch erachter vroeg.

Een andere gebruiker had NO_DMX als iets gedefinieerd, maar ik weet effe niet meer wat

[ Voor 4% gewijzigd door Corpse2 op 25-02-2007 02:24 ]

keep trying...


Acties:
  • 0 Henk 'm!

Anoniem: 204278

hey friends.
is it possible to dmx512 receive code in picbasicpro ?

[ Voor 97% gewijzigd door Anoniem: 204278 op 17-06-2007 14:54 . Reden: edit ]


Acties:
  • 0 Henk 'm!

Anoniem: 214712

ik had een error omdat Offset niet gekend was...
Ik heb die voor te testen gedefinieerd als #DEFINE Offset DMX_reg,5
nu krijg ik errors op elke komma achter offset...

iemand raad?

ik kom van 109 errors, heb er nu nog 8 nog ff dus :)
*******************************************
edit: heb men errors eruit gekregen en heb het kunnen compileren en programmereren enzo...

hier vind ge tijdelijk mennen hex-file als ge der iets me kunt doen...

http://users.pandora.be/reinhardvoorspoels/rgb.HEX

heb het nog niet zelf getest maar misschien dat sommigen hier al iets me zijn...

[ Voor 42% gewijzigd door Anoniem: 214712 op 02-04-2007 21:32 . Reden: update ]


Acties:
  • 0 Henk 'm!

  • nonkeldw
  • Registratie: Maart 2007
  • Laatst online: 15-07-2024
Hallo ik ben nu ook aan het programmeren geslagen

nu heb ik al wat aan het definerne geweest da lukt me .
nu wil ik voor het dmx adress in te stellen de HEF4014 gebruiken (8bit schift register)
nu weet ik wel hoe dat ding ongeveer werkt
dit stuurt 8 bitten uit dit moet men pic opslaan en rekene dat hij pas van af dat adress mag luisteren
nu hoe doe ik dat ?

Acties:
  • 0 Henk 'm!

Anoniem: 204278

İt is nice code

[ Voor 94% gewijzigd door Anoniem: 204278 op 17-06-2007 14:53 ]


Acties:
  • 0 Henk 'm!

  • M14
  • Registratie: Januari 2002
  • Laatst online: 11:55

M14

Ik ben nu ook een tijdje bezig geweest om DMX binnen te krijgen op een pic16F877A (20Mhz kristal), maar zonder succes.

Hier een korte situatieschets: Op PORTC bit 7 zit de usart-receiver, waar het signaal binnen komt. Op PORTD zitten 8 leds en op PORTB zitten 8 dipswitches aangesloten.

De volgende code heb ik in MikroC geschreven:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
unsigned int teller=0, i;
unsigned char kanaal=0, nutteloos, brk=0;

void init_usart()
{
TRISC = 0xFF;

SPBRG = 0x04;
TXSTA.BRGH = 1;

TXSTA.SYNC = 0;
PIE1=0;
PIE1.RCIE = 1;
RCSTA.RX9 = 1;

nutteloos=RCREG;
nutteloos=RCREG;
nutteloos=RCREG;

RCSTA.CREN = 1;
RCSTA.SPEN = 1;


INTCON.PEIE=1;
INTCON.GIE=1;
}




void interrupt()
{

if (PIR1.RCIF)
  {
  if (RCSTA.OERR)
     {
     PORTD=0xCC;                 // Indien Overrun error leduitgang is 0xCC
     RCSTA.SPEN=0;
     RCSTA.SPEN=1;
     nutteloos=RCREG;
     nutteloos=RCREG;
     nutteloos=RCREG;
     teller=0;
     brk=0;
     }
     
  else
     {
     if (RCSTA.FERR)
        {
        PORTD=0xFF;              // Indien Frame error leduitgang is 0xFF
        nutteloos=RCREG;
        teller=0;
        brk=0xFF;
        }
     else
        {
        PORTD=0xAA;              // Indien er data binnen komt leduitgang 0xAA
        if (brk==0xFF)
           {
           if (teller==1) kanaal = RCREG;
           else nutteloos = RCREG;
           teller++;
           }
        else
            {
            nutteloos = RCREG;
            teller=0;
            }
        }
     }
  PIR1.RCIF=0;
  }
}




void main ()
{

TRISB = 0xFF;
TRISD = 0x00;
init_usart();
PORTD=0;


while(1)
  {
 // PORTD=kanaal;
  }
}


Op het moment is het de bedoeling dat alleen kanaal 1 wordt uitgelezen. Naar startcode oid wordt nog niet gekeken. Ook wordt er nog niks gedaan met addresseren.

Het probleem is dat er op een of andere manier continue een frame-error optreed. Hier ben ik achter gekomen door de led's in de interrupt aan te sturen, zie code. Zodra deze code op de uC draait en er DMX wordt uitgestuurd gaan de 8 led's continue branden zonder te knipperen ofzo.

Wanneer ik in de interrupt de 3 regels weg haal waarin PORTD wordt aangestuurd en in de while-loop van de main PORTD=kanaal; uitvoer begint de 8'ste led zonder enige regelmaat te knipperen :?.

Wat doe ik hier fout?

[EDIT]
Damn, zeer stomme fout gemaakt. Code werkt gewoon ....... In het printje wat ik een hele tijd geleden heb gemaakt met een SN75176 + buffer-ic zit de fout. + en - waren omgedraait ..... Hier heb ik gewoon meer dan 4 dagen naar zitten zoeken. Maar goed, het werkt :).

[ Voor 5% gewijzigd door M14 op 22-05-2007 00:25 ]

Mess with the best, Die like the rest
There is no such thing as Society
There are 2 kinds of people: Snipers and their targets
Never run for a sniper ... you only die tired :)


Acties:
  • 0 Henk 'm!

  • Danjel
  • Registratie: April 2004
  • Laatst online: 21:02
Hoe kunnen jullie aan de hand van het schema bepalen welke exacte onderdelen jullie nodig hebben voor het printje? Ik zie dat er niet bij staan namelijk.

Acties:
  • 0 Henk 'm!

  • nonkeldw
  • Registratie: Maart 2007
  • Laatst online: 15-07-2024
Heeft iemand dit programma van howto nu al werkend gekregen?


of hebben jullie een paar foutjes gevonden ?
ik heb al zo wat van alles aaagepast maar niets helpt :(

Acties:
  • 0 Henk 'm!

  • Bastiaan V
  • Registratie: Juni 2005
  • Niet online

Bastiaan V

Tux's lil' helper

Het lijkt er op dat de NO_DMX var helemaal niergens geset werd. heb daarom de 2 btf's weggehaald (NO_DMX zou altijd 0 zijn) en de boel compileerd.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
;4 chan DMX, PWM output
;On  RB5, RB6, RB7, RA3
;Thijs Assies

    __CONFIG        _CP_OFF & _PWRTE_ON & _WDT_OFF & _HS_OSC  & _LVP_OFF
    list    P=16F628A
#INCLUDE <P16F628a.INC>

#DEFINE OUT1    PORTB,5
#DEFINE OUT2    PORTB,6
#DEFINE OUT3    PORTB,7
#DEFINE OUT4    PORTA,3
#DEFINE RCLED   PORTB,3         ;green led

#DEFINE RX      PORTB,1
#DEFINE ERRLED  PORTB,4         ;red led

#DEFINE BREAK           DMX_reg,0
#DEFINE STARTCODE       DMX_reg,1
#DEFINE MOVED           DMX_reg,2
#DEFINE ADDR9           DMX_reg,3
#DEFINE RC9             DMX_reg,4

DMX_reg         EQU     020h
Reg1            EQU     021h
Reg2            EQU     022h
Reg3            EQU     023h
Reg4            EQU     024h
W_SAVE          EQU     026h
S_SAVE          EQU     027h
P_SAVE          EQU     028h
pwmcounter      EQU     029h
flag            EQU     02Ah
D_ADDR          EQU     02Bh
temp            EQU     02Ch
R_ADDR          EQU     02Dh
Offset          EQU     02Eh
temp2           EQU     02Fh



    ORG     00h
    GOTO    INIT            ;Initialize PIC

    ORG     04h             ;Interrupt vector
    MOVWF   W_SAVE          ;save context,
    MOVF    STATUS,W        ;save  STATUS, PCLATH & W
    MOVWF   S_SAVE
    MOVF    PCLATH,W
    MOVWF   P_SAVE  
    GOTO    INTHANDLER


INIT

    MOVLW   0x07            ;turn analog comparators off
    MOVWF   CMCON
    CLRF    PORTA
    CLRF    PORTB

    BSF     STATUS,RP0      ;Select Bank1   

    CLRF    TRISA           ;porta output
    CLRF    TRISB           ;portb output
    BSF     TRISB,1         ;B1 input (UART Recieve)

    MOVLW   04h
    MOVWF   SPBRG           ;Set baud rate
    BSF     TXSTA,BRGH      ;high speed
    BCF     TXSTA,SYNC      ;Async connection
    CLRF    PIE1            ;clear other interrupts
    BSF     PIE1,RCIE       ;Set recieve interrupt
    BCF     STATUS,RP0      ;Return to bank0

    BSF     RCSTA,RX9       ;Enable 9bit data

    MOVF    RCREG,W         ;clear RCREG FIFO
    MOVF    RCREG,W
    MOVF    RCREG,W   

    BSF     RCSTA,CREN      ;Enable recieve
    BSF     RCSTA,SPEN      ;Enable UART
    BSF     INTCON,PEIE     ;Enable interrupts
    BSF     INTCON,GIE

    BCF     RCLED           ;because RA4 is open drain, set means NOT on
    BCF     ERRLED

    CLRF    Reg1
    CLRF    Reg2
    CLRF    Reg3
    CLRF    Reg4
    CLRF    D_ADDR          ;set our dmx adress to 0
    BCF     ADDR9       

    GOTO    MAIN            ;Goto   Main Program


MAIN
    BCF     RCLED
    BCF     ERRLED
    MOVLW   0FFh
    MOVWF   pwmcounter
    BCF     OUT1
    BCF     OUT2
    BCF     OUT3
    BCF     OUT4
    CALL    PWM_CYCLE
    
    GOTO    MAIN


PWM_CYCLE
    MOVF    Reg1,W
    XORWF   pwmcounter,W
    BTFSC   STATUS,Z
    BSF     OUT1

    MOVF    Reg2,W
    XORWF   pwmcounter,W
    BTFSC   STATUS,Z
    BSF     OUT2

    MOVF    Reg3,W
    XORWF   pwmcounter,W
    BTFSC   STATUS,Z
    BSF     OUT3

    MOVF    Reg4,W
    XORWF   pwmcounter,W
    BTFSC   STATUS,Z
    BSF     OUT4

    DECFSZ  pwmcounter,W
    GOTO    PWM_CYCLE
    RETURN



INTRETURN
    MOVF    P_SAVE,W        ;restore context
    MOVWF   PCLATH
    MOVF    S_SAVE,W
    MOVWF   STATUS
    SWAPF   W_SAVE,F
    SWAPF   W_SAVE,W            
    RETFIE

INTHANDLER
    BTFSS   PIR1,RCIF
    GOTO    INTRETURN
    GOTO    DMX

DMX
    BSF     ERRLED
    BTFSC   RCSTA,OERR
    GOTO    OVERRUN

    BTFSC   RCSTA,FERR      ;Check for framing error
    GOTO    FRAME
    
    BTFSS   BREAK           ;check if break has passed
    GOTO    RET 
    
    BTFSS   STARTCODE       ;has a startcode passed ?
    GOTO    SC              ;yes: go check for valid startcode

    BTFSC   STARTCODE
    GOTO    CHANNEL
    
RET
    MOVF    RCREG,W
    GOTO    INTRETURN

OVERRUN
    BCF     RCSTA,SPEN
    BSF     RCSTA,SPEN
    MOVF    RCREG,W
    BSF     ERRLED
    GOTO    LAST

FRAME
    BCF     BREAK
    BCF     STARTCODE
    BCF     RC9
    CLRF    R_ADDR
    CLRF    Offset
    BTFSS   RCSTA,RX9D
    BSF     BREAK
        
    MOVF    RCREG,W
    GOTO    INTRETURN

SC
    MOVF    RCREG,W
    XORLW   00h
    BTFSC   STATUS,Z
    BSF     STARTCODE
    GOTO    INTRETURN

INCREASE
    INCF    R_ADDR,W
    BTFSC   STATUS,Z
    BSF     RC9 
    RETURN

CHANNEL

    MOVF    Offset,W
    XORLW   00h         ;check if offset != 0
    BTFSS   STATUS,Z
    GOTO    CHAN

    MOVF    R_ADDR,W    ;else: check if chans match
    XORWF   D_ADDR,W
    BTFSC   STATUS,Z
    GOTO    NINTH       ;if so: check for 9th bit

    CALL    INCREASE
    GOTO    RET     ;if not: just return from interrupt

NINTH
    BTFSC   ADDR9
    GOTO    TRUE
    MOVF    RCREG,W
    GOTO    FALSE

TRUE        ;our 9th bit is set
    BTFSC   RC9
    GOTO    CHAN
    CALL    INCREASE
    GOTO    RET

FALSE
    BTFSS   RC9
    GOTO    CHAN
    CALL    INCREASE
    GOTO    RET


CHAN
;   BCF     RCLED
    INCF    Offset,W
    MOVF    Offset,W
    XORLW   01h         ;check if count = 0
    BTFSC   STATUS,Z
    GOTO    CHAN1

    MOVF    Offset,W
    XORLW   02h
    BTFSC   STATUS,Z
    GOTO    CHAN2

    MOVF    Offset,W
    XORLW   03h
    BTFSC   STATUS,Z
    GOTO    CHAN3

    MOVF    Offset,W
    XORLW   04h
    BTFSC   STATUS,Z
    GOTO    CHAN4

    MOVF    Offset,W
    XORLW   05h
    BTFSC   STATUS,Z
    GOTO    LAST


CHAN1
    MOVF    RCREG,W
    MOVWF   Reg1
    CALL    INCREASE
    GOTO    INTRETURN
CHAN2
    MOVF    RCREG,W
    MOVWF   Reg2
    CALL    INCREASE
    GOTO    INTRETURN
CHAN3
    MOVF    RCREG,W
    MOVWF   Reg3
    CALL    INCREASE
    GOTO    INTRETURN
CHAN4
    MOVF    RCREG,W
    MOVWF   Reg4
    CALL    INCREASE
    GOTO    INTRETURN



LAST

    BCF     BREAK
    BCF     STARTCODE
    CLRF    Offset
    GOTO    INTRETURN   
    
    END


ik heb het nog niet door kunnen testen (geen dmx invoer app |:( )

Acties:
  • 0 Henk 'm!

  • Mike2k
  • Registratie: Mei 2002
  • Laatst online: 23-05 11:17

Mike2k

Zone grote vuurbal jonge! BAM!

Dit is wel een ontzettende gravekick maar het hoort hier wel thuis volgens mij...

Ik ben op dit moment bezig met het prototypen van een led array van 48 smd leds. Deze leds wil ik aansturen middels dmx. Ik heb al een MAX485 chip. Daar komt nog een PIC bij.

Nu ben ik nog opzoek naar de FET's om de stroom van die ledjes aan te kunnen. Met 20 mA en 48 leds komt het totaal op 960mA.

Dat betekent dat ik genoeg heb aan een 5V 1A logic level FET. Nu heb ik er een gevonden en wil graag jullie mening hierover:
- http://www.irf.com/product-info/datasheets/data/ips021l.pdf

Op pagina 2 van die datasheet staat het volgende:

Recommended Operating Conditions
These values are given for a quick design. For operation outside these conditions, please consult the application notes.

V IH High level input voltage 4v 6v
V IL Low level input voltage 0v 0.5v
Continuous drain current — 1.4 A

Dat zou toch de goede moeten zijn zonder dat ik teveel 'over' heb ?

You definitely rate about a 9.0 on my weird-shit-o-meter
Chuck Norris doesn't dial the wrong number. You answer the wrong phone.


Acties:
  • 0 Henk 'm!

  • lemming_nl
  • Registratie: Juli 2004
  • Niet online
De specs zijn voldoende. Het is een luxe mosfet met beveiligingen enzo ingebakken. Op zich werkt een BUZ11 ook prima. 'Over' hebben lijkt me geen probleem, gewoon kijken wat goedkoop is en of je behoefte hebt aan beveiligingen.

Geluk is een weerloos oud vrouwtje, alleen op straat met een bom geld

Pagina: 1 2 Laatste