TODOPIC
Simuladores, editores de PCB, etc => Simuladores de circuitos => Proteus ISIS => Mensaje iniciado por: migsantiago en 26 de Marzo de 2006, 20:42:00
-
Hola
Estaba haciendo un programa en el 16f877a y usé el código siguiente...
--------------------------------
#include "16f877a.h"
#use delay(clock=4000000) //4MHz
#fuses hs, nowdt,noput,nobrownout,nolvp,noprotect
#use fast_io (b)
#use fast_io (c)
#BYTE trisc = 0x87 //para cambiar estado TRISC
int16 duty_time;
void main(void)
{
duty_time=0x0034; //esto nunca cambia (13us)
set_tris_c(0x00); //todo salida
set_tris_b(0x00); //todo salida
setup_timer_2(T2_DIV_BY_1,25,1);
//PR2=25
set_pwm1_duty(duty_time);
//13us
setup_ccp1(CCP_PWM); //activa PWM
while(1)
{
delay_ms(1000); //espera 1s
set_tris_c(trisc|0x04); //pone a 1 bit 3, apaga pwm
delay_ms(1000); //espera otro 1s
set_tris_c(trisc&0xfb); //pone a 0 bit 3, prende pwm
}
}
-----------------------------------------
Este código funciona sobre el f877a físicamente bien. Es un PWM a 38kHz que está trabajando un segundo encendido y un segundo apagado. Esto lo logro habilitando o deshabilitando la salida RC2 desde el tris.
En proteus conecto un osciloscopio a CCP1 y lo pongo a trabajar. Es ahí donde surge el problema, no prende ni apaga cada segundo. Parece que proteus tiene una falla ya que no configura la terminal CCP1 como entrada y por lo tanto no deshabilita el PWM.
¿A alguien le sucede lo mismo?