Qual o problema nesses códigos?

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

Qual o problema nesses códigos?

Mensagempor ÁgioFelipe » 16 Out 2009 15:26

Pessoal, escrevi esses dois programas (C e assembly) usando o PWM, os dois funcionam no Proteus mas no protoboard não. O problema não está no circuito do protoboard pois no programa em C coloquei também para piscar um LED em RB0 e o LED realmente pisca na prática mas o PWM não funciona.

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
list p=16f877A
include p16f877A.inc

__CONFIG _CP_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC


clrf PORTC

bsf STATUS,RP0
clrf TRISC

bcf STATUS,RP0

bsf T2CON,T2CKPS1
bsf T2CON,T2CKPS0

bsf CCP1CON,.3 ;Liga o modo PWM1
bsf CCP1CON,.2

movlw .125 ;Valor do PWM
movwf CCPR1L

goto $


end
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

#include <16F877A.h>
#use delay(clock=4000000)
#fuses NOWDT,XT,PUT,NOPROTECT,NODEBUG,BROWNOUT,NOLVP,NOCPD,NOWRT

main()
{

setup_ccp1(ccp_pwm);
set_pwm1_duty(125);

while(true)
{
output_high(PIN_B0);
delay_ms(500);
output_low(PIN_B0);
delay_ms(500);
}
}
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ÁgioFelipe
Word
 
Mensagens: 626
Registrado em: 27 Out 2006 20:04

Mensagempor renatokodaira » 16 Out 2009 16:48

Precisa configurar o registrador PR2 que define qual o período do sinal PWM junto com o prescaler do Timer2.

Evite usar dois comandos de modificação de bits de mesmo registrador em sequência pois pode ocorrer problema de read-modify-write. Coloque uma instrução nop entre elas (bsf).
renatokodaira
Byte
 
Mensagens: 402
Registrado em: 11 Out 2006 15:15

Mensagempor vtrx » 16 Out 2009 18:35

Para evitar usar NOPs,voce pode configurar tudo de uma só vez;
...
MOVLW B'00000011'
MOVWF T2CON
...
Avatar do usuário
vtrx
Dword
 
Mensagens: 2240
Registrado em: 20 Abr 2008 21:01

Mensagempor ÁgioFelipe » 16 Out 2009 22:50

Mas pq eles funcionam no Proteus?
Outra coisa, não entendi pq não posso modificar bits do mesmo file em sequencia, o que é read-modify-write?
ÁgioFelipe
Word
 
Mensagens: 626
Registrado em: 27 Out 2006 20:04

Mensagempor vtrx » 16 Out 2009 23:12

O Proteus é 'virtual' onde tudo é possível,ja na prática a coisa muda mesmo.
Voce pode modificar os Bits do mesmo registro sequencialmente desde que seja ou só leitura ou só escrita,pois ler um estado e logo em seguida escrever,pode não funcionar pois a estrurura interna do Pic usa 'latch' nas portas,(entradas e saidas),e isso gera um atraso '.Não vejo problema em setar ou zerar bits sequencialmente em Registros internos,apenas as portas deve-se tomar cuidado.
'Read-Modify-write',é justamente essa sequencia que falei.
Avatar do usuário
vtrx
Dword
 
Mensagens: 2240
Registrado em: 20 Abr 2008 21:01

Mensagempor Djalma Toledo Rodrigues » 16 Out 2009 23:55

Toda Instrução é executada no Acumulador (W)


Então Instruções de Bit:

Read ---> Lê, copia para o Acumulador
Modify ---> Modifica o Bit
Write -----> Escreve, devolve o conteúdo modificado ao Registro.

Interessante é que o Acumulador não é, no PIC, um registro endereçável.
.
Avatar do usuário
Djalma Toledo Rodrigues
Dword
 
Mensagens: 2334
Registrado em: 03 Ago 2008 13:22


Voltar para PIC

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

x