Translate, Traductor

sábado, 28 de abril de 2012

GUIA PARA PROGRAMAR UN MICROCONTROLADOR CON EL MPLAB Y EL PICKIT3


1 ABRIMOS EL MPLAB
2 ESCRIBIMOS EL PROGRAMA
3 COMPILAMOS EL PROGRAMA

     Si no sabemos como compilar el programa vamos a la guía de inicio del MPLAB ubicada en 

4 ESCOGEMOS EL PROGRAMADOR EN LA OPCION PROGRAMMER

 


NOS SALE EL SIGUIENTE AVISO Y LE DAMOS “OK”  EN EL OUTPUT NOS SALE LOS SIGUIENTE



ENTONCES DEBEMOS ACTIVAR EL PROGRAMADOR EN LA OPCION PROGRAMMER-SETTINGS


Y NOS ABRE


EN LA PESTAÑA “POWER”  HACEMOS CLIC EN   “Power target circuit from PICkit 3”


Y LE DAMOS ACEPTAR Y NOS APARECE Y LUEGO “OK” EN LA VENTANA  SIGUIENTE


Y EL OUTPUT NOS MUESTRA QUE SE RECONOCIO EL DISPOSITIVO





YA SOLO QUEDA  ENVIAR EL PROGRAMA AL MICRO.
HAY DOS CAMINOS, UNO POR EL MENU PROGRAMMER


Y EL OTRO CON LOS BOTONES EN EL MENU DE HERRAMIENTAS


EN EL OUTPUT NOS MUESTRA


Y LISTO, YA SOLO QUEDA QUE CACHARRIEMOS, PROGRAMANDO Y BORRANDO Y LO QUE QUIERAN

Copyright (C)  Edwin Espinosa  2012
    Permission is granted to copy, distribute and/or modify this document
    under the terms of the GNU Free Documentation License, Version 1.3
    or any later version published by the Free Software Foundation;
    with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
    A copy of the license is included in the section entitled "GNU
    Free Documentation License".

martes, 23 de noviembre de 2010

Programa basico en C para el 16f88

Este es el ejemplo en C para un PIC 18f88 que permite encender y apagar un led una vez por segundo conectado al pin RB0.



#include <16f88.h>
#fuses NOWDT, PUT, NOMCLR,BROWNOUT, NOLVP, NOCPD, NOWRT, NODEBUG, CCPB3, NOPROTECT, INTRC_IO, NOFCMEN, NOIESO

#use delay( clock = 8000000 ) /* reloj de 8 MHz */
#byte      puerto_b = 06           /* dirección del puerto B */
void main( void )
{
     set_tris_b( 0x00 );               /* puerto B como salidas */
     puerto_b = 0;                     /* Limpia el puerto */
     do{
          delay_ms( 1000 );
          bit_set( puerto_b, 0 );     //o esta   output_high(PIN_B0)
          delay_ms( 1000 );
          bit_clear( puerto_b, 0);      // o esta    output_high(PIN_B0)
     } while( TRUE );
}

seria bueno que lo comparan con el equivalente en ensamblador!!!

jueves, 14 de octubre de 2010

Contador de 0 a 99 con PIC

Actualizado 21 de junio de 2012 22:48

Implementacion de un contador de 0 a 99 con dos display de 7 segmentos y microcontrolador usando la tecnica de multiplexacion para solo usar un puerto del pic.

 VIDEO DE LA IMPLEMENTACION






CODIGO FUENTE PARA EL PIC

    LIST P=16F883
    INCLUDE P16F883.INC
    ERRORLEVEL -302
   
    __CONFIG _CONFIG1, _DEBUG_OFF & _LVP_OFF & _FCMEN_OFF & _IESO_OFF & _BOR_ON & _CPD_OFF & _CP_OFF & _MCLRE_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC
    __CONFIG _CONFIG2, _WRT_OFF
   
    CBLOCK    0X20
    PDel0, PDel1, DECENAS, UNIDADES
    ENDC
   


    ORG    00
    GOTO    CONFIGURA

;-------------------------------------------------------------
; Code generated by PDEL  ver 1.0  on 14/10/2010 at 03:01:16 p.m.
; Description: Waits 10000 cycles
;-------------------------------------------------------------
RET_10MS  movlw     .8        ; 1 set number of repetitions (B)
        movwf     PDel0     ; 1 |
PLoop1  movlw     .249      ; 1 set number of repetitions (A)
        movwf     PDel1     ; 1 |
PLoop2  clrwdt              ; 1 clear watchdog
        clrwdt              ; 1 cycle delay
        decfsz    PDel1, 1  ; 1 + (1) is the time over? (A)
        goto      PLoop2    ; 2 no, loop
        decfsz    PDel0,  1 ; 1 + (1) is the time over? (B)
        goto      PLoop1    ; 2 no, loop
PDelL1  goto PDelL2         ; 2 cycles delay
PDelL2  clrwdt              ; 1 cycle delay
        return              ; 2+2 Done
;-------------------------------------------------------------
       
TABLA    ADDWF    PCL,F
    RETLW    B'00111111'
    RETLW    B'00000110'
    RETLW    B'01011011'
    RETLW    B'01001111'
    RETLW    B'01100110'
    RETLW    B'01101101'
    RETLW    B'01111100'
    RETLW    B'00000111'
    RETLW    B'01111111'
    RETLW    B'01101111'
   
MOSTRAR    MOVF    UNIDADES,W    ;cargo el valor de las unidades
    CALL    TABLA
    BSF    PORTC,5    ;activo el display unidad
    BCF    PORTC,4    ;desactivo el display decena
    MOVWF    PORTB
    CALL    RET_10MS
    MOVF    DECENAS,W    ;cargo el valor de las decenas
    CALL    TABLA
    BCF    PORTC,5    ;desactivo el display unidad
    BSF    PORTC,4    ;activo el display decena
    MOVWF    PORTB
    CALL    RET_10MS
    RETURN
   
VER    CALL    MOSTRAR
    CALL    MOSTRAR
    CALL    MOSTRAR
    CALL    MOSTRAR
    CALL    MOSTRAR
    CALL    MOSTRAR
    CALL    MOSTRAR
    CALL    MOSTRAR    ;LOGRO UN RETARDO DE 160ms
    RETURN
   
CONFIGURA    NOP
    BANKSEL    ANSEL    ;paso al banco 3
    CLRF    ANSEL    ;Configura el porta como digital
    CLRF    ANSELH    ;Configura el portb como digital
    BANKSEL    TRISB    ;paso al banco 1
    CLRF    ANSEL
    MOVLW    0X00
    MOVWF    TRISA
    MOVLW    0X00
    MOVWF    TRISB
    MOVLW    0X00
    MOVWF    TRISC
    BANKSEL    PORTB    ;paso al banco 0
    CLRF    PORTB
    CLRF    DECENAS
    CLRF    UNIDADES

CICLO    CALL    VER    ;Esta rutina me sirve como un
            ;retarde de 20ms aprox
    INCF    UNIDADES,F
    MOVLW    .10
    XORWF    UNIDADES,W
    BTFSC    STATUS,Z
    GOTO    INC_DECENAS
    CALL    VER
    GOTO    CICLO
   
INC_DECENAS    CLRF    UNIDADES
    INCF    DECENAS,F
    MOVLW    .10
    XORWF    DECENAS,W
    BTFSC    STATUS,Z
    CLRF    DECENAS
    CALL    VER
    GOTO    CICLO
       
    END


Actualización:

Varias personas me han preguntado como poner un tope a la cuenta, es decir, como hacer que solo cuente hasta 12 o hasta 20 o hasta cualquier número entre 0 y 99, la explicación la deje en uno de los comentarios y el código con las modificaciones lo publique en GitHub:

 https://github.com/edwtron/xorwf/blob/master/contador0a99conTope.asm

fin actualización.




Circuito de la implementación


Para el celular
                         QR code

Copyright 2012  edwtron
       
Este DOCUMENTO es un DOCUMENTO LIBRE, usted puede redistribuirlo y/o modificarlo bajo los terminos de la GNU FDL tal y como es publicada por la fundacion de software libre; bajo la version 1.3 de la licencia, o  una version superior.
     Leer la licencia GNU gpl para mas detalles. 

    Permission is granted to copy, distribute and/or modify this document
    under the terms of the GNU Free Documentation License, Version 1.3
    or any later version published by the Free Software Foundation;
    with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
    A copy of the license is included in the section entitled "GNU
    Free Documentation License".  

miércoles, 13 de octubre de 2010

plantilla para pic de 8 pines el P12F629

Plantilla para un PIC que solo tiene 8 pines de los cuales podemos usar 6 pines, entre las diferencias con los pics que estamos acostumbrados a manejar es que el puerto es llamado GPIO y el para entradas o salidas digitales es el TRISIO. Como tiene comparadores, hay que configurar sl CMCON para que los pines finciones como digitales. Solo tiene dos bancos de memoria, es un PIC relativamente muy facil de usar.


LIST P=12F629
INCLUDE P12F629.INC
ERRORLEVEL -302
__CONFIG _CPD_OFF & _CP_OFF & _BODEN_ON & _MCLRE_OFF & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT
CBLOCK 0X20
;espacio para la declaracion de variables
ENDC
ORG 00
GOTO CONFIGURA

;espacio para las subrrutinas

CONFIGURA NOP
CLRF GPIO
MOVLW B'00000111' ; 07H Configuro GP1, GP2, GP3 como pines 
MOVWF CMCON ; digitales
BANKSEL OSCCAL ;para calibrar el oscilador interno
CALL 3FFH ; Obtengo el valor de calibracion del oscilador
MOVWF OSCCAL
CLRF TRISIO
BANKSEL GPIO
;Programa principal
CICLO



GOTO CICLO
END

Plantilla para programar con el 16f883

Esta es una plantilla para trabajar con el PIC 16F883 (y toda su familia), tiene diferencias con los viejos P16F873A (y su familia) en los bits de configuración, y que ya los pines digitales y análogos no se configuran en el ADCON1, ya se configuran en el ANSEL (para el porta) y ANSELH (para el portb), y se diferencia del P16F88 en que el ANSEL esta en el banco 1 de memoria, mientras que en el P16F883 están en el banco 3 de memoria.
Hay que tener en cuenta que tienes mas diferencias, como que el P16F883 tiene oscilador interno, entre otras,  pero como siempre digo, "Hay que leer el manual".

LIST P=16F883
INCLUDE P16F883.INC
ERRORLEVEL -302

__CONFIG _CONFIG1, _DEBUG_OFF & _LVP_OFF & _FCMEN_OFF & _IESO_OFF & _BOR_OFF & _CPD_OFF & _CP_OFF & _MCLRE_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC
__CONFIG _CONFIG2, _WRT_OFF

CBLOCK 0X20

ENDC



ORG 00
GOTO CONFIGURA

;LUGAR PARA SUBRRUTINAS

CONFIGURA NOP
BANKSEL ANSEL ;paso al banco 3
CLRF ANSEL ;Configura el porta como digital
CLRF ANSELH ;Configura el portb como digital
BANKSEL TRISB ;paso al banco 1
CLRF ANSEL
MOVLW 0X00
MOVWF TRISA
MOVLW 0X00
MOVWF TRISB
 MOVLW 0X00
 MOVWF TRISC
BANKSEL PORTB ;paso al banco 0

;PROGRAMA PRINCIPAL
CICLO


GOTO CICLO


END

sábado, 18 de septiembre de 2010

Sobre los bits de configuracion

Recuerden que los bits de configuracion dependen del microcontrolador que se va a trabajar y las  opciones que deseemos habilitar

Ejemplo

para seleccionar el tipo de oscilador tenemos varias opciones

_XT_OSC     Si el oscilador que vamos a usar es un cristal de cuarzo de menos de 4 MHz
_HS_OSC    Si el oscilador es mayor a 4MHz

y tiene mas opciones que podemos ver en el fichero de cabecera P16F88.INC

En una entrada anterior publique como usar los bits de configuracion


http://xorwf.blogspot.com
http://taller-electronica.blogspot.com


¿Y que problema hay en no entender??

sábado, 4 de septiembre de 2010

Plantilla para un programa en ensamblador con el PIC 16f88

A continuacion  el codigo fuente base para un programa con microcontroladores PIC en ensamblador, seria interesante que lo guardaran para tenerlo como plantilla a la hora de sentarse a cacharriar, yo lo mantengo como plantilla.asm, y cada vez que voy a realizar un trabajo, lo copio y lo pego en un archivo nuevo en el MPLAB, y asi ahorro trabajo y evito errores.

Esta plantilla esta para trabajar con un PIC  16f88,   ya en una entrada anterion habia explicado lo de los fusibles(CLICK  bits de configuracion)


En letras verdes voy a agregar algunos comentarios, recuerden que en el ensamblador los comentarios se colocan despues de un punto y coma " ; "

IMPORTANTE   el oscilador es de tipo externo con un cristal de 4MHz



;si se trabajara con otro microcontrolador solo seria cambiar la referencia del microcontrolador y la direccion de 
;memoria donde empizan los registros de proposito general.
                LIST           P=16F88
                INCLUDE   P16F88.INC
      

;Estas son las palabras de configuracion necesarias para este microconlador       
      __CONFIG _CONFIG1, _CP_OFF & _CCP1_RB0 & _DEBUG_OFF & _WRT_PROTECT_OFF & _CPD_OFF & _LVP_OFF & _BODEN_OFF & _MCLR_OFF & _PWRTE_OFF & _WDT_OFF & _XT_OSC
    

     __CONFIG    _CONFIG2, _IESO_OFF & _FCMEN_OFF

;dentro de esta directiva CBLOCK   se especifican las variables con las que voy a trabajar en el programa
                 CBLOCK               0X20

                 
                 ENDC



                 ORG                      00
                 GOTO                    CONFIGURA



;en esta parte o al final del programa puedo escribir las rutinas


;Este bloque lo uso para configurar los perofericos del microcontrolador
;primero configure todos los pines como digitales y despues cambio las X
;por unos y ceros, coloco un uno, si necesito una entrada, y un cero si lo
;que necesito es una salida.

CONFIGURA       NOP

                             BANKSEL                    TXSTA
                             CLRF                           ANSEL
                             MOVLW                       B'XXXXXXXX'
                             MOVWF                       TRISA
                             MOVLW                       B'XXXXXXXX'
                             MOVWF                       TRISB
                             BANKSEL                    TXREG


;Este es el bloque donde escribo el programa principal
INICIO                

                            ;programa principal


                             GOTO                           INICIO

                             END

; fin del programa

DESCARGAR EL FICHERO