Primeros pasos con el PIC

      6 comentarios en Primeros pasos con el PIC

Ha costado mas de lo que pensaba. He tardado bastante en encontrar algun sitio donde me dijeran como podía montar un circuito simple con un 16F84 para hacer pruebas, lo que se llama un «entrenador».
Lo único que tenía claro es que el chip se alimenta con entre 3 y 6 voltios, por lo que tenía que buscar una fuente de alimentación que me diera alrededor de 5V. Me he apañado una fuente de alimentación de PC que uso para pruebas y que entrega 5 y 12V y le he puesto un conector para poder enchufarle corriente a la protoboard.
Tambien sabía el patillaje, gracias al datasheet de Microchip, el fabricante.


Patillaje del 16F84

Luego un poco a lo bestia he colocado en la protoboard el zocalo, 3 leds y me he puesto a cablear las salidas del puerto A (el 16F84 tiene 2 puertos de salida, el A, de 5 bits, y el B, de 8 ) a los leds y la alimentación y masa del chip (pata 13 y 5).

Para probarlo, y harto de que el CCS me diese continuamente un error de «Unknown device type» sin motivo aparente, me remangué y me puse a compilar un ejemplo en ensamblador muy simple, que activaba todas las líneas de los puertos de salida. Como yo tenía conectados 3 leds a las líneas de menor peso del puerto A, deberían encenderse los 3 leds.
Ensamblé el programa con el MPASM directamente (en efecto, el MPLAB TAMPOCO me funcionaba bien) y subí el programa al PIC con el IC-Prog y mi recien creado PIPO2.

Monté el PIC sobre la proto board y encendí la fuente de alimentación, con gran desilusión.. allí no pasaba nada de nada. Podía ser cualquier cosa, el programa, el circuito, yo que se.. pero me acordé de un montaje con un PIC que vi hace poco y miré el esquema que tenía.
Basicamente me faltaba un cuarzo entre CLKIN y CLKOUT y conectar el master clear MCLR a la alimentación mediante una resistencia de 10k. ¡Que suerte! ¡El cuarzo y las resistencias las compré el otro día!


Circuito de prueba en protoboard

Lo puse y.. ohhhhhhh, que bonito, los leds se encendían. Probé otro par de códigos, leds parpadeando, leds en relevos y ya, convencido de que esto funciona, lo dejé para dormir un poco, que si me meto a hacer modificaciones en los programas no me acuesto en toda la noche.
Cuando lo monte en serio ya pondré todos los condensadores y resistores que se supone que tengo que poner en el circuito de pruebas. De momento, a dormir, que me lo he ganado.

6 pensamiento sobre “Primeros pasos con el PIC

  1. Makinolo

    Gracias Francis, acabo de ver el entrenador que me propones. Supongo que es el PIC Kernel.
    Resulta que ayer me terminé uno parecido solo que sin regulador de tensión ni los condensadores que convierten el reloj en un resonador (parece que se de lo que hablo, pero solo repito lo que leo, parezco un loro :-D)

    Lo de hacer placas aun queda un poco lejos de mis posibilidades como novatillo en electronica. Aun no tengo infraestructura para fabricarmelas y voy tirando de boards.
    Además, fijandome en la de Xisco, puedo ampliar la mia por módulos. Me mola.

  2. juan g diaz rodriguez

    Hola he visitado tu webside está fenomenal:
    perdón por las molestias pero tengo un problema estoy iniciando en esto de los pics y estoy haciendo como práctica una caminata de leds conectados al puerto b la rutina la tome de internet que era el encender 4 leds del puerto b a continuación pongo la rutina para 4 led y tambien la midificación para 8 pero no trabaja bien porque cuenta sólo hasta el 5 led pero no retorna al inicio y tampoco encienden los leds depués del 5o. led, me puedes ayudar con algún consejo para que cuente los 8 leds del puerto b; gte mando los dos programas un con 4 leds que jala bien y el de 8 que no jalo bien

    ;Este programa maneja una secuencia de 4 LED’s.

    list p=16c84
    ;———————————————————————-
    ptob equ 06 ;el puerto b est en la direcci¢n 06 de la memoria RAM

    rota equ 0a
    reg1 equ 0b ;se asignan nombres a algunos registros de prop¢sito general
    reg2 equ 0c
    reg3 equ 0d

    valor1 equ 30 ;se asignan nombres a algunas constantes
    valor2 equ 40
    valor3 equ 50
    ;———————————————————————–

    reset org 0 ;el vector de reset es la direccion 00
    goto inicio ;se salta al inicio del programa
    org 7 ;el programa empieza e la direccion de memoria 7

    inicio movlw 00 ;se carga el registro W con 0
    tris ptob ;se programan los pines del puerto b como salidas

    otra movlw 01 ;se carga el registro W con el valor 01
    movwf rota ;se dispone el dato para la rotacion
    hol movf rota,0 ;mueve el contenido del registro rota a W
    movwf ptob ;enciende el LED correspondiente

    call retardo ;se mantiene el LED encendido por un momento

    rlf rota ;desplaza el contenido del registro un bit a la izquierda
    btfss rota,4 ;probar si el quinto bit se enciende
    goto hol ;si no ha llegado al quinto bit enciende el LED que sigue

    goto otra ;si ya encendio el ultimo LED se inicia nuevamente la secuencia

    retardo movlw valor1 ;se carga el registro W con el numero valor1, es decir
    ;con el numero 30 que se asigno al principio a valor1
    movwf reg1 ;se traslada ese numero al registro reg1
    tres movlw valor2 ;se carga W con el numero valor2 (40)
    movwf reg2 ;se traslada ese numero al registro reg2
    dos movlw valor3 ;se carga W con valor3
    movwf reg3 ;se carga reg3 con 50

    uno decfsz reg3 ;se decrementa el registro reg3 y si el valor es cero
    goto uno ;se salta a la siguiente instruccion, sino, se continua
    ;decrementandolo
    decfsz reg2 ;igual que el anterior
    goto dos
    decfsz reg1 ;igual al anterior
    goto tres
    retlw 00 ;termina la subrutina retardo y vuelve al programa principal

    end
    ;————————————————————————
    ; Fusibles de programacion

    ; Osc XT
    ; Watchdog OFF
    ; Code protect OFF
    ; Power-Up-Timer ON

    ; Micro. PIC16C84
    ;=========================================================================

    esta es la modificación que le hice para los 8 leds del puerto b pero no sale

    ;Este programa maneja una secuencia de 4 LED’s.

    list p=16c84
    ;———————————————————————-
    ptob equ 06 ;el puerto b est en la direcci¢n 06 de la memoria RAM

    rota equ 0a
    reg1 equ 0b ;se asignan nombres a algunos registros de prop¢sito general
    reg2 equ 0c
    reg3 equ 0d

    valor1 equ 30 ;se asignan nombres a algunas constantes
    valor2 equ 40
    valor3 equ 50
    ;———————————————————————–

    reset org 0 ;el vector de reset es la direccion 00
    goto inicio ;se salta al inicio del programa
    org 7 ;el programa empieza e la direccion de memoria 7

    inicio movlw 00 ;se carga el registro W con 0
    tris ptob ;se programan los pines del puerto b como salidas

    otra movlw 01 ;se carga el registro W con el valor 01
    movwf rota ;se dispone el dato para la rotacion
    hol movf rota,0 ;mueve el contenido del registro rota a W
    movwf ptob ;enciende el LED correspondiente

    call retardo ;se mantiene el LED encendido por un momento

    rlf rota ;desplaza el contenido del registro un bit a la izquierda
    btfss rota,7 ;probar si el quinto bit se enciende
    goto hol ;si no ha llegado al quinto bit enciende el LED que sigue

    goto otra ;si ya encendio el ultimo LED se inicia nuevamente la secuencia

    retardo movlw valor1 ;se carga el registro W con el numero valor1, es decir
    ;con el numero 30 que se asigno al principio a valor1
    movwf reg1 ;se traslada ese numero al registro reg1
    tres movlw valor2 ;se carga W con el numero valor2 (40)
    movwf reg2 ;se traslada ese numero al registro reg2
    dos movlw valor3 ;se carga W con valor3
    movwf reg3 ;se carga reg3 con 50

    uno decfsz reg3 ;se decrementa el registro reg3 y si el valor es cero
    goto uno ;se salta a la siguiente instruccion, sino, se continua
    ;decrementandolo
    decfsz reg2 ;igual que el anterior
    goto dos
    decfsz reg1 ;igual al anterior
    goto tres
    retlw 00 ;termina la subrutina retardo y vuelve al programa principal

    end
    ;————————————————————————
    ; Fusibles de programacion

    ; Osc XT
    ; Watchdog OFF
    ; Code protect OFF
    ; Power-Up-Timer ON

    ; Micro. PIC16C84
    ;=========================================================================

    de antemano gracias y espero tu ayuda
    [/cita][/cita]

  3. Eliud

    Disculpa..pero la protoboard la conectaste a la compu a traves de algun puerto…? y si es asi cual fue?

  4. Makinolo Autor del artículo

    La protoboard en si no se conecta a nada, lo que se conecta es el PIC.
    El PIC lo he conectado al puerto serie del PC a traves de un enlace de infrarrojos, aunque lo mas habitual y sencillo es hacerlo a través de un integrado bastante común llamado MAX232 que convierte los niveles CMOS del PIC en niveles TTL que son los que usa el puerto serie del PC.

  5. eugenio vic

    nescesito hacer una practica en un protoboard de un sumador de 2 bitz+2 +1 del signocomo lo puedo hacer

Deja una respuesta

Tu dirección de correo electrónico no será publicada.