Autor Tema: Programando los PIC10F222 (8 pines)  (Leído 3309 veces)

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

Desconectado RiBerZerO

  • PIC12
  • **
  • Mensajes: 52
Programando los PIC10F222 (8 pines)
« en: 22 de Marzo de 2007, 04:02:19 »
 :-/ Bueno compañeros aqui pidiendo un poco de ayuda para programar este pic ya que nececito el maximo de salidas, lo estoy programando en CCS version 4.023, este es el programa:

Código: C++
  1. #INCLUDE<10F220.h>
  2.  
  3. #FUSES IOSC8    //Oscilador interno 8 MHz
  4. #FUSES MCPU     //Resistencia de pull-up en MCLR
  5. #FUSES NOWDT    //Deshabilitar el WDT
  6. #FUSES NOPROTECT //No protegido
  7. #FUSES NOMCLR       //Pin de reset desactivado
  8.  
  9. #USE delay(clock=8000000)
  10. #USE FIXED_IO(B_outputs=PIN_B0,PIN_B1,PIN_B2)
  11.  
  12. #BYTE GPIO=0x06
  13. #BYTE FOSC=0x05
  14.  
  15. void main(){
  16.         SETUP_ADC(ADC_OFF);
  17.         SETUP_ADC_PORTS(NO_ANALOGS);
  18.         BIT_CLEAR(FOSC,0);
  19.         output_b(0);
  20.         while(TRUE){
  21.              GPIO=0x01;
  22.              delay_ms(1000);
  23.               GPIO=0x02;
  24.               delay_ms(1000);
  25.               GPIO=0x04;
  26.               delay_ms(1000);
  27.        }
  28. }

El programa usa el oscilador interno, la patita de GP3 solo se puede usar como salida, solo como entrada, por lo cual solo uso de GP0 a GP2.

El primer intento nada funcionaba, buscando en las hojas de especificaciones encontre la siguiente tabla

ORDER OF PRECEDENCE FOR PIN FUNCTIONS

  
Priority
  
1
  
2
  
3
  
GP0
  
AN0
  
TRIS GPIO
  
-
  
GP1
  
AN1
  
TRIS GPIO
  
-
  
GP2
  
FOSC4
  
T0CKI
  
TRIS GPIO
  
GP3
  
MCLR
  
-
  
-

Esta tabla muestra el orden del funcionamiento de los pines en la familia 10FXXX, los primeros pines no fue problema descubrir que tenia que desactivar el ADC, como se ve en el codigo, y la tercera salida como ya dije no puede usarse de salida como lo nececito, el problema esta en el segundo pin, ya desactive el pin FOSC4 que esta en el registro del oscilador, pero el bit T0CKI, esta en un registro llamado OPTION, el cual no esta en la numeracion de los SFR, y en ensamblador se puede cambian desde la instruccion OPTION, pero no se como se puede hacer en C, o implementar una funcion en ensamblador que cambie este bit.

Agregando que el bit que se debe cambiar se llama T0CS que por default es 1 y tiene que ser 0, esta en el registro OPTION, el cual se puede cambiar con una instruccion del pic con el mismo nombre, pero estra instruccion cambia todo el registro y carga el valor de W en el registro OPTION, el cual por cierto no tiene direccion como otros SFR, bueno pues espero me puedan ayudar gracias

Bueno espero nos documentemos sobre este pic, ya que sirve para aplicaciones pequeñas, pero poderosas, todo esto no solo es para pedir ayuda sino tambien para empezar con una linea de informacion acerca de este pic que hay muy poca, por su ayuda gracias  :-/
« Última modificación: 25 de Marzo de 2007, 01:52:25 por RiBerZerO »
No SUEÑES tu vida, VIVE tu sueño

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Programando los PIC10F222 (8 pines)
« Respuesta #1 en: 22 de Marzo de 2007, 04:09:54 »
Hola RiBerZerO, recién acabo de terminar una aplicación utilizando ese micro.
¿Cuál es el problema que tienes?, por más que leo tu post no sé qué ayuda necesitas.

Desconectado RiBerZerO

  • PIC12
  • **
  • Mensajes: 52
Re: Programando los PIC10F222 (8 pines)
« Respuesta #2 en: 22 de Marzo de 2007, 04:40:14 »
Creo que no fui muy claro jaja :-/

Bueno ya casi todo esta resuelto lo unico que me falta es poder configurar el pin GP2 para que sea de salida ya que no se como desactivar el bit T0CS para que este pin sea de salida

quisiera que la funcion este  en C, pero si no pues tambiem podemos encajar algo de #ASM pero no lo he intentado ya que no se para que son los otros bits del registro option

Por la ayuda inmediata muchas gracias nocturno
« Última modificación: 25 de Marzo de 2007, 02:48:20 por RiBerZerO »
No SUEÑES tu vida, VIVE tu sueño

Desconectado RiBerZerO

  • PIC12
  • **
  • Mensajes: 52
Re: Programando los PIC10F222 (8 pines)
« Respuesta #3 en: 22 de Marzo de 2007, 15:05:26 »
Bueno pues aqui tengo una posible solucion espero su ayuda y si funciona tendremos una libreria en C para poder configurar el registro OPTION.

La libreria esta hecha por mi al puro estilo de CCD  :lol: espero algo de ayuda en la prueba ya que mi 10F220 que esta utilizando murio en la practica por trabajar a las 3 de la mañana con algo de sueño, se dio vuelta y conecte al revez la polarizacion, pero segun el debug en MPLAB podemos cambiar los parametros.

Bueno despues de todo este rodeo pongamos el codigo, este codigo se debe agregar en los archivos 10F2XX.h para que se pueda usar en nuestros proyectos

Código: C
  1. //Constantes utilizadas para la configuracion option
  2.  
  3. // Enamble wake-up On pin change bit
  4. #Define WAKE_EN 0x80
  5. #Define WAKE_DIS 0
  6.  
  7. //Enamble weak pull-ups bit
  8. #Define PULL_EN 0x40
  9. #Define PULL_DIS 0
  10.  
  11. //Timer 0 Clock source select bit
  12. #Define T0_PIN 0
  13. #Define T0_INT 0x20
  14.  
  15. //Timer0 Source edge select bit
  16. #Define EDGE_HtoL 0
  17. #Define EDGE_LtoH 0x10
  18.  
  19. //Prescaler assignment select bit
  20. //Prescale rate select bits
  21. #Define PRESCA_WDT_1_1 0x07
  22. #Define PRESCA_WDT_1_2 0x06
  23. #Define PRESCA_WDT_1_4 0x05
  24. #Define PRESCA_WDT_1_8 0x04
  25. #Define PRESCA_WDT_1_16 0x03
  26. #Define PRESCA_WDT_1_32 0x02
  27. #Define PRESCA_WDT_1_64 0x01
  28. #Define PRESCA_WDT_1_128 0
  29.  
  30. #Define PRESCA_T0_1_2 0x0F
  31. #Define PRESCA_T0_1_4 0x0E
  32. #Define PRESCA_T0_1_8 0x0D
  33. #Define PRESCA_T0_1_16 0x0C
  34. #Define PRESCA_T0_1_32 0x0B
  35. #Define PRESCA_T0_1_64 0x0A
  36. #Define PRESCA_T0_1_128 0x09
  37. #Define PRESCA_T0_1_256 0x08
  38.  
  39. void SET_OPTION(BYTE x){
  40.    x=~x ;
  41.    #ASM
  42.       movf x ,0
  43.       option
  44.    #ENDASM
  45. }

Este codigo nos permite configurar el registro OPTION atravez de la funcion SET_OPTION(); los parametros se muestran en los define con una descripcion breve.

Espero esto nos sriva, es un aporte pequeño, tendremos que probarlo para ver si se tienen problemas, pero al parecer ya tendremos una funcion en C para configurar este registro que a veces se pone dificil cuando se programa en C
No SUEÑES tu vida, VIVE tu sueño

Desconectado RiBerZerO

  • PIC12
  • **
  • Mensajes: 52
Re: Programando los PIC10F222 (8 pines)
« Respuesta #4 en: 22 de Marzo de 2007, 16:46:52 »
 :-/ Podemos agregar la directiva #inline en esta parte del codigo para que el compilador copie el codigo y asi no tenga que crear una subrutina sino que pone el codigo directamente en la casilla siguiente, ya que esta funcion no se llama muy frecuentemente, la mayoria de las veces 1 vez cada programa jaja

Bueno asi puede quedar, y nos ahorraremos 2 "Goto"
Código: C
  1. #inline
  2. void SET_OPTION(BYTE x){
  3.    x=~x ;
  4.    #ASM
  5.       movf x ,0
  6.       option
  7.    #ENDASM
  8. }

Seria bueno saber si a alguien le sirve jeje espero los comentarios
« Última modificación: 23 de Marzo de 2007, 17:01:41 por RiBerZerO »
No SUEÑES tu vida, VIVE tu sueño

Desconectado RiBerZerO

  • PIC12
  • **
  • Mensajes: 52
Re: Programando los PIC10F222 (8 pines)
« Respuesta #5 en: 25 de Marzo de 2007, 02:47:43 »
 :-/ :-/ :-/ ya esta probado y funcionando, aqui publico el codigo para hacer que el PIC10F222 pueda hacer un corrimiento de 3 led, utilizando el reloj interno a 8 MHz, los leds cambian cada segundo exacto, esperemos sirva de algo, si te funciona por favor publicalo para que no se pierda el post.

Código: C
  1. #include <10F220.h>
  2.  
  3. #FUSES IOSC8    //Oscilador interno 8 MHz
  4. #FUSES MCPU     //Resistencia de pull-up en MCLR
  5. #FUSES NOWDT    //Deshabilitar el WDT
  6. #FUSES NOPROTECT //No protegido
  7. #FUSES NOMCLR       //Pin de reset enable
  8.  
  9. #USE delay(clock=8000000)
  10. #USE FAST_IO(B)
  11.  
  12. #BYTE GPIO=0x06
  13. #BYTE FOSC=0x05
  14.  
  15.  
  16. void main(){
  17.    SETUP_ADC(ADC_OFF);
  18.    SETUP_ADC_PORTS(NO_ANALOGS);
  19.    SET_TRIS_B(0);
  20.    BIT_CLEAR(FOSC,0);
  21.    SET_OPTION(WAKE_DIS|PULL_DIS|T0_INT|EDGE_HtoL|PRESCA_T0_1_32);
  22.    
  23.    while(TRUE){
  24.       GPIO=0x01;
  25.       delay_ms(1000);
  26.       GPIO=0x02;
  27.       delay_ms(1000);
  28.       GPIO=0x04;
  29.       delay_ms(1000);
  30.    }
  31. }

y aqui lo que le debemos agregar a los archivos de 10F22X para poder utilizar la funcion de configuracion del OPTION

Código: C
  1. //Constantes utilizadas para la configuracion option
  2.  
  3. // Enamble wake-up On pin change bit
  4. #Define WAKE_EN 0x80
  5. #Define WAKE_DIS 0
  6.  
  7. //Enamble weak pull-ups bit
  8. #Define PULL_EN 0x40
  9. #Define PULL_DIS 0
  10.  
  11. //Timer 0 Clock source select bit
  12. #Define T0_PIN 0
  13. #Define T0_INT 0x20
  14.  
  15. //Timer0 Source edge select bit
  16. #Define EDGE_HtoL 0
  17. #Define EDGE_LtoH 0x10
  18.  
  19. //Prescaler assignment select bit
  20. //Prescale rate select bits
  21. #Define PRESCA_WDT_1_1 0x07
  22. #Define PRESCA_WDT_1_2 0x06
  23. #Define PRESCA_WDT_1_4 0x05
  24. #Define PRESCA_WDT_1_8 0x04
  25. #Define PRESCA_WDT_1_16 0x03
  26. #Define PRESCA_WDT_1_32 0x02
  27. #Define PRESCA_WDT_1_64 0x01
  28. #Define PRESCA_WDT_1_128 0
  29.  
  30. #Define PRESCA_T0_1_2 0x0F
  31. #Define PRESCA_T0_1_4 0x0E
  32. #Define PRESCA_T0_1_8 0x0D
  33. #Define PRESCA_T0_1_16 0x0C
  34. #Define PRESCA_T0_1_32 0x0B
  35. #Define PRESCA_T0_1_64 0x0A
  36. #Define PRESCA_T0_1_128 0x09
  37. #Define PRESCA_T0_1_256 0x08
  38.  
  39. #list
  40.  
  41. #inline
  42. void SET_OPTION(BYTE x){
  43.    x=~x ;
  44.    #ASM
  45.       movf x ,0
  46.       option
  47.    #ENDASM
  48. }
No SUEÑES tu vida, VIVE tu sueño


 

anything