Autor Tema: Problema programando PIC 16F88  (Leído 3574 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado alxcb

  • PIC10
  • *
  • Mensajes: 10
Problema programando PIC 16F88
« en: 10 de Agosto de 2012, 14:05:18 »
He programado un PIC16F88 en C utilizando el entorno PIC C Compiler. Habiendo grabado en el PIC un programa que enciende y apaga un LED periódicamente, he tenido el siguiente problema: en la función delay_ms() que permite esperar sin hacer nada durante el tiempo que se introduzca (en el rango de los enteros positivos de 32bits), el valor que introduzco se multiplica por tres en la práctica, cuando pruebo el programa montando el circuito en una protoboard. ¿Alguien tiene alguna idea sobre a qué podría deberse esto?
Muchas gracias de antemano.

PD: Soy nuevo en el foro, no sé si este tema está en la categoría adecuada. Si no, lo siento.

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Problema programando PIC 16F88
« Respuesta #1 en: 10 de Agosto de 2012, 14:25:58 »
  ¿A qué frecuencia funciona tu PIC? ¿Qué valor usaste en la sentencia "#use delay(xxxxxx)"?
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado alxcb

  • PIC10
  • *
  • Mensajes: 10
Re: Problema programando PIC 16F88
« Respuesta #2 en: 10 de Agosto de 2012, 16:11:39 »
Pues la frecuencia es de 1MHz, ¿podría tener algo que ver con mi problema?

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Problema programando PIC 16F88
« Respuesta #3 en: 10 de Agosto de 2012, 16:15:36 »
  Usa la opción GeSHi del editor de mensajes y selección C. Luego pegas tu código dentro de las etiquetas.

  ¿Estás trabajando con oscilador inter, con cristal...? Sube el código así entre todos vamos a poder ayudarte.
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado alxcb

  • PIC10
  • *
  • Mensajes: 10
Re: Problema programando PIC 16F88
« Respuesta #4 en: 10 de Agosto de 2012, 17:23:12 »
El código que hice es muy sencillo, es el típico que se utiliza para comprobar si un PIC funciona, la mayoría lo hizo el asistente de creación de proyectos de mi programa. Mi archivo main.c es el siguiente:

Código: C
  1. #include "C:\Users\Usuario\Documents\PIC\LED 2\main.h"
  2.  
  3. #define led pin_b0
  4.  
  5. void main()
  6. {
  7.  
  8.    setup_adc_ports(NO_ANALOGS|VSS_VDD);
  9.    setup_adc(ADC_CLOCK_DIV_2);
  10.    setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
  11.    setup_comparator(NC_NC_NC_NC);
  12.    setup_vref(FALSE);
  13. //Setup_Oscillator parameter not selected from Intr Oscillator Config tab
  14.  
  15.    // TODO: USER CODE!!
  16.    
  17.    do
  18.    {
  19.    output_high(led);
  20.    delay_ms(500);
  21.    output_low(led);
  22.    delay_ms(500);
  23.    }while(TRUE);
  24. }

También adjunto el main.h a continuación:

Código: C
  1. #include <16F88.h>
  2. #device adc=8
  3.  
  4. #FUSES NOWDT                    //No Watch Dog Timer
  5. #FUSES HS                       //High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD)
  6. #FUSES NOPUT                    //No Power Up Timer
  7. #FUSES MCLR                     //Master Clear pin enabled
  8. #FUSES NOBROWNOUT               //No brownout reset
  9. #FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
  10. #FUSES NOCPD                    //No EE protection
  11. #FUSES NOWRT                    //Program memory not write protected
  12. #FUSES NODEBUG                  //No Debug mode for ICD
  13. #FUSES NOPROTECT                //Code not protected from reading
  14. #FUSES FCMEN                    //Fail-safe clock monitor enabled
  15. #FUSES IESO                     //Internal External Switch Over mode enabled
  16. #FUSES RESERVED                 //Used to set the reserved FUSE bits
  17.  
  18. #use delay(clock=1000000)
  19. #use rs232(baud=9600,parity=N,xmit=PIN_A3,rcv=PIN_A2,bits=8)

El archivo que invoca el main.h es la librería estándar para este PIC, que viene incluida con el programa.
Respecto a lo del oscilador, trabajo con el reloj interno del PIC, que he configurado para que funcione a 1MHz utilizando el asistente de creación de proyectos. ¿Necesito más tasa de refresco? Parece absurdo, pues lo único que tiene que hacer es esperar... Además, es capaz de esperar menos tiempo: he probado a cambiar en el código el tiempo de espera a 25ms y me lo redujo (a pesar de seguir siendo aproximadamente 30 veces más de lo que yo pedía). El problema es que necesito algo de precisión, pues tenía pensado utilizar el PIC para comunicarme con unos servos mediante el sistema de variación de anchos de pulso que utilizan.
Por cierto, lo he simulado en el Proteus con el .hex que he compilado y funciona sin problemas, lo cual es bastante desconcertante...

PD: Releyendo el primer mensaje, me he dado cuenta de que el dato que introduje es incorrecto: no multiplica el tiempo de espera por 3, sino por 30.

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Problema programando PIC 16F88
« Respuesta #5 en: 10 de Agosto de 2012, 20:03:29 »
  Según los fuses tienes configurado el oscilador como HS, con lo cual tendrías que trabajar con un cristal >= 4MHz.

  No entiendo porque indicas que trabajas a 1MHz, y mucho menos que indiques que trabajas con el oscilador interno.

  ¿Dónde estás probando tu PIC?
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado alxcb

  • PIC10
  • *
  • Mensajes: 10
Re: Problema programando PIC 16F88
« Respuesta #6 en: 11 de Agosto de 2012, 21:15:06 »
Ah, pues sí, no me había fijado. La verdad es  que como de esa parte del código se encarga el asistente de creación de proyectos y no va incluida en el main.c, ni siquiera la había leído, había dado por supuesto que me lo habría configurado para trabajar con el reloj interno, ya que en el Proteus la simulé sin reloj externo y funcionó a la perfección. Bueno, probaré a trastear un poco con los ajustes, y a ver si cuando quede la próxima vez con mis compañeros de proyecto lo solucionamos. Ya comentaré por aquí el resultado, espero que sea solamente eso.
Muchas gracias por la ayuda. :)

PD: El PIC lo utilizo de momento en una protoboard para estos tests de funcionamiento.

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Problema programando PIC 16F88
« Respuesta #7 en: 12 de Agosto de 2012, 00:40:50 »
  En proteus te funciona bien ya que no simula todo el oscilador con su cristal sino que hay que colocarle la frecuencia de trabajo y nada más.
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado alxcb

  • PIC10
  • *
  • Mensajes: 10
Re: Problema programando PIC 16F88
« Respuesta #8 en: 13 de Agosto de 2012, 17:19:53 »
Hoy he probado de nuevo el PIC con la nueva configuración y ha funcionado perfectamente: parece que lo que has dicho era, efectivamente, la fuente de mis problemas. Muchas gracias por la ayuda, y la próxima vez me fiaré menos de los asistentes y revisaré más minuciosamente antes de preguntar. :)