daar komt zo een soort van clock uit en nog wat 'brol'
daar komt zo een soort van clock uit en nog wat 'brol'
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
__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
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
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.
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?
__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
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.
de link
http://gathering.tweakers.net/forum/list_messages/1124899/0
waar je de uitleg kan vinden
ik gegin de goede weg uit te gaan
met dit stukje code werk al de led die de break detecteert
__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
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 ?
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 ?
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).
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
Moet ik nou echt de datasheet voorkauwen?
Komtie (voor asynchroon, SYNC=0):
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:
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.
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:
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
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
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
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
dit valt denkt ik wel te realizeren
ik denk makelijker als in asm
Maar ik ken niet echt veel van basic
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
Op 9 juli 2007 19:27:30 schreef nonkel_dw:
Hallodit is een prototype van een moving head in ontwerp:p
NU gaan we hier maar verder met het project moving headhttp://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