Dmx ontvangen (uart) 16F628A

daar komt zo een soort van clock uit en nog wat 'brol'

nonkel dw

Ja dan doe je iets fout he? geef es wat meer details, code die je gebruikt hebt (en ik heb een hekel aan zoeken, dus kom niet aan met het staat daar en daar)

En wat je denkt dat eruit moet komen (m.a.w. wat je wilt dat het doet)

er zou een pwm moeten uitkomen voor een led te besturen

code:




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

#DEFINE	OUT1	PORTA,1	;RA0 pin17 
#DEFINE	OUT2	PORTA,2	;RA1 pin18
#DEFINE	OUT3	PORTA,3	;RA2 pin1
#DEFINE	OUT4	PORTA,4	;RA3 pin2
#DEFINE	OUT5	PORTA,5	;RA4 pin3
#DEFINE	OUT6	PORTB,1	;RB0 pin6
#DEFINE	OUT7	PORTB,3	;RB2 pin8
#DEFINE	OUT8	PORTB,4	;RB3 pin9
#DEFINE	OUT9	PORTB,5	;RB4 pin10
#DEFINE	RCLED	PORTB,6	;RB5 pin11 - green led

#DEFINE	RX	PORTB,1	;RB1 pin7
#DEFINE	ERRLED	PORTB,7	;RB6 pin12 - 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
Reg5	EQU	025h
Reg6	EQU	026h
Reg7	EQU	027h
Reg8	EQU	028h
Reg9	EQU	029h
Count	EQU	030h
W_SAVE	EQU	031h
S_SAVE	EQU	032h
P_SAVE	EQU	033h
pwmcounter	EQU	034h
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
BCF	ERRLED

CLRF	Reg1
CLRF	Reg2
CLRF	Reg3
CLRF	Reg4
CLRF	Reg5
CLRF	Reg6
CLRF	Reg7
CLRF	Reg8
CLRF	Reg9
CLRF	D_ADDR	;set our dmx adress to 0 (mogelijkheid voor dipswitch???)
BCF	ADDR9

GOTO	MAIN	;Goto   Main Program

MAIN 
BCF	RCLED
BCF	ERRLED
MOVLW	0FFh
MOVWF	pwmcounter
BCF	OUT1 
BCF	OUT2
BCF	OUT3
BCF	OUT4
BCF	OUT5
BCF	OUT6
BCF	OUT7
BCF	OUT8
BCF	OUT9

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
MOVF	Reg5,W
XORWF	pwmcounter,W
BTFSC	STATUS,Z
BSF	OUT5
MOVF	Reg6,W
XORWF	pwmcounter,W
BTFSC	STATUS,Z
BSF	OUT6
MOVF	Reg7,W
XORWF	pwmcounter,W
BTFSC	STATUS,Z
BSF	OUT7
MOVF	Reg8,W
XORWF	pwmcounter,W
BTFSC	STATUS,Z
BSF	OUT8
MOVF	Reg9,W
XORWF	pwmcounter,W
BTFSC	STATUS,Z
BSF	OUT9

DECFSZ	pwmcounter
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
GOTO 	FRAME

BTFSS 	BREAK
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	
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 
INCF	Offset
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	CHAN5
MOVF	Offset,W
XORLW	06h
BTFSC	STATUS,Z
GOTO	CHAN6
MOVF	Offset,W
XORLW	07h
BTFSC	STATUS,Z
GOTO	CHAN7
MOVF	Offset,W
XORLW	08h
BTFSC	STATUS,Z
GOTO	CHAN8
MOVF	Offset,W
XORLW	09h
BTFSC	STATUS,Z
GOTO	CHAN9

MOVF	Offset,W
XORLW	10h	; was 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
CHAN5
MOVF	RCREG,W
MOVWF	Reg5
CALL	INCREASE
GOTO	INTRETURN
CHAN6
MOVF	RCREG,W
MOVWF	Reg6
CALL	INCREASE
GOTO	INTRETURN
CHAN7
MOVF	RCREG,W
MOVWF	Reg7
CALL	INCREASE
GOTO	INTRETURN
CHAN8
MOVF	RCREG,W
MOVWF	Reg8
CALL	INCREASE
GOTO	INTRETURN
CHAN9
MOVF	RCREG,W
MOVWF	Reg9
CALL	INCREASE
GOTO	INTRETURN

LAST 

BCF	BREAK
BCF	STARTCODE
CLRF	Offset
GOTO	INTRETURN

END

Op elke pin komt zo een hopje 'brol' uit
dus zal het wel iets te maken hebben met de pwm

nonkel dw

Jeuj en dat laat een ledje (snel) knipperen?

Probeer es wat hier staat:
http://www.etv.tudelft.nl/vereeniging/commissies/klushok/download/FADE…

DAt laat een ledje met PWM knipperen

ik denk dat dit form bedoelt is om mensen te helpen I.p.v met mensen te lachen

nonkel dw

Mensen genoeg die je willen helpen, maar je moet je eens afvragen waarom de respons zo minimaal is. Zou het er misschien mee te maken kunnen hebben dat je de hele tijd een lap asm (grotendeels zonder commentaar) post en dan de vraag stelt 'zou dit kunnen werken', of je roept dat er een hoopje brol uit komt.
De foto's van je scope zijn niet alleen volledig out-of-focus, je vertelt er ook nog eens niet bij wat je nu precies aan het doen bent. Je meet een pen waar PWM voor een led op zou moeten staan. Wat probeer je en wat lukt er niet? Laat eens zien op welke manier je aan het foutzoeken bent.

Wees dus eens meer specifiek dan een lap code en de mededeling dat het niet doet wat je wilt.
Als je gewoon in 1 klap een werkend eindprodukt wil hebben kan dat ook: ga naar de winkel.

If you want to succeed, double your failure rate.

Op 28 juni 2007 23:48:45 schreef nonkel_dw:
ik denk dat dit form bedoelt is om mensen te helpen I.p.v met mensen te lachen

Ik lach je niet uit, maar ik geef je wat code die pcies doet wat jij wilt.... Dus ga die code compilen en stop hem in je processor.

Voor de rest ben ik het wel eens met de reactie van Jochem_S

Ik heb er nog wat meer uitleg bij geschreven voor zo ver ik het kan volgen

deze code komt ergens van het net
maar ik vind deze code toch wat ingewikkeld:( (kan dit niet eenvoudiger?)
het probleem is dat de error led en rc led's ook niet op lichten en dat uit de pwm signalen iets zeer raars uit komen
ik heb men µc al op 20mhz en nu hangt hij op4mhz
maar de fouten blijven

hier de code

fout zoeken :
ik ben de hele code eens aan het na kijken op fouten maar kan zo direct niets vinden

bestaat er geen mogelijkheid omdit korter te schrijven?

code:



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

#DEFINE	OUT1	PORTA,1	;RA0 pin17 
#DEFINE	OUT2	PORTA,2	;RA1 pin18
#DEFINE	OUT3	PORTA,3	;RA2 pin1
#DEFINE	OUT4	PORTA,4	;RA3 pin2
#DEFINE	OUT5	PORTA,5	;RA4 pin3
#DEFINE	OUT6	PORTB,1	;RB0 pin6
#DEFINE	OUT7	PORTB,3	;RB2 pin8
#DEFINE	OUT8	PORTB,4	;RB3 pin9
#DEFINE	OUT9	PORTB,5	;RB4 pin10
#DEFINE	RCLED	PORTB,6	;RB5 pin11 - green led

#DEFINE	RX	PORTB,1	;RB1 pin7
#DEFINE	ERRLED	PORTB,7	;RB6 pin12 - 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			;de geheugen plaatsen
Reg1	EQU	021h
Reg2	EQU	022h
Reg3	EQU	023h
Reg4	EQU	024h
Reg5	EQU	025h
Reg6	EQU	026h
Reg7	EQU	027h
Reg8	EQU	028h
Reg9	EQU	029h
Count	EQU	030h
W_SAVE	EQU	031h
S_SAVE	EQU	032h
P_SAVE	EQU	033h
pwmcounter	EQU	034h
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
BCF	ERRLED

CLRF	Reg1		;alles clearen
CLRF	Reg2
CLRF	Reg3
CLRF	Reg4

CLRF	D_ADDR	;set our dmx adress to 0 (mogelijkheid voor dipswitch???)
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				;pwm stuuring voor de poorten
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
MOVF	Reg5,W
XORWF	pwmcounter,W
BTFSC	STATUS,Z


DECFSZ	pwmcounter
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				; een fout zet deze aan

BTFSC	RCSTA,OERR
GOTO	OVERRUN

BTFSC 	RCSTA,FERR
GOTO 	FRAME

BTFSS 	BREAK
GOTO 	RET
 
BTFSS	STARTCODE	;de start code isze gepaseerd
 
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	;Ik weet niet hoe je dit 8 maal kan laten uitvoeren. 9 kanalen)
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 
INCF	Offset
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	CHAN5
MOVF	Offset,W
XORLW	06h
BTFSC	STATUS,Z
GOTO	CHAN6
MOVF	Offset,W
XORLW	07h
BTFSC	STATUS,Z
GOTO	CHAN7
MOVF	Offset,W
XORLW	08h
BTFSC	STATUS,Z
GOTO	CHAN8
MOVF	Offset,W
XORLW	09h
BTFSC	STATUS,Z
GOTO	CHAN9

MOVF	Offset,W
XORLW	10h	; was 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
nonkel dw

En hop, weer een lap. Dit maal met de vraag of het niet korter geschreven kan worden. *zucht*

Als het je eigen code niet is, zeg eens waar hij op internet te vinden is? De vraag of je een 4 MHz of een 20 MHz kristal moet gebruiken staat daar vast ook ergens beantwoord. Aan de fuses (HS_OSC) te zien 20 MHz, tenzij je die zelf hebt aangepast.

If you want to succeed, double your failure rate.

ik gegin de goede weg uit te gaan :)

met dit stukje code werk al de led die de break detecteert

code:



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

#DEFINE	OUT1	PORTA,1	;RA0 pin17 
#DEFINE	OUT2	PORTA,2	;RA1 pin18
#DEFINE	OUT3	PORTA,3	;RA2 pin1
#DEFINE	OUT4	PORTA,4	;RA3 pin2
#DEFINE	OUT5	PORTA,5	;RA4 pin3
#DEFINE	OUT6	PORTB,1	;RB0 pin6
#DEFINE	OUT7	PORTB,3	;RB2 pin8
#DEFINE	OUT8	PORTB,4	;RB3 pin9
#DEFINE	OUT9	PORTB,5	;RB4 pin10
#DEFINE	RCLED	PORTB,6	;RB5 pin11 - green led

#DEFINE	RX	PORTB,1	;RB1 pin7
#DEFINE	ERRLED	PORTB,7	;RB6 pin12 - 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			;de geheugen plaatsen
Reg1	EQU	021h
Reg2	EQU	022h
Reg3	EQU	023h
Reg4	EQU	024h
Reg5	EQU	025h
Reg6	EQU	026h
Reg7	EQU	027h
Reg8	EQU	028h
Reg9	EQU	029h
Count	EQU	030h
W_SAVE	EQU	031h
S_SAVE	EQU	032h
P_SAVE	EQU	033h
pwmcounter	EQU	034h
flag	EQU	02Ah
D_ADDR	EQU	02Bh
temp	EQU	02Ch
R_ADDR	EQU	02Dh
Offset	EQU	02Eh
temp2	EQU	02Fh
delay	equ	35h
delay2	equ	36h
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


INIT 

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

BSF		STATUS,RP0	;Select Bank1
MOVLW	B'00000000'
MOVWF	TRISA	;porta output
MOVLW	b'00000010'	;portb output
MOVWF	TRISB

MOVLW	04h
MOVWF	SPBRG	;snelheid instellen
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
call	ver
BCF		ERRLED
call	ver

CLRF	Reg1		;alles clearen
CLRF	Reg2
CLRF	Reg3
CLRF	Reg4

CLRF	D_ADDR	;set our dmx adress to 0 (mogelijkheid voor dipswitch???)
BCF	ADDR9

GOTO	INIT	;Goto   Main Program


ver
	btfsc	delay,1
	goto	ver
ver2
	btfsc	delay,2
	goto	ver2
return
END

Nu even een vraag hoe kan ik zien waar de uart de ontvangen byts weg zet in welke file ?
Ik zie wel waar ze ge cleart worden maar niet waar ze weg geschreven worden

nonkel dw

Op 4 Mhz zul je nooit dmx kunnen maken. Dmx is 250 Kbaud. en dat is 4 usec. per bit. Op 4 Mhz haal je 1 usec. instructie. Dus met 4 instructies een kompleet bit ophalen en verzenden is best pittig !!

dus op20mhz de pic leggen

maar dan moet ik de uart terug uitrekenen
Maar daar kan ik niet aan uit ? :)

nonkel dw

Op 29 juni 2007 18:23:17 schreef mississippi:
Dus met 4 instructies een kompleet bit ophalen en verzenden is best pittig !!

Oh dat haal je ok nog geen eens, pics hebben 4 clock slagen/instructie nodig dus je deelt 4Mhz/4 dan heb je het aantal instructies die je kunt geven/seconde (1 MIPS dus)

ik kom ik aan het getal voor de uart in te stellen voor de snelheid van de seriele data ?

is er makelijke manier om te kijken of er bit op 1 staat
en dan een poort hoog te maken + het programma te laten lopen

Ik zou alle data dat er in map komt te staan in een register plaatsen
maar als hij een ontvangen heeft en weg gezet heeft moet hij de volgende ontvagende data in een andere map plaatsen?

nu laat ik men pic lopen op 20mhz nu kan ik onder de ontvanging van byts al berekeningen doen
maar nu moet ik op tijd terug zijn voor de volgende lading bits te ontvangen
kan met een interupt gebeuren ?
En hoe ?

nonkel dw

Op 1 juli 2007 13:34:43 schreef nonkel_dw:
ik kom ik aan het getal voor de uart in te stellen voor de snelheid van de seriele data ?

Formule staat in de datasheet. Maar ik vraag me af of, als de code bestaand is, die constanten niet al goed staan. Hij was voor 20 MHz, de baudrate voor DMX ligt vast, dus waarom zou jij specifiek nog veranderingen moeten maken?

Ik zag je een link van tweakers posten waar je volgens jou de uitleg kan krijgen. Als daar degene zit die de code heeft gemaakt, kun je specifieke vragen over die code dan niet daar stellen? Het lijkt me dat je daar veel sneller concrete antwoorden kan vinden (hoewel ik de link zelf niet bezocht heb moet ik zeggen).

If you want to succeed, double your failure rate.

ik heb daar al vragen gepost maar daar komt geen andwoord op :(

daarmee probeer ik hier de andwoorden op men vragen te vinden

Maar wat de bautrade betreft

Heb deze formule maar ik krijg deze nooit in men register geplaatst

SPBRG=(20000000/(64x250))-1 = 1249 binair = 10011100001
dit is 11 bit en dit mag maar 8 bit zijn voor in men register te plaatsen ?

daar mee de vraag :)

nonkel dw

Moet ik nou echt de datasheet voorkauwen?

Komtie (voor asynchroon, SYNC=0):

code:


BRGH=0
  Baud Rate = FOSC/(64(X+1))
BRGH=1
  Baud Rate = FOSC/(16(X+1))

X is de SPBRG, die wil je hebben. Dus makkelijker:

code:


BRGH=0
  X = (FOSC / (64*baudrate)) - 1
BRGH=1
  X = (FOSC / (16*baudrate)) - 1

Voor de eerste formule:
X = (20000000 / (64*250000)) - 1
= 0,25
Afronden naar 0, invullen in eerste formule: werkelijke baudrate: 312500 dus veel te veel afwijking.

Dan maar high-speed: BRGH=1
X = (20000000 / (16*250000)) - 1
= 4
Prachtig, komt precies uit, geen afwijking.

Oh, by the way, nu je alle formules hopelijk snapt mag je de datasheet verder door gaan lezen, je komt dan vanzelf bij de kant-en-klare tabellen met baudrates en SPBRG waarden voor verschillende klokfrequenties. http://forum.voetbalzone.nl/images/smilies/whistle.gif

Op 3 juli 2007 10:17:42 schreef Jochem_S:
[...]
Maar ik vraag me af of, als de code bestaand is, die constanten niet al goed staan.

Zoals verwacht zie ik in de code die jij hierboven had neergezet:

code:

MOVLW	04h
MOVWF	SPBRG	;snelheid instellen

Dus dat staat allemaal goed. Snap je zelf nog wel waar je mee bezig bent?

[Bericht gewijzigd door Jochem op dinsdag 3 juli 2007 11:01:42

If you want to succeed, double your failure rate.
Shiptronic

Overleden

hier staat een handig programmatje om die waarden uit te rekenen:

http://www.mister-e.org/pages/utilitiespag.html

op deze site staan meer handige progjes!

veel plezier ermee

Wie de vraag stelt, zal met het antwoord moeten leren leven.

bedankt

Het kan mss zijn dat dit stomme vragen zijn maar dit is men eerste project met een UART en pwm en dergelijk

IK heb me eerst bezig gehouden met led's te sturen en dit lukt aardig dus altijd wat moeilijker :)

bedankt voor jullie andwoorden :)

nonkel dw

sorry dat ik hier kom tussenschuiven
Maar is dit ook te realizeren met picbasic want ik heb helemaal geen ervaring met asm en al wat ik van pic's al geprogt heb is met basic
ik heb al gezocht op internet maar dmx in basic vind ik niks bruikbaars

aan de hand van een voorbeeld kun je de oplosing zelf gemakkelijker vinden

dit valt denkt ik wel te realizeren
ik denk makelijker als in asm :)

Maar ik ken niet echt veel van basic

nonkel dw

Hallo

dit is een prototype van een moving head in ontwerp:p
NU gaan we hier maar verder met het project moving head

http://www.uploadarchief.net/files/download/dscn2091.jpg

de kop van de moving head

http://www.uploadarchief.net/files/download/dscn2089.jpg

de hele moving head

Heeft iemand sugesties dan zijn deze altijd welkom
of een idee hoe de steppers te sturen
of gobo's en lenzen

nonkel dw

Op 9 juli 2007 19:27:30 schreef nonkel_dw:
Hallo

dit is een prototype van een moving head in ontwerp:p
NU gaan we hier maar verder met het project moving head

http://www.uploadarchief.net/files/download/dscn2091.jpg

de kop van de moving head

http://www.uploadarchief.net/files/download/dscn2089.jpg

de hele moving head

Heeft iemand sugesties dan zijn deze altijd welkom
of een idee hoe de steppers te sturen
of gobo's en lenzen

Zie mijn stukje geschreven in Show Your Projects, basis van de movingheads qua beweging, home-ing etc. staat daar zow ongeveer wel in.

nu

hoe kan ik een stepper sturen
ik heb een print liggen voor step en dir deze zou ik dan ook gebruiken er voor

maar het probleem zit in de µc

dus al ik decimaal 255 geef dan gaat de stepper 255 steps naar links doen

maar bij de volgende cyclus heb ik nog maar 200 decimaal dan moet de stepper -55 steps hoe kan ik hem dat vertellen ?

door de oude waarde van de nieuwe afte trekken
maar hoe dan te programmeren ?
als deze naar recht gaat gaan moet deze ook nog een poort hoog maken (dir)
ik programmeer in asm :)

nonkel dw