Hoofdcategorieën
Topicacties

[HOWTO] DMX-512 met een Picmicro

Pagina: 1 2 3 4 5 last

Reageer Nieuw Topic
Berichten: 15
Reg. datum: 12 december 2006

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...

Spivi wijzigde dit bericht 24-02-2007 14:58 (4%)

 
Berichten: 2.002
Reg. datum: 22 februari 2002

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?

"wij spreken C alsof het in een natuurlijke taal is, we zoeken gewoon de formulering die past bij de betekenis die we in ons hoofd hebben"

Berichten: 151
Reg. datum: 20 januari 2004

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...

Berichten: 5.223
Reg. datum: 01 februari 2002

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é ;)

naftebakje wijzigde dit bericht 24-02-2007 21:35 (11%)

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.

veerboot met underscores

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

Voorzien van luchtgekoelde auto en watergekoelde PC....

Berichten: 151
Reg. datum: 20 januari 2004

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

Corpse2 wijzigde dit bericht 25-02-2007 02:24 (4%)

keep trying...

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

programmer07 wijzigde dit bericht 17-06-2007 14:54 (97%)
Reden: edit

 
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...

FaTaL_eRR wijzigde dit bericht 02-04-2007 21:32 (42%)
Reden: update

 
Berichten: 26
Reg. datum: 20 maart 2007

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 ?
 
İt is nice code

programmer07 wijzigde dit bericht 17-06-2007 14:53 (94%)

 
Berichten: 2.137
Reg. datum: 23 januari 2002

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 :).

M14 wijzigde dit bericht 22-05-2007 00:25 (5%)

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 :)

Powerkiting!

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.
 
Berichten: 26
Reg. datum: 20 maart 2007

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 :(
 
Tux's lil' helper
Berichten: 61
Reg. datum: 06 juni 2005

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 |:( )
 

Pagina: 1 2 3 4 5 last



VNU Media logo Powered by True

© 1998 - 2009 Tweakers.net - Alle rechten voorbehouden - Uw Privacy - Algemene Voorwaarden

Uitgever van: