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.

Thanx voor je tip mississippi, maar ik moet mijn programma in Assembler maken :-(

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

mmm ik zie het nie direct
kben geen crack in ASM

kzal deze avond eenskijken thuis

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.

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

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

Op 13 februari 2004 09:40:57 schreef LLP:
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

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

kijk misschien de timers eens na? Deze zijn gedeeld... Misschien gebruik je ergens een gedeelde timer...

Groeten, Wiebo