Weet iemand hoe ik een PWM signaal uit de PIC16F870 kan krijgen.
Ik heb het stappenplan uit de datasheet gevolgd, maar ik krijg geen signaal.
Heeft iemand misschien een (voorbeeld)programma waarmee dit wel werkt.
Alvast bedankt
Ik maak mijn programma's in PICBASICPRO hierin is dat geen enkel probleem.Als je het in assembler wil dan moet ik afhaken.
Jonathan
"Theorie is alleen te rechtvaardigen als 'n vorm van praktijk. De praktijk staat niet terecht voor 't hooggerechtshof van de theorie" (Stephan Toulmin)
ik doe et zo in JAL
-- PWMprocedure
procedure fan ( byte in dutycycle, bit in fan_on ) is
f877_pr2 = 255
f877_ccpr1l = dutycycle
pin_c2_direction = output
f877_t2con = 0b_0000_0100
if fan_on == true then
f877_ccp1con = 0b_0011_1100
end if
if fan_on == false then
f877_ccp1con = 0b_0000_0000
pin_c2 = low
end if
end procedure
als je in asm daar een label voor zet en er telke male naar jump indien nodig moet dat ook lukken denk ik
als je de juiste registers de juiste benaming geeft
Bedankt voor je antwoord Sp3ci3S. Maar op 1 of andere manier gaat timer 2 bij mij niet lopen.
De code die ik nu heb staat hieronder. Op deze manier moet de pwm mode geinitialiseerd worden volgens de datasheet. De duty cycle = 50%
LIST P=PIC16F870
#INCLUDE p16f870.inc
ORG 00h
BSF STATUS,RP0
MOVLW 0FFh
MOVWF PR2
BCF STATUS,RP0
MOVLW 07Fh
MOVWF CCPR1L
MOVLW 030h
MOVWF CCP1CON
BSF STATUS,RP0
BCF TRISC,2
CLRF CCP1CON
BSF CCP1CON,CCP1M3
BSF CCP1CON,CCP1M2
BCF STATUS,RP0
CLRF T2CON
CLRF TMR2
BSF T2CON,TMR2ON
END
Jonathan
"Theorie is alleen te rechtvaardigen als 'n vorm van praktijk. De praktijk staat niet terecht voor 't hooggerechtshof van de theorie" (Stephan Toulmin)
Misschien zit ik er volkomen naast hoor.. Ben geen PIC gebruiker...
Maar bij de meeste microcontrollers worden de eerste adressen in RAM gebruikt voor wat calls die door hardware veroorzaakt worden, zoals RESET, IRQ (of hoe dat bij een PIC ook heet).
Kan het zijn dat het ding gewoon in het niets begint te runnen, aangezien je op adres 0 begint?
Bij een pic is het gebruikelijk (voor zover ik weet dan) dat je gewoon op adres 00h begint.
Ik heb het programma in een PIC simulator getest, en de commando's worden schijnbaar allemaal goed uitgevoerd, alleen timer 2 gaat niet lopen. Hierdoor wordt er geen PWM signaal op CCP1 gegenereerd.
Jonathan
"Theorie is alleen te rechtvaardigen als 'n vorm van praktijk. De praktijk staat niet terecht voor 't hooggerechtshof van de theorie" (Stephan Toulmin)
kheb hier gisteren in een ander topic een vraag over gesteld, en ik weet toevallig dat een deel instellingen van timer 2 (denk register PR2) zich in een andere bank bevind (bank2 dacht ik)
misschien ligt daar het probleem?
De instellingen van timer2 staan inderdaad in een andere bank ---> bank 1.
Maar dat had ik al zo geprogrammeerd 
Jonathan
"Theorie is alleen te rechtvaardigen als 'n vorm van praktijk. De praktijk staat niet terecht voor 't hooggerechtshof van de theorie" (Stephan Toulmin)
Op 13 februari 2004 13:16:12 schreef LLP:
De instellingen van timer2 staan inderdaad in een andere bank ---> bank 2.Maar dat had ik al zo geprogrammeerd
ok
alles terug naar bank nul gezet? (misschien nodig):)
Wiebo
For Every Existing Problem Exists a Solution, Just Try To Find It...
Op 13 februari 2004 09:40:57 schreef LLP:
LIST P=PIC16F870
#INCLUDE p16f870.incORG 00h
BSF STATUS,RP0
MOVLW 0FFh
MOVWF PR2
BCF STATUS,RP0
MOVLW 07Fh
MOVWF CCPR1L
MOVLW 030h
MOVWF CCP1CON
BSF STATUS,RP0
BCF TRISC,2
CLRF CCP1CON
BSF CCP1CON,CCP1M3
BSF CCP1CON,CCP1M2
BCF STATUS,RP0
CLRF T2CON
CLRF TMR2
BSF T2CON,TMR2ONEND
Volgens mij moet het dan dit zijn, want je zat in de verkeerde bank. Zie onderstaande:
LIST P=PIC16F870
#INCLUDE p16f870.inc
ORG 00h
BSF STATUS,RP0
MOVLW 0FFh
MOVWF PR2
BCF STATUS,RP0
MOVLW 07Fh
MOVWF CCPR1L
MOVLW 030h
MOVWF CCP1CON
BSF STATUS,RP0
BCF TRISC,2
BCF STATUS,RP0 ; Deze regel moet bijkomen
CLRF CCP1CON
BSF CCP1CON,CCP1M3
BSF CCP1CON,CCP1M2
; BCF STATUS,RP0 ; Deze regel moet weg
CLRF T2CON
CLRF TMR2
BSF T2CON,TMR2ON
Greeeetzzzz...
Iedereen bedankt voor de antwoorden. Ik krijg nu een signaal uit de PIC, maar om een of andere reden komt er altijd een signaal uit CCP1 met een dutycycle van 25%.
Weet iemand misschien een programmeervoorbeeld met de PIC 16F870, want op de site van microchip kan ik alleen maar voorbeelden van een PIC18xxx vinden.
Thanx...
Wiebo
For Every Existing Problem Exists a Solution, Just Try To Find It...
kijk misschien de timers eens na? Deze zijn gedeeld... Misschien gebruik je ergens een gedeelde timer...
Groeten, Wiebo

