No encuentro la configuración correcta para mi proyecto del 16F88

Hola a todos, soy nuevo en el foro (y autodidacta en electrónica) espero encontrar mas que respuestas buenos amigos :)

Saben estoy practicando con un PIC16F88, entonces hice mi proyecto en Proteus..... la cosa ed que le puse todo lo que según yo era necesario, pero me mandaba muchos errores. Le puse de todo (y pienso ahora que de mas) con tal de que no mandara error, la cosa es que me di cuenta que era la configuración del PIC, la he cambiado de todas las formas que he medio entendido.
hasta logras que ya no truene con los botones, (aunque de repente al apretar los botones truena, de repente no).
La cosa es que está medio estable, pero ahora no me da los pulsos de 5V y si le cambio, no funcionan los botones o truena a la primera.

Me podrían ayudar?
Que les envío primero Proteus o El Código (y como porque lo intente y no pude).
SALUDOS. ...
 
Comprime la simulación de Proteus con Winzip o Winrar y la sube al Foro.
El código lo subes como texto

Ok ...... Ahí van.... :unsure::unsure::unsure::unsure:
:apreton:

(y)

Código:
#include ".\Codigo.h"
#include ".\LCD18_1.c"
unsigned int16 CONP=0,i=0,h=0,DELP=4,DELT=10,BP=4,BT=10;
void main()
{

   setup_adc_ports(NO_ANALOGS|VSS_VDD);
   setup_adc(ADC_OFF);
   setup_spi(SPI_SS_DISABLED);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);
//Setup_Oscillator parameter not selected from Intr Oscillotar Config tab

   // TODO: USER CODE!!
   lcd_init();
DO
{
// BOTONES PULSOS
//   VALBOTM = input(BPMA0);
     
   if((input(BPMA0)== 1))   
      {
      DELP++;
      }
//  VALBOTM = input(BPME0);      
      
   if((input(BPME0)== 1))   
      {
      DELP--;
      }

      
 // BOTONES DE TIEMPO 
 
 //   VALBOTM = input(BTMA0);
   if((input(BTMA0)== 1))   
      {
      DELT++;
      }
      
//    VALBOTM = input(BTME0);
   if((input(BTME0)== 1))   
      {
      DELT--;
      }
   if(DELT== 0)   
      {
      DELT=1;
      }
   lcd_gotoxy(1,1);
   printf(LCD_PUTC,"P-%03Lu    T-%04Lu",DELP,DELT);    




for (h=1;h<=DELP;++h)
{
//     delay_ms(1);
     output_high(PIN_A7);
     for (i=1;i<=DELT;++i){
         delay_ms(1);
      }
     output_low(PIN_A7);
     for (i=1;i<=DELT;++i){
         delay_ms(1);
      }    
}


for (h=1;h<=DELP;++h)
{
//     delay_ms(1);
     output_high(PIN_A6);
     for (i=1;i<=DELT;++i){
         delay_ms(1);
      }
     output_high(PIN_A6);
     for (i=1;i<=DELT;++i){
         delay_ms(1);
      }
//     output_low(PIN_A6);    
}
     output_low(PIN_A6);
}   
WHILE (TRUE);


}
 

Adjuntos

  • Proteus.zip
    47.5 KB · Visitas: 10
  • Codigo.zip
    25.8 KB · Visitas: 8
  • Codigo.txt
    1.6 KB · Visitas: 4
Última edición por un moderador:
ahora no me da los pulsos de 5V y si le cambio, no funcionan
Estás usando el oscilador interno para poder usar los pines RA6 y RA7 como salidas, pero en la palabra de configuración estás usando oscilador LP y así no te va a funcionar.
Cambia la palabra de configuración del archivo Codigo.h por esta otra.
#fuses NOBROWNOUT, NOMCLR
#use delay(internal = 4MHz)

Con tan solo éstas dos líneas ya lo tendrás funcionando con el oscilador interno a 4MHz,
sin reset por bajo voltaje y sin reset por RA5.
Los fuses que faltan en #fuses los establecerá el compilador y son los requeridos.

También te recomiendo que en la simulación no trabajes de esa forma.
Para tener una mejor simulación del proyecto, tan solo usa resistencias, botones y el osciloscopio.
Deja todo eso de la batería, el regulador, los mosfets y etcétera, para el diagrama esquemático.

Suerte.
 
Estás usando el oscilador interno para poder usar los pines RA6 y RA7 como salidas, pero en la palabra de configuración estás usando oscilador LP y así no te va a funcionar.
Cambia la palabra de configuración del archivo Codigo.h por esta otra.
#fuses NOBROWNOUT, NOMCLR
#use delay(internal = 4MHz)

Con tan solo éstas dos líneas ya lo tendrás funcionando con el oscilador interno a 4MHz,
sin reset por bajo voltaje y sin reset por RA5.
Los fuses que faltan en #fuses los establecerá el compilador y son los requeridos.

También te recomiendo que en la simulación no trabajes de esa forma.
Para tener una mejor simulación del proyecto, tan solo usa resistencias, botones y el osciloscopio.
Deja todo eso de la batería, el regulador, los mosfets y etcétera, para el diagrama esquemático.

Suerte.








Muchas GRACIAS por responder.....

Hice los cambios que me sugeriste y..... no funcionó..... :confused: :eek:

Primer cambio...:unsure:

(descartada) // #FUSES LP //Internal RC Osc, no CLKOUT
(agregada) #fuses NOBROWNOUT, NOMCLR

Y abajo ....

(descartada) //#use delay(clock=4000000)
(agregada) #use delay(internal = 4MHz)

Y en Proteus truena en la linea siguiente:

for (h=1;h<=DELP;++h)
{
en esta ===> output_high(PIN_A7);
for (i=1;i<=DELT;++i){


Segundo cambio ....... :unsure:

En la misma configuración cambié A7 por A6 en toda la rutina y ya no truena al prender A7
Truena en el siguiente For (for (i=1;i<=DELT;++i){)
Cuando i = 7 (no llega a los 10)


Será el delay ???...

Tercer cambio....


(agregada) #use delay(clock=4000000)
(descartada) //#use delay(internal = 4MHz)


Ya no truena........... pero no me da los 5V ni en la A6 ni en A7.... :cry: :cry:

Y ya no se que hacer ...... :( :(

Cambios seguirían ???

GRACIAS...
 
Hice los cambios que me sugeriste y no funcionó. :confused: :eek:

Primer cambio...:unsure:

(descartada) // #FUSES LP //Internal RC Osc, no CLKOUT
(agregada) #fuses NOBROWNOUT, NOMCLR

Y abajo....

(descartada) //#use delay(clock=4000000)
(agregada) #use delay(internal = 4MHz)

Ya no truena, pero no me da los 5V ni en la A6 ni en A7. :cry: :cry:

Y ya no se que hacer. :( :(

¿Qué cambios seguirían?
¿Quitaste las demás líneas #FUSES?
Únicamente debiste dejar las líneas que te mencioné.
¿Por qué mejor no utilizas las instrucciones para generar PWM por software?

Por ejemplo:
#USE PWM(OUTPUT=PIN_A6, FREQUENCY=10kHz, DUTY=25)
Y después utilizas pwm_set_duty_percent(X); para variar el ciclo activo.
 
Última edición:
¿Quitaste las demás líneas #FUSES?
Únicamente debiste dejar las líneas que te mencioné.
¿Por qué mejor no utilizas las instrucciones para generar PWM por software?

Por ejemplo:
#USE PWM(OUTPUT=PIN_A6, FREQUENCY=10kHz, DUTY=25)
Y después utilizas pwm_set_duty_percent(X); para variar el ciclo activo.





Perdón salí a comer..

Haré lo que me pediste........
y como te mencioné Soy autodidacta y pues voy aprendiendo de los tutoriales, de la ayuda, y de este foro.

Haré la primer la primer prueba...
SALUDOS..

---------- Actualizado después de 2 horas ----------

Perdón la tardanza....

Y es que hice lo que me dijiste y también fallo :cry:
Y estoy investigando como funcionan las funciones que me dejaste en el ejemplo....:unsure: :cool:

Y es que lo que quiero hacer es que....

En mi carro...

1)
Prenda una faro_01 (luz) de halogeno 1ms. (un pulso)
Y se apague 1ms

Esto 4 pulsos o sea 8ms

Se apague el faro_01 y prenda el faro_02 8ms (sin pulsos)

Y se apague el faro_02

Y se repita....

Y poder aumentar o disminuir los pulsos y/o el tiempo

Eso es todo.....

Sigo investigando......

Si crees que pueda hacer algún cambio para que esto funcione....
Te lo agradeceré...
Seguimos en contacto.....

P.D.
Alguien me recomendó que cambiara de pic, pero es el que estoy conociendo, Tu que Opinas?
 
Última edición por un moderador:
Prenda un faro_01 (luz) de halogeno 1ms. (un pulso)
Y se apague 1ms
¿1 milisegundo encendido y otro milisegundo apagado? :eek:
No se notará visualmente el cambio.
Tendrían que ser varios milisegundos más, tal vez 20ms, 50ms o más, para que notes algún efecto estroboscópico.
faro_01 (luz) de halogeno
¿Los quieres fundir? :LOL:
Si crees que pueda hacer algún cambio para que esto funcione....
Te lo agradeceré.
Podrías realizar las rutinas usando decisiones selectivas utilizando la instrucción SWITCH
Por ejemplo, incrementando un contador de funciones.
Luego dentro de los bloques hacer comparaciones de los pulsadores de incremento y decremento.
Aún así, si los retardos son muy largos tendrías que esperar el periodo que duren para que se realicen otras acciones.
Alguien me recomendó que cambiara de pic, pero es el que estoy conociendo. ¿Tú que opinas?
Pues si, ese PIC tiene muchas prestaciones más que no se estarán utilizando.
Pero si ese es el PIC que estás usando y conociendo, desarrolla tu proyecto con él, ya luego podrás migrar el código a otro PIC más sencillo.

Saludos.
 
¿1 milisegundo encendido y otro milisegundo apagado? :eek:
No se notará visualmente el cambio.
Tendrían que ser varios milisegundos más, tal vez 20ms, 50ms o más, para que notes algún efecto estroboscópico.

¿Los quieres fundir? :LOL:

Podrías realizar las rutinas usando decisiones selectivas utilizando la instrucción SWITCH
Por ejemplo, incrementando un contador de funciones.
Luego dentro de los bloques hacer comparaciones de los pulsadores de incremento y decremento.
Aún así, si los retardos son muy largos tendrías que esperar el periodo que duren para que se realicen otras acciones.

Pues si, ese PIC tiene muchas prestaciones más que no se estarán utilizando.
Pero si ese es el PIC que estás usando y conociendo, desarrolla tu proyecto con él, ya luego podrás migrar el código a otro PIC más sencillo.

Saludos.




Jajajajajajaja.......
Cierto 1ms no es nada para un faro de halógeno.... !!!!!:D :D :D :D

Estoy usando ms porque se me facilitó mas verlo graficado en el osciliscopio...
Pero cuando esté funcionando eso cambiará a segundos, ademas también para eso quiero los botones de control de tiempo (segundos mas y menos) y control de pulsos (1 a 9999).
Y si se funden.....
Los cambiaré por unos bonitos LEDs :D :D :D :D :D
Seguiré buscando la configuración porque no me ha funcionado todavía.....
Te agradezco tus atenciones y el tiempo obsequiado....
Sigo aquí a tus ordenes si encuentras algo en donde está fallando......
 
¿1 milisegundo encendido y otro milisegundo apagado? :eek:
No se notará visualmente el cambio.
Tendrían que ser varios milisegundos más, tal vez 20ms, 50ms o más, para que notes algún efecto estroboscópico.

¿Los quieres fundir? :LOL:

Podrías realizar las rutinas usando decisiones selectivas utilizando la instrucción SWITCH
Por ejemplo, incrementando un contador de funciones.
Luego dentro de los bloques hacer comparaciones de los pulsadores de incremento y decremento.
Aún así, si los retardos son muy largos tendrías que esperar el periodo que duren para que se realicen otras acciones.

Pues si, ese PIC tiene muchas prestaciones más que no se estarán utilizando.
Pero si ese es el PIC que estás usando y conociendo, desarrolla tu proyecto con él, ya luego podrás migrar el código a otro PIC más sencillo.

Saludos.




HOLA !!!:)

ESPERO ESTAS BIEN...

Pues que te cuento..... Ya esta funcionando :aplauso:

Pues te cuento lo que hice.... Fue configurar el TIMER0, cambiar la velocidad a 20Mhz y en el desbordamiento del TIMER0, lo pongo en 512.... :aplauso:
Y duro trabajando sin problemas 3 horas en el simulador....

Bueno lo dejo ahi para quien lo pudiera necesitar...

Y doy por solucionado este tema....

No sin antes agradecer a el foro por su apoyo ... :)
(y) (y) (y) :apreton:

GRACIAS A TODOS....
 
Atrás
Arriba