Autor Tema: Mini curso "Programación en XC8"  (Leído 588245 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado Miquel_S

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1251
Re: Mini curso "Programación en XC8"
« Respuesta #225 en: 09 de Junio de 2014, 18:09:36 »
Hola de nuevo, sigo liado con el modulo CCP1, creo haber dado con el fallo al menos en parte, y es que el bit de overflow del Timer1 (TMR1IF) no se pone a 0 pero no se el porque, ya que si hago funcionar el Timer1 por separado no da fallo.
Timer1 funciona correctamente:
Código: C
  1. /*
  2.  * File:   TempTMR1.c
  3.  * Author: miquel
  4.  *
  5.  * Created on 28 de mayo de 2014, 20:12
  6.  */
  7.  
  8. #include <xc.h>
  9.  
  10. #define _XTAL_FREQ 20000000
  11. // #define __delay_ms(x) _delay((unsigned long)((x)*(_XTAL_FREQ/20000000.0)))
  12.  
  13. // #pragma config statements should precede project file includes.
  14.  
  15. // CONFIG1
  16. #pragma config FOSC = HS        // Oscillator Selection bits (HS oscillator)
  17. #pragma config WDTE = OFF       // Watchdog Timer Enable bit (WDT disabled)
  18. #pragma config PWRTE = OFF      // Power-up Timer Enable bit (PWRT disabled)
  19. #pragma config MCLRE = ON       // RA5/MCLR/VPP Pin Function Select bit (RA5/MCLR/VPP pin function is MCLR)
  20. #pragma config BOREN = ON       // Brown-out Reset Enable bit (BOR enabled)
  21. #pragma config LVP = OFF        // Low-Voltage Programming Enable bit (RB3 is digital I/O, HV on MCLR must be used for programming)
  22. #pragma config CPD = OFF        // Data EE Memory Code Protection bit (Code protection off)
  23. #pragma config WRT = OFF        // Flash Program Memory Write Enable bits (Write protection off)
  24. #pragma config CCPMX = RB0      // CCP1 Pin Selection bit (CCP1 function on RB0)
  25. #pragma config CP = OFF         // Flash Program Memory Code Protection bit (Code protection off)
  26.  
  27. // CONFIG2
  28. #pragma config FCMEN = OFF      // Fail-Safe Clock Monitor Enable bit (Fail-Safe Clock Monitor disabled)
  29. #pragma config IESO = OFF       // Internal External Switchover bit (Internal External Switchover mode disabled)
  30.  
  31.  
  32. #define CONFIG_ANSEL ANSEL
  33. #define PIN_DIR_LED TRISA0
  34. #define PIN_LED RA0
  35. #define OUTPUT 0
  36. #define OFF 0
  37.  
  38.  
  39. //----Funcion Principal----
  40. void main(void)
  41. {
  42.     CONFIG_ANSEL = 0x00;        // Configuramos todas las I/O digitales
  43.     PIN_DIR_LED = OUTPUT;       // TRISA 0b11111110
  44.  
  45.     //****Configuracion del Timer
  46.  
  47.     T1CONbits.T1CKPS1 = 1;
  48.     T1CONbits.T1CKPS0 = 1;          // 1:8 Prescale value
  49.     T1CONbits.TMR1CS = 0;           // Modo temporizador
  50.     PORTAbits.PIN_LED = OFF;        // Led Apagado
  51.     PIR1bits.TMR1IF = 0;            // Borramos bandera overflow
  52.     T1CONbits.TMR1ON = 0;           // Timer1 OFF
  53.     TMR1H = 0x85;                   // Inicializamos Timer1
  54.     TMR1L = 0xEE;
  55.     T1CONbits.TMR1ON = 1;           // Timer1 ON
  56.  
  57.     //****Bucle infinito
  58.     while(1)
  59.     {
  60.         if(PIR1bits.TMR1IF == 1)
  61.         {
  62.             PIR1bits.TMR1IF = 0;
  63.             PIN_LED ^=1;            // Complementamos pin RA0
  64.             T1CONbits.TMR1ON = 0;
  65.             TMR1H = 0x85;
  66.             TMR1L = 0xEE;
  67.             T1CONbits.TMR1ON = 1;
  68.         }
  69.     }
  70. }

Con el código del post anterior la bandera de overflow no se pone a 0.

Saludos y Gracias.
Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas.

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Mini curso "Programación en XC8"
« Respuesta #226 en: 09 de Junio de 2014, 18:48:20 »
    Miquel_S, en primer código que muestras no borras el flag del timer sino que estás borrando unicamente el flag de módulo CCP
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado Miquel_S

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1251
Re: Mini curso "Programación en XC8"
« Respuesta #227 en: 10 de Junio de 2014, 03:09:36 »
Gracias AngelGris esto lo tengo presente, pero me he dado cuenta que en la instrucción que tengo casi al principio del main que si lo estoy borrando al simular paso a paso no se me pone a 0, y es aquí que no se el porque.
Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas.

Desconectado storm67

  • PIC10
  • *
  • Mensajes: 6
Re: Mini curso "Programación en XC8"
« Respuesta #228 en: 13 de Junio de 2014, 21:27:52 »
Hola soy nuevo en MPLAB X y XC8 y trato de hacer un programa como practica para aprender a utilizar un PIC16F84A.   El programa es para un velocímetro digital que muestre la velocidad en 3 Diplays de 7 segmentos y la señal del sensor quiero ingresarla por el pin del RA4 como contador.
Creo que el funcionamiento se debe parecer al de un frecuencímetro ya que he la cantidad de pulsos que ingresan serán numéricamente igual a la velocidad.   Para esto, el periodo de tiempo debe ser de 555 ms .
¿Es correcto suponer que mientras espero que ocurra la interrupción para este período, se pueden contar los pulsos que ingresan por RA4 y procesarlos para separarlos en unidades, decenas y centenas y por medio de multiplexión los muestro en los displays?
Utilizaré 4 pines y un decodificador para los displays y tres pines para controlarlos, todos estos del puerto B.
Me gustaría saber si esta idea es correcta, si voy por el camino correcto.
Gracias por su ayuda!!!!

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Mini curso "Programación en XC8"
« Respuesta #229 en: 13 de Junio de 2014, 22:18:20 »
Hola soy nuevo en MPLAB X y XC8 y trato de hacer un programa como practica para aprender a utilizar un PIC16F84A.   El programa es para un velocímetro digital que muestre la velocidad en 3 Diplays de 7 segmentos y la señal del sensor quiero ingresarla por el pin del RA4 como contador.
Creo que el funcionamiento se debe parecer al de un frecuencímetro ya que he la cantidad de pulsos que ingresan serán numéricamente igual a la velocidad.   Para esto, el periodo de tiempo debe ser de 555 ms .
¿Es correcto suponer que mientras espero que ocurra la interrupción para este período, se pueden contar los pulsos que ingresan por RA4 y procesarlos para separarlos en unidades, decenas y centenas y por medio de multiplexión los muestro en los displays?
Utilizaré 4 pines y un decodificador para los displays y tres pines para controlarlos, todos estos del puerto B.
Me gustaría saber si esta idea es correcta, si voy por el camino correcto.
Gracias por su ayuda!!!!

  ¿Es un velocímetro o un tacómetro?
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado storm67

  • PIC10
  • *
  • Mensajes: 6
Re: Mini curso "Programación en XC8"
« Respuesta #230 en: 14 de Junio de 2014, 00:22:42 »
Es un velocimetro que me encontré en una revista “Electronics projects”  el artículo se llama DIGITAL SPEEDOMETER que encontré en http://www.electronicsforu.com/electronicsforu/lab/ad.asp?url=www.electronicsforu.com/electronicsforu/circuitarchives/view_article.asp?sno=384&title=Digital%20Speedometer
Este artículo muestra unos cálculos para hacer que los pulsos del sensor sean numéricamente igual a la velocidad en km/h.
Quiero seguir el mismo principio pero cambiando los timers y contadores y latches por el pic.
Como es el primer pic que programaría escogí el PIC16F84A, espero que sea suficiente para lo que quiero.

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Mini curso "Programación en XC8"
« Respuesta #231 en: 15 de Junio de 2014, 23:10:15 »
  En teoría se podría implementar.
  Creo que la base de tiempo sería más fácil implementarla con un 16f628A, ya que el timer1 lo puedes encender y apagar a voluntad. Además imagino que el 628A será más barato ya que el f84A está discontinuado hace rato
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado storm67

  • PIC10
  • *
  • Mensajes: 6
Re: Mini curso "Programación en XC8"
« Respuesta #232 en: 16 de Junio de 2014, 19:15:53 »
Gracias AngelGris
vere la hoja de datos del 628A, aunque dejame decirte que el 84A aqui aun esta disponible, es muy comun para principiantes.  ¿es posible hacerlo en el 84A  :oops: ya lo compre¡¡¡¡¡¡

Desconectado storm67

  • PIC10
  • *
  • Mensajes: 6
Re: Mini curso "Programación en XC8"
« Respuesta #233 en: 16 de Junio de 2014, 19:23:31 »
Si mi primera lección aprendida.  revisar antes las hojas de datos antes de comprar los componentes!!!!!

Desconectado storm67

  • PIC10
  • *
  • Mensajes: 6
Re: Mini curso "Programación en XC8"
« Respuesta #234 en: 18 de Junio de 2014, 00:10:59 »
Hola.   Revisando diferentes aportaciones me surgieron varias preguntas las cuales son:
¿el RA4 y el TMR0 en el 16F84A, son mutuamente excluyentes, es decir, si uso RA4 como entrada de una señal cuadrada para contar sus pulsos, ya no podré usar TMR0 para generar interrupciones al mismo tiempo?
¿Puedo usar alguna otra entrada del puerto A como entrada de una señal cuadrada para contar los pulsos mientras espero una interrupción del TMR0?

ojalá alguien pueda sacarme de estas dudas.  Gracias de antemano.

Desconectado Thulsa Doom

  • PIC24F
  • *****
  • Mensajes: 805
    • https://electronicadicto.wordpress.com/
Re: Mini curso "Programación en XC8"
« Respuesta #235 en: 18 de Junio de 2014, 09:26:06 »
Hola a todos, me estoy iniciando en el MPLABX y XC8, tengo algo de experiencia en MPLAB y C18, tengo algunas dudas.
¿XC8 trae librerías de manejo de periféricos como el compilador C18 pero para los pic inferiores a PIC18, ósea los PIC10/12/16?.
¿Los proyectos hechos con C18 y librerías valdrían a pelo sin modificar nada para XC8?
gracias
Más códigos y desarrollos en https://electronicadicto.wordpress.com/ date una vuelta y curiosea un rato...

Desconectado sander

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 627
Re: Mini curso "Programación en XC8"
« Respuesta #236 en: 18 de Junio de 2014, 16:11:03 »
Hola a todos, me estoy iniciando en el MPLABX y XC8, tengo algo de experiencia en MPLAB y C18, tengo algunas dudas.
¿XC8 trae librerías de manejo de periféricos como el compilador C18 pero para los pic inferiores a PIC18, ósea los PIC10/12/16?.
¿Los proyectos hechos con C18 y librerías valdrían a pelo sin modificar nada para XC8?
gracias

A la primera pregunta no, no trae librerias para los perifericos de los PIC de gama media y baja.

A la segunda es casi, hay algunas modificaciones que hay que hacer. por ejemplo los retardos se manejan de forma diferente.

Saludos
La electrónica es el arte de manipular señales eléctricas que transportan información
Jan Davidse

Visita mi blog
Visita mi canal de youtube

Desconectado Thulsa Doom

  • PIC24F
  • *****
  • Mensajes: 805
    • https://electronicadicto.wordpress.com/
Re: Mini curso "Programación en XC8"
« Respuesta #237 en: 18 de Junio de 2014, 16:18:56 »
Pues vaya, me costará un poco adaptarme, creo que seguiré con C18 ya que si quisiera utilizar un conjunto de librerías como las de TCPIP sería un verdadero infierno adaptarlas.
saludos
Más códigos y desarrollos en https://electronicadicto.wordpress.com/ date una vuelta y curiosea un rato...

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Mini curso "Programación en XC8"
« Respuesta #238 en: 18 de Junio de 2014, 19:14:02 »
Pues vaya, me costará un poco adaptarme, creo que seguiré con C18 ya que si quisiera utilizar un conjunto de librerías como las de TCPIP sería un verdadero infierno adaptarlas.
saludos

  Tal vez deberías ver algún readme de la última edición de las librerías. Yo probé la de USB y ya contempla al compilador XC8, muy posiblemente para TCP/IP también pueda compilar con XC8.
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Mini curso "Programación en XC8"
« Respuesta #239 en: 18 de Junio de 2014, 19:16:08 »
Hola.   Revisando diferentes aportaciones me surgieron varias preguntas las cuales son:
¿el RA4 y el TMR0 en el 16F84A, son mutuamente excluyentes, es decir, si uso RA4 como entrada de una señal cuadrada para contar sus pulsos, ya no podré usar TMR0 para generar interrupciones al mismo tiempo?
¿Puedo usar alguna otra entrada del puerto A como entrada de una señal cuadrada para contar los pulsos mientras espero una interrupción del TMR0?

ojalá alguien pueda sacarme de estas dudas.  Gracias de antemano.


  Efectivamente las posibles entradas para el TMR0 son o el clock interno o el pin RA4.... Podrías utilizar el pin RB0 (configurado para que genere interrupción) y así utilizar dicho pin como entrada para los pulsos del disco y el TMR0 como contador de tiempo.
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas


 

anything