Colapsar columna

Menu Usuario -

Hola, Visitante
avatar


Mas Activos -

nocturno
Mensajes: 1986
Meta
Mensajes: 276
djfreeman
Mensajes: 272
spiderman
Mensajes: 257
HJ.0x00
Mensajes: 224

Autor Tema: Datasheet en español: PIC12F629/675 (1)  (Leído 20545 veces)

Desconectado xocas

  • Administrator
  • Colaborador MicroPIC
  • *****
  • Mensajes: 73
Datasheet en español: PIC12F629/675 (1)
« en: Abril 29, 2009, 18:18 »
Es importante decir que el único documento válido es el datasheet original de Microchip y que los derechos les corresponden a ellos. A pesar del esfuerzo por ser lo más fiel posible al documento original no descarto que haya algún tipo de error, ya sea tipográfico o de interpretación.

He solicitado autorización de Microchip para publicarlo a nivel personal en los Foros en los que participo con mayor o menor frecuencia y solamente para los usuarios y/o visitantes de estos Foros llevé a cabo la tarea. No he obtenido el permiso para un formato final en pdf como me hubiera gustado y desautorizo su publicación -porque así lo expresa claramente Microchip (1)- en cualquier otra parte.

En todo caso, libro al Foro de todo tipo de responsabilidad y si algo se me ha pasado por alto y estoy vulnerando las normas de propiedad de Microchip, agradecería se me informara para actuar en consecuencia.

(1) Personal Use of Copyrighted Material: If you use Microchip copyrighted material solely for your personal use you do not need Microchip’s written permission to use such material. However, distribution or reproduction of such materials and images to others (including posting on a website) does require Microchip’s written permission.

« última modificación: Mayo 21, 2009, 17:23 por xocas »

Desconectado xocas

  • Administrator
  • Colaborador MicroPIC
  • *****
  • Mensajes: 73
Re: Datasheet en español: PIC12F629/675 (1)
« Respuesta #1 en: Abril 29, 2009, 18:19 »
Son muchas las ocasiones en las que una lectura pausada de la hoja de datos del PIC (datasheet de ahora en adelante) nos da la solución a ese problema que no conseguimos resolver en nuestro circuito, pero esa lectura no siempre es tan clara como nos gustaría que fuese. El idioma (un gran escollo para muchos de nosotros), la terminología empleada(1) y la poca profundidad a la hora de tocar ciertos temas consiguen que sobre todo aquellos que están empezando no le presten la atención que requiere.

La intención de este tema es tratar de ayudar en lo posible a resolver esos escollos: el idiomático, partiendo de la intención de ser lo más fiel posible al contenido del datasheet, y el estudio 'paso a paso' de las características del PIC, de sus registros, periféricos...etc
En el caso de algunos temas que el datasheet no trata con demasiada profundidad trataré de proporcionaros enlaces para que podáis ampliar conocimientos, de ser posible en español, y desde el punto de partida de que no es la intención de este tema hacer todo el trabajo por vosotros porque es vuestra inquietud, vuestras ganas de aprender, la mejor ayuda que puedo ofreceros. Google y nuestros amados Foros son un excelente espacio para 'ese empujoncito' que a veces necesitamos. De igual manera, son bastantes las Tablas de Datos presentes y como no tengo la intención de sobrecargar el Foro con cosas que podéis ver sin esfuerzo en el datasheet, se hará referencia ya sea a su número de imagen, página o capítulo donde se puede ver.

El datasheet del PIC con el que trabajemos debería estar siempre a mano. Para obtenerlo lo haremos directamente de la web de Microchip y fijándonos siempre que sea la última versión la que tenemos, y verificar igualmente si existen documentos de 'erratas' posteriores. Esto lo sabremos por la versión y las fechas... (2)

Se ha elegido uno de los 'enanos' de Microchip para empezar: PIC12F629/675. A pesar de su tamaño tiene muchas cosas que se encuentran en sus hermanos mayores y lo aprendido nos servirá posteriormente. Más adelante se tratarán ciertas particularidades no presentes en este PIC, como pueden ser USART, SPI...etc.

No he seguido el orden establecido en los capítulos del datasheet si no el orden que sigo a la hora de programar, de ahí que comience por la 'Palabra de configuración' (Configuration Word) que va al principio de todos mis programas. Decir que programo en Basic y desconozco otros lenguajes de programación, por ello cuando añada algún ejemplo será siempre bajo este lenguaje o añadiendo algún ejemplo de ASM incluido en el datasheet

Agradezco que me informéis de cualquier error que se me haya pasado por alto.


Notas:
1 - Se mantendrá la terminología original en inglés para evitar confusiones. En otro tema aparte se creará un glosario para que podáis consultar esa terminología.
2 - La referencia DS41190E se corresponde con la última versión del datasheet en este momento. Es importante porque podría pasarnos que hubiera alguna actualización importante en la que se corrijan errores con respecto a la versión que hemos descargado hace unos meses. De igual forma revisar cualquier posible documento de erratas sobre el datasheet con el cual vayáis a trabajar. en el caso del PIC12F629/675 no dejar de ver:
http://www.microchip.com/wwwproducts/Devices.aspx?DocName=en010114

« última modificación: Mayo 01, 2009, 12:14 por xocas »

Desconectado xocas

  • Administrator
  • Colaborador MicroPIC
  • *****
  • Mensajes: 73
« última modificación: Enero 24, 2012, 10:56 por xocas »

Desconectado xocas

  • Administrator
  • Colaborador MicroPIC
  • *****
  • Mensajes: 73
Re: Datasheet en español: PIC12F629/675 (1)
« Respuesta #3 en: Mayo 01, 2009, 12:30 »
PIC12F629/675

CPU RISC de alto rendimiento:
Sólo 35 instrucciones para aprender
Todas las instrucciones se ejecutan en un solo ciclo de reloj, excepto los saltos que requieren dos
Frecuencia de Operación de 0 a 20 MHz (DC a 200 nseg de ciclo de instrucción)
Posibilidad de Interrupciones
Pila (Stack) por hardware de 8 niveles
Modos de Direccionamiento Directos, Indirectos, y Relativos

Características especiales:
Opciones de oscilador Interno y externo
Oscilador interno de 4Mhz calibrado de fábrica a +/- 1%
Soporte para Oscilador externo a cristal y resonador
Tiempo de reacción tras el modo SLEEP: 5us (típico a 3.0V)
Ahorro de energía en el modo SLEEP
Amplio rango de voltaje - 2.0V a 5.5V
Rango de temperaturas Industrial y extendida
Power-on-Reset (POR) de bajo consumo
Power-up Timer (PWRT) y Oscilador Start-up Timer (OST)
Brown-out Detect (BOD)
Watchdog Timer(WDT) con oscilador independiente para una operación confiable
MCLR/pin de entrada, multiplexado
Interrupción por cambio de estado
Resistencias pull-up internas programables Individualmente
Protección de código Programable
Alta duración de FLASH/EEPROM
- 100,000 escrituras en memoria Flash
- 1,000,000 escrituras en EEPROM
- Flash/Data EEPROM Retención:> 40 años

Características de bajo consumo:
Corriente de Reserva (standby):
- 1 nA a 2.0V, típico
Corriente de operación:
- 8.5 uA a 32Khz, 2.0V, típico
- 100 uA a 1Mhz, 2.0V, típico
Corriente Watchdog Timer:
- 300 nA 2.0V, típico
CorrienteTimer1 :
4 uA a 32Khz, 2.0V, típico

Características de Periféricos:
6 entradas/salidas con control de dirección individual(*)
Alta corriente suministrada: 25mA
Módulo Comparador Analógico
Comparador de Voltaje Programable. Módulo (CVREF)
Entradas multiplexadas programables.
La salida del Comparador es accesible externamente
Módulo Convertidor Analógico/Digital (PIC12F675):
- Resolución de 10 bits
- Entrada de 4 canales programable
- Entrada de Referencia de Voltaje
Timer0: temporizador/contador de 8 bits con prescaler de 8 bits programable.
Timer1 Extendido:
- Temporizador/contador de 16 bytes con prescaler
- Modo de Entrada externo (External Gate Mode)
- Opción para usar OSC1 y OSC2 en modo de LP como oscilador de Timer1, si el modo INTOSC está seleccionado
Programación en circuito (In-Circuit Serial Programming (ICSP)) vía dos pines

(*) GP3 puede funcionar como MCLR, como un pin de entrada con interrupción por cambio de estado o como Vpp para la programación del PIC, pero no como pin de salida.


Desconectado xocas

  • Administrator
  • Colaborador MicroPIC
  • *****
  • Mensajes: 73
Re: Datasheet en español: PIC12F629/675 (1)
« Respuesta #4 en: Mayo 01, 2009, 12:32 »
Esta imagen nos permite ver las pocas diferencias existentes entre ambos PICs, básicamente que el 12F675 está dotado de 4 canales A/D. estas diferencias serán puntualmente comentadas a lo largo del tema:


y en la distribución de sus pines, una vista más detallada:


Diagrama de Bloques del PIC, con la descripción de sus pines y configuración interna. Podemos encontrar información adicional en el Manual de Referencia (PIC Mid-Range Reference Manual (DS33023)) en la web de Microchip.


Descripción detallada de los pines del PIC:


Esto es a mi entender el punto de partida necesario. Las primeras hojas del datasheet nos dirán si es la elección correcta a nuestras necesidades. ¿dispone de un número suficiente de entradas/salidas? (en adelante I/O), ¿necesitamos o sería muy conveniente disponer de un puerto serie por hardware?, ¿de un puerto USB?, ¿de más memoria?... todo esto lo podemos ver en unas pocas páginas del datasheet.

A modo de un pequeño repaso:
AN0..AN3 = Entradas de los canales de los convertidores A/D
CIN+ y CN- = Entradas Comparador
COUT = Salida Comparador
CLKIN = Entrada de reloj /conexión oscilador RC
CLKOUT = Salida FOSC/4
GP0..GP5 = I/O bi-direccionales con pull-up programable e interrupción por cambio de estado.(*)
ICSPDAT = Pin de Datos para programación ICSP
ICSPCLK = Pin de Reloj para programación ICSP
INT = Interrupción Externa
T0CKI = Entrada reloj de TMR0
T1CKI = Reloj TMR1
T1G = TMR1 Gate
VREF = Voltaje de Referencia Externo

(*) No es así en el caso de GP3, que puede funcionar solo como entrada.
GP3 = entrada con interrupción por cambio de estado.
MCLR = Master Clear
VPP = Voltaje de programación
 

Desconectado xocas

  • Administrator
  • Colaborador MicroPIC
  • *****
  • Mensajes: 73
Re: Datasheet en español: PIC12F629/675 (1)
« Respuesta #5 en: Mayo 01, 2009, 12:34 »
Bien, como introducción a los Registros del PIC creo que 'Configuration Bits' (capítulo 9.1 del datasheet) es un buen punto de partida. Si bien es algo que podemos hacer a la hora de grabar el PIC seleccionando las opciones adecuadas en el software de grabación en mi opinión es altamente recomendable añadirlo al principio de nuestro programa. Según el lenguaje de programación hay diferentes sintaxis para hacerlo:

en ASM -> __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
en CCS -> #FUSES XT,NOWDT,NOPROTECT,PUT
Como se puede ver, son bastante intuitivas ambas formas de hacerlo

en PSI -> Define CONF_WORD = 0x31a1
En el menú Options .. Configuration bits indicamos las opciones deseadas y nos da como resultado el valor de CONF_WORD


en PBP -> @ DEVICE pic12F675, 0x31A1
Sin embargo, y aquí quería llegar, ¿cómo obtenemos ese valor para PBP?
Podemos recurrir a ejecutar el software de programación (Winpic800 por ejemplo), establecer las opciones y tomar nota del valor que devuelve en la posición 0x2007 para posteriormente añadirlo a la instrucción @ DEVICE pic12F675, valor. (ver que hay una diferencia en el valor devuelto: PSI = 0x31a1 y Winpic = 0x3FA1)


Para entender esta diferencia de valor y adentrarnos ya en el aprendizaje de los Registros, veamos la siguiente imagen y su descripción:


bit 13-12  BG1:BG0: bits de calibración 'Bandgap' para voltaje de BOD  y POR (1)
                00 = Lowest bandgap
                11 = Highest bandgap
bit 11-9    No implementados: se leen como ‘0’
bit 8         /CPD: Data Code Protection bit(2)
                1 = Data memory code protection deshabilitada
                0 = Data memory code protection habilitada
bit 7         /CP: Code Protection bit(3)
                1 = Program Memory code protection deshabilitada
                0 = Program Memory code protection habilitada
bit 6         BODEN: Brown-out Detect Enable bit(4)
                1 = BOD habilitado
                0 = BOD deshabilitado
bit 5         MCLRE: GP3/MCLR pin function select(5)
                1 = GP3/MCLR pin function como MCLR
                0 = GP3/MCLR pin function como digital I/O, MCLR internamente llevada a VDD
bit 4         /PWRTE: Power-up Timer Enable bit
                1 = PWRT deshabilitado
                0 = PWRT habilitado
bit 3        WDTE: Watchdog Timer Enable bit
                1 = WDT habilitado
                0 = WDT deshabilitado
bit 2-0     FOSC2:FOSC0: Oscillator Selection bits
               111 = oscilador RC: CLKOUT en GP4/OSC2/CLKOUT, RC en GP5/OSC1/CLKIN
               110 = oscilador RC: I/O en GP4/OSC2/CLKOUT, RC en GP5/OSC1/CLKIN
               101 = oscilador INTOSC: CLKOUT en GP4/OSC2/CLKOUT, I/O en GP5/OSC1/CLKIN
               100 = oscilador INTOSC: I/O en GP4/OSC2/CLKOUT, I/O en GP5/OSC1/CLKIN
               011 = EC: I/O en GP4/OSC2/CLKOUT, CLKIN en GP5/OSC1/CLKIN
               010 = oscilador HS: cristal/resonador de alta frecuencia en GP4/OSC2/CLKOUT y GP5/OSC1/CLKIN
               001 = oscilador XT: cristal/resonador en GP4/OSC2/CLKOUT y GP5/OSC1/CLKIN
               000 = oscilador LP: cristal de baja frecuencia en GP4/OSC2/CLKOUT y GP5/OSC1/CLKIN

*******
Notas:
1: los bits de calibración de bandgap están programados de fábrica y se deben leer y guardar antes de borrar el dispositivo. Tal como está especificado en 'PIC12F629/675 Programming Specification'. Estos bits se reflejan en la exportación de la palabra de configuración. Las Herramientas de Desarrollo de Microchip mantienen todos los bits de calibración a la configuración de fábrica.
2: Todos los datos contenidos en la EEPROM se borrarán cuando está desactivada la protección de código.
3: Toda la Memoria de Programa, incluido el valor OSCCAL, se borrará cuando está desactivada la protección de código.
4: Habilitar Brown-out Detect no habilita automáticamente Power-up Timer.
5: Cuando MCLR se declaró en los modos INTOSC o RC, se deshabilita el reloj del oscilador interno.
/: Indica 'negado' en el modo texto. 0 = habilitado, 1 = deshabilitado
*****

Ahora veamos bit a bit como llegar al punto de partida... el valor 0x31A1. Este valor hexadecimal se corresponde en binario con 11-000-110100-001 (los guiones son para mayor claridad), y consultando la tabla vemos que:
bandgap = 11 (Highest)
bits 11..9 = 000
/CPD = 1 (deshabilitado)
/CP = 1 (deshabilitado)
BODEN = 0 (deshabilitado)
MCLRE = 1 (funciona como MCLR)
/PWRTE = 0 (habilitado)
WDTE = 0 (deshabilitado)
FOSC2: FOSC0 = 001 (oscilador XT: cristal/resonador en OSC2 y OSC1)

¿y que pasaba con el valor 0x3FA1? Veamos este valor en binario: 11-111-110100-001 para apreciar que solo cambian los bits 11..9 cuyo valor siempre se lee como '0' y por tanto a efectos de configuración ambos valores proporcionan igual resultado.

Esta palabra de configuración de 14 bits se escribe durante el proceso de grabación del PIC y no se puede modificar durante la ejecución del programa. Ocupa la posición reservada de memoria 0x2007.