Translate, Traductor

Mostrando entradas con la etiqueta MPLAB IDE. Mostrar todas las entradas
Mostrando entradas con la etiqueta MPLAB IDE. Mostrar todas las entradas

jueves, 16 de enero de 2014

Tutorial de Microcontroladores Básico

Con este video voy a dar por iniciada una serie de videos que iré publicando semana a semana sobre la Programación de Microcontroladores PIC (Microchip) en lenguaje ensamblador.

Esta serie tiene como objetivos hacer una introducción a la programación de microcontroladores, apoyándome en la información que entrega el fabricante y con base en ejemplos, aunque al principio será necesario un poco de teoría con los conceptos básicos, pondré a su disposición los videos, las diapositivas usadas en los videos y el código fuente de los ejemplos.

Espero les sea muy útil!!!!


A cacharrear!!!!


domingo, 12 de enero de 2014

El nuevo MPLABX, reemplazo del MPLAB



Para programar microcontroladores PIC la empresa fabricante de estos (MICROCHIP) nos regala todas las herramientas necesarias para desarrollar, una de ellas llamada MPLAB, que es un entorno de desarrollo completo para la programación de microcontroladores. Pues resulta que nuestros amigos de MICROCHIP liberaron un nuevo entorno para que programemos llamado MPLABX, que es una notable mejora al anterior.



¿Que tiene de nuevo?
Pues que esta optimizado para trabajar en lenguaje C, la configuración de cada proyecto es independiente y algo que me parece muy bueno es que es MULTIPLATAFORMA, lo que significa que nos funciona tanto en Windows como en Linux y en Mac OS.

Aquí les dejo un video de introducción al MPLABX trabajando con el lenguaje ensamblador!!!
http://youtu.be/sWHAiXmJ2Hg

enlace

http://youtu.be/sWHAiXmJ2Hg



A cacharrear pues!!!!

sábado, 7 de julio de 2012

Monitor de posición con PIC16F886

Monitor de posición o indicador de nivel!

Con este circuito podemos saber la posición de un potenciometro que esta conectado al modulo conversor análogo a digital de un microcontrolador PIC16F886.

El potenciometro puede ser reemplazado con cualquier tipo de sensor para así poder monitorear el estado o nivel de cualquier variable.

otros ejemplos de uso del conversor análogo a digital:

conversor-analogo-a-digital-con-pic-12f675
conversor-analogo-a-digital-con-pic-16f886
secuenciador-variable-usando-el-tmr0-y-converor-analogo-a-digital


Circuito



Video:



Codigo fuente:


LIST P=16F886
INCLUDE P16F886.INC
ERRORLEVEL -302

__CONFIG _CONFIG1, _INTOSCIO & _WDT_OFF & _PWRTE_OFF & _MCLRE_OFF & _CP_OFF & _CPD_OFF & _BOREN_ON & _IESO_OFF & _FCMEN_OFF & _LVP_OFF & _DEBUG_OFF
  __CONFIG _CONFIG2, _BOR40V & _WRT_OFF


CBLOCK 0X20
VAL1, PDel0, DISP
ENDC

ORG 00H
GOTO CONFIGURA


TABLA ADDWF PCL,F
RETLW B'00111111'
RETLW B'00000110'
RETLW B'01011011'
RETLW B'01001111'
RETLW B'01100110'
RETLW B'01101101'
RETLW B'01111101'
RETLW B'00000111'
RETLW B'01111111'
RETLW B'01101111' ;9


MOSTRAR MOVF DISP,W
CALL TABLA
MOVWF PORTB
RETURN

PDelayAD   movlw     .123       ; 1 set number of repetitions
        movwf     PDel0     ; 1 |
PLoop0AD   clrwdt               ; 1 clear watchdog
        decfsz     PDel0, 1   ; 1 + (1) is the time over?
        goto       PLoop0AD     ; 2 no, loop
PDelL1AD   goto PDelL2AD ; 2 cycles delay
PDelL2AD   clrwdt               ; 1 cycle delay
        return               ; 2+2 Done


CONFIGURA CLRF     PORTB
BANKSEL   OSCCON
      MOVLW B'01101100'
      MOVWF OSCCON
      BANKSEL ADCON1
  MOVLW B'00000000'
  MOVWF ADCON1
BANKSEL ANSEL
MOVLW B'00000001'
      MOVWF ANSEL
CLRF     ANSELH
BANKSEL TRISB
MOVLW .1
MOVWF TRISA
CLRF     TRISB
CLRF     TRISC
BANKSEL ADCON0
      MOVLW B'11000001'
      MOVWF ADCON0
      BANKSEL PORTB
CLRF PORTA
CLRF PORTB
CLRF PORTC


CICLO NOP
AD_LOOP BSF ADCON0,GO
CALL PDelayAD
END_AD BTFSC ADCON0,GO
GOTO END_AD
MOVF ADRESH,W
MOVWF VAL1

CERO CLRW
XORWF VAL1,W
BTFSS STATUS,Z
GOTO UNO
MOVLW .1
MOVWF PORTB
GOTO CICLO

UNO MOVLW .32
SUBWF VAL1,W
BTFSC STATUS,C
GOTO DOS
MOVLW .2
MOVWF PORTB
GOTO CICLO

DOS MOVLW .64
SUBWF VAL1,W
BTFSC STATUS,C
GOTO TRES
MOVLW .4
MOVWF PORTB
GOTO CICLO

TRES MOVLW .96
SUBWF VAL1,W
BTFSC STATUS,C
GOTO CUATRO
MOVLW .8
MOVWF PORTB
GOTO CICLO

CUATRO MOVLW .128
SUBWF VAL1,W
BTFSC STATUS,C
GOTO CINCO
MOVLW .16
MOVWF PORTB
GOTO CICLO

CINCO MOVLW .160
SUBWF VAL1,W
BTFSC STATUS,C
GOTO SEIS
MOVLW .32
MOVWF PORTB
GOTO CICLO

SEIS MOVLW .192
SUBWF VAL1,W
BTFSC STATUS,C
GOTO SIETE
MOVLW .64
MOVWF PORTB
GOTO CICLO

SIETE MOVLW .224
SUBWF VAL1,W
BTFSC STATUS,C
GOTO CICLO
MOVLW .128
MOVWF PORTB
GOTO CICLO

END


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".    

domingo, 1 de julio de 2012

Encendido y apagado de una carga con un pulsador y PIC 16f886

El circuito permite el encendido y apagado de un LED desde un solo pulsador con el microcontrolador PIC16F886.



    LIST P=16F886

    INCLUDE P16F886.INC

    __CONFIG _CONFIG1, _INTOSCIO & _WDT_OFF & _PWRTE_OFF & _MCLRE_OFF & _CP_OFF & _CPD_OFF & _BOREN_ON & _IESO_OFF & _FCMEN_OFF & _LVP_OFF & _DEBUG_OFF
    __CONFIG _CONFIG2, _BOR40V & _WRT_OFF

CBLOCK 0X20
PDel0, PDel1, PDel2
ENDC


    ORG 00
    GOTO CONFIGURA
   

RETARDO  movlw     .150     ; 1 set number of repetitions (B)
        movwf     PDel0     ; 1 |
PLoop1  movlw     .232      ; 1 set number of repetitions (A)
        movwf     PDel1     ; 1 |
PLoop2  clrwdt              ; 1 clear watchdog
PDelL1  goto PDelL2         ; 2 cycles delay
PDelL2  goto PDelL3         ; 2 cycles delay
PDelL3  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
PDelL4  goto PDelL5         ; 2 cycles delay
PDelL5  goto PDelL6         ; 2 cycles delay
PDelL6  goto PDelL7         ; 2 cycles delay
PDelL7  clrwdt              ; 1 cycle delay
        return              ; 2+2 Done
 
   
CONFIGURA CLRF     PORTB
BANKSEL ANSEL
CLRF     ANSEL
CLRF     ANSELH
BANKSEL TRISB
MOVLW B'00000001'
MOVWF TRISB
BANKSEL PORTB

INICIO   BTFSS PORTB,0
GOTO INICIO
CALL RETARDO
MOVLW B'00010000'
XORWF PORTB,F


GOTO    INICIO
END


Para el celular






Circuito




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". 

martes, 12 de junio de 2012

Conversor Análogo a Digital con PIC 12F675

El conversor análogo a digital es un dispositivo que me permite digitalizar señales, en este caso vamos a medir el voltaje por el pin AN1 y si es mayor a 2.5 voltios activamos el LED conectado en GP2.

Circuito



QR para el celular


Código fuente



LIST P=12F675
INCLUDE P12F675.INC

ERRORLEVEL -302

; Trabajamos con un oscilador interno a 4Mhz
__CONFIG _CPD_OFF & _CP_OFF & _BODEN_ON & _MCLRE_OFF & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT

CBLOCK 0X20
d1, d2, VALOR
ENDC


ORG 00

GOTO INICIO

RET10MS ;9998 cycles
movlw 0xCF
movwf d1
movlw 0x08
movwf d2
Delay_0
decfsz d1, f
goto $+2
decfsz d2, f
goto Delay_0

;2 cycles
goto $+1
RETURN


INICIO NOP
CLRF GPIO
MOVLW B'00000111' ; 07H Configuro GP1, GP2, GP3 como pines
MOVWF CMCON ; digitales y no del comparador del micro
BANKSEL OSCCAL
CALL 3FFH ; Obtengo el valor de calibracion del oscilador
MOVWF OSCCAL ; y lo calibro con el OSCCAL
BANKSEL ADCON0 ; Configuro el AD
MOVLW B'00000101' ;          7          6        5      4     3 2       1    0
MOVWF ADCON0 ; justifico derecha, no uso, no uso, Vdd, canal AN1, GO, ad ON
BANKSEL ANSEL
MOVLW .2
MOVWF ANSEL ;CONFIGURO GP1/AN1 COMO ENTRADA ANALOGA
MOVLW .2
MOVWF TRISIO
BANKSEL GPIO


CICLO CALL RET10MS
BSF ADCON0,GO ; Inicio conversion
BTFSS ADCON0,GO ; Espero a que finalice la conversion
GOTO $-1
; Conversion finalizada
BANKSEL ADRESH
MOVF ADRESH,W ; Paso el dato tomado por el conversor a W
BANKSEL VALOR
MOVWF VALOR ; Almaceno el dato
MOVLW .128 ; pregunto si el dato es mayor a .128
SUBWF VALOR,W
BTFSS STATUS,C
GOTO MENOR ; Si el dato es Menor
GOTO MAYOR ; Si el dato es Mayor

MENOR BCF GPIO,2
BSF GPIO,0
GOTO CICLO
MAYOR BSF GPIO,2
BCF GPIO,0
GOTO CICLO

END


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". 



jueves, 7 de junio de 2012

Plantilla PIC 12F675

Plantilla para el microcontrolador 12F675
Un microcontrolador de 8 pines, 6 de ellos disponibles para entrada y salida, 1024 palabras de 14 bit's cada una, frecuencia máxima del oscilador igual a 20 MHz, oscilador interno de 4 MHz, característica interesante ya que no necesitaremos cristal, lo que nos ahorra dos pines, 128 Bytes de EEPROM, 64 Bytes de RAM.


Importante:

Estamos acostumbrados a que los puertos de los PIC's son llamados PORTx, en los micros de 8 pines son llamados GPIO y los pines GP0, GP1, GP2, GP3, GP4 y GP5



Plantilla



LIST P=12F675
INCLUDE P12F675.INC

ERRORLEVEL -302

; Trabajamos con un oscilador interno a 4Mhz

__CONFIG _CPD_OFF & _CP_OFF & _BODEN_ON & _MCLRE_OFF & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT


CBLOCK 0X20

ENDC



ORG 00

GOTO CONFIGURA



CONFIGURA  NOP
CLRF GPIO
MOVLW B'00000111' ; 07H Configuro GP1, GP2, GP3 como pines, no uso el comparador
MOVWF CMCON ; digitales
BANKSEL OSCCAL
CALL 3FFH ; Obtengo el valor de calibracion del oscilador
MOVWF OSCCAL
CLRF TRISIO
BANKSEL GPIO


INICIO


GOTO INICIO

END



; *    
; *      Copyright 2012 EDWTRON
; *    
; *      Este rpograma es software libre; usted puede redistribuirlo y/o modificarlo
; *      bajo los terminos de la GNU licencia publica general tal y como es publicada
; *      por la fundacion de software libre; bajo la version 2 de la licencia, o
; *      una version superior.
; *      Leer la licencia GNU gpl para mas detalles.

; *      This program is free software; you can redistribute it and/or modify
; *      it under the terms of the GNU General Public License as published by
; *      the Free Software Foundation; either version 2 of the License, or
; *      (at your option) any later version.
; *    
; *      This program is distributed in the hope that it will be useful,
; *      but WITHOUT ANY WARRANTY; without even the implied warranty of
; *      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
; *      GNU General Public License for more details.
; *    
; *      You should have received a copy of the GNU General Public License
; *      along with this program; if not, write to the Free Software
; *      Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
; *      MA 02110-1301, USA.
; *


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".

sábado, 26 de mayo de 2012

Contador de 0 a 99 con PIC 16F886

Éste programa es para un contador de 0 a 99 usando el metodo de la multiplexión.

    LIST P=16F886
    INCLUDE P16F886.INC
    ERRORLEVEL -302
    
    __CONFIG _CONFIG1, _INTOSCIO & _WDT_OFF & _PWRTE_OFF & _MCLRE_OFF & _CP_OFF & _CPD_OFF & _BOR_ON & _IESO_OFF & _FCMEN_OFF & _LVP_OFF & _DEBUG_OFF
    __CONFIG _CONFIG2, _BOR40V & _WRT_OFF
    
    CBLOCK    0X20
    PDel0, PDel1, DECENAS, UNIDADES
    ENDC
    


    ORG    00
    GOTO    CONFIGURA


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
     CLRF    ANSELH
     BANKSEL TRISB
     MOVLW    B'01101100'
     MOVWF    OSCCON
     MOVLW    B'00000000'
     MOVWF    TRISA
     MOVLW    B'00000000'
     MOVWF    TRISB
     MOVLW    B'00000000'
     MOVWF    TRISC
    BANKSEL    PORTB    ;paso al banco 0

    CLRF    PORTB
    CLRF    DECENAS
    CLRF    UNIDADES

INICIO    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    INICIO
    
INC_DECENAS    CLRF    UNIDADES
    INCF    DECENAS,F
    MOVLW    .10
    XORWF    DECENAS,W
    BTFSC    STATUS,Z
    CLRF    DECENAS
    CALL    VER
    GOTO    INICIO
        
    END

Plantilla y fusibles para programar el 16F88


Plantilla para trabajar con el PIC 16F88, esta configurado para trabajar con oscilador interno a 4 MHz

Seria interesante que la comparen con la plantilla de otro microcontrolador para que se den cuenta de las diferencias que hay cunado se cambia de referencia y que no es tan complicado

LIST P=16F88
INCLUDE P16F88.INC

__CONFIG    _CONFIG1, _CP_OFF & _CCP1_RB0 & _DEBUG_OFF & _WRT_PROTECT_OFF & _CPD_OFF & _LVP_OFF & _BODEN_ON & _MCLR_OFF & _PWRTE_ON & _WDT_OFF & _INTRC_IO
__CONFIG    _CONFIG2, _IESO_OFF & _FCMEN_OFF

CBLOCK 0X20

ENDC



ORG 00
GOTO CONFIGURA

;En este espacio podemos colocar los retardos y otras subrrutinas



CONFIGURA  NOP
BANKSEL TRISB
CLRF ANSEL
MOVLW B'01101100'
MOVWF OSCCON
        MOVLW     B'00000000'    ;  1 entrada, 0 salida
        MOVWF     TRISA
        MOVLW     B'00000000'    ;   1 entrada, 0 salida
        MOVWF     TRISB
BANKSEL PORTB
CLRF PORTB

INICIO  
       
       GOTO     INICIO



END