Translate, Traductor

Mostrando entradas con la etiqueta compilar. Mostrar todas las entradas
Mostrando entradas con la etiqueta compilar. Mostrar todas las entradas

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

viernes, 6 de julio de 2012

Secuenciador usando el TMR0 de los PIC's

En este programa controlamos una secuencia en 8 LED's manejando el retardo con el TMR0.

Circuito


Programa para el PIC


   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
CUENTA
ENDC


      ORG 0X00
      GOTO CONFIGURA
     
      ORG 0X04
      GOTO INTERRUPCION
      ORG 0X05

INTERRUPCION DECFSZ CUENTA,F
GOTO SALE
RLF PORTB
MOVLW .3
MOVWF CUENTA
SALE MOVLW .60
MOVWF TMR0
BCF INTCON,T0IF
RETFIE
 
   
CONFIGURA CLRF     PORTB
BANKSEL ANSEL
CLRF     ANSEL
CLRF     ANSELH
BANKSEL TRISB
CLRF     TRISB
BANKSEL OPTION_REG
MOVLW B'00000111'
MOVWF OPTION_REG
MOVLW B'10100000'
MOVWF INTCON
BANKSEL PORTB

MOVLW .60
MOVWF TMR0
MOVLW .1
MOVWF PORTB
MOVLW .20
MOVWF CUENTA

CICLO   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, 5 de julio de 2012

El timer TMR0 en los PIC con ejemplo


El timer TMR0 en los PIC

Es un modulo que sirve como contador o como temporizador de 8 bit's.
Funcionando como temporizador el TMR0 es un registro donde yo puedo almacenar un valor y este se va incrementando de 1 en 1 con los ciclos de instruccion, es decir, con cada ciclo se incrementa en 1 el TMR0, cuando la cuenta llega a 255 y pasa a 0 (cero) se porduce una interrupcion por desborde del TMR0, recordemos que en un registro de 8 Bit's el valor mas alto que se puede almacenar es 255 y que si lo incrementamos estando en 255 pasa a cero, y es a esto a lo que se le denomina desborde.

Cual seria la ventaja entonces de usar el timer TMR0?


Cuando necesitemos temporizar, o lo que normalmente llamamos un retardo, no necesitaremos las acostumbradas rutinas para retardos, esto lo vamos a ver con un ejemplo.

El TMR0 tiene las siguientes caracteristicas:

-se puede leer y escribir
-puede trabajar con relog externo o interno
-detecta el flanco de subida o bajada del relog externo
-tiene un prescaler de 8 bit´s
-tiene una interrupcion por desborde de la cuenta de 255 a 0

los registros asociados a el son el TMR0, INTCON y el OPTION_REG

El bit T0CS (OPTION 2) a 1 trabaja como temporizador, 0 trabaja como contador

El bit T0SE (OPTION 4) en modo contador a 1 flanco descendente, 0 flanco ascendente

El bit PSA (OPTION 3) 0 prescaler al temporizador, 1 prescaler al perro guardian WDT

Cuando se desborda el TMR0, se activa  el bit 2 de INTCON (T0IF) y si el T0IE esta activado el T0IF generara interrupcion y se debe borrar por software cuando se atienda la interrupcion

Para calcular el tiempo de temporizacion

Tiempo = 4 * Tosc * (256 - valor cargado en TMR0)*(Rango presaler)

donde

Tocs  =  1 / Fosc (frecuencia del oscilador)
   

Entonces si necesitamos un determinado tiempo podemos despejar TMR0 y hallar su valor:

                        Tiempo
TMR0 =    ----------------------------    -   256
             4 * Tosc * Prescaler

Formula que nos dara un valor muy aproximado del Tiempo


Empecemos la configuración

Configuramos el OPTION_REG

BANKSEL OPTION_REG
MOVLW B'00000000'

ANALICEMOS

BIT 7 Pull up PORTB Disable
BTI 6 interrupcion por flaco de subida en el INT Pin
BIT 5 fuente del clock para el TMR0, internal 1 ciclo ed intruccion (1/Fosc)
BIT 4 Flanco de bajada para el incremento del TMR0
BIT 3 Prescaler asignado al TMR0
BIT 2-0 Division del prescaler



Configuramos el INTCON

Registro donde activamos las interrupciones globales y la del TMR0

MOVLW B'10100000'
                MOVWF OPTION_REG


BIT 7 Activamos las interrupciones Globales
BIT 6 interrupciones de otros perifericos desactivadas
BIT 5 Habilitamos la interrupcion por desborde en el TMR0
BIT 4 desabilitamos interrupcion externa INT
BIT 3 desabilitamos interrupcion por cambio en el PORTB
BIT 2 bandera interrupcion en TMR0
BIT 1 bandera interrupcion en INT
BIT 0 bandera interrupcion por cambio en PORTB



Ejemplo

Vamos a crear una señal de 1 KHz usando el TMR0.



Código 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

ENDC

      ORG 0X00
      GOTO CONFIGURA
     
      ORG 0X04
      GOTO INTERRUPCION
      ORG 0X05

INTERRUPCION COMF PORTB,F
MOVLW .7
MOVWF TMR0
BCF INTCON,T0IF
RETFIE
 
   
CONFIGURA CLRF     PORTB
BANKSEL ANSEL
CLRF     ANSEL
CLRF     ANSELH
BANKSEL TRISB
CLRF     TRISB
BANKSEL OPTION_REG
MOVLW B'00000000'
MOVWF OPTION_REG
MOVLW B'10100000'
MOVWF INTCON
BANKSEL PORTB

CLRF TMR0
CLRF PORTB


INICIO  GOTO     INICIO

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











sábado, 2 de junio de 2012

Contador de 0 a 9999 con pulsador

Cada vez que se pulse se incrementa una unidad y se muestra en los displays

Circuito esquematico


Código fuente




    LIST P=16F886
    INCLUDE P16F886.INC
    ERRORLEVEL -302
 ; hay que cacharrear
    __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, CENTENAS, UMIL
    ENDC



ORG 00
GOTO CONFIGURA
; hay que cacharrear
;-------------------------------------------------------------
; Code generated by PDEL  ver 1.0  on 10/13/2010 at 10:24:44 PM
; 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 CLRF PORTC
MOVF UNIDADES,W ;cargo el valor de las unidades
CALL TABLA
BSF PORTC,5 ;activo el display unidad
MOVWF PORTB
CALL RET_10MS
BCF PORTC,5
MOVF DECENAS,W
CALL TABLA
BSF PORTC,4
MOVWF PORTB
CALL RET_10MS
BCF PORTC,4
MOVF CENTENAS,W
CALL TABLA
BSF PORTC,3
MOVWF PORTB
CALL RET_10MS
BCF PORTC,3
MOVF UMIL,W
CALL TABLA
MOVWF PORTB
BSF PORTC,2
CALL RET_10MS
BCF PORTC,2

RETURN

VER CALL MOSTRAR
CALL MOSTRAR
CALL MOSTRAR
CALL MOSTRAR
CALL MOSTRAR
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'00000011'
MOVWF    TRISA
MOVLW    B'00000000'
MOVWF    TRISB
MOVLW    B'00000000'
MOVWF    TRISC
BANKSEL    PORTB    ;paso al banco 0
; hay que cacharrear
CLRF    PORTB
CLRF    UMIL
CLRF    CENTENAS
CLRF    DECENAS
CLRF    UNIDADES

INICIO CALL MOSTRAR
BTFSS PORTA,0
GOTO INICIO

; hay que cacharrear
CALL VER

INCF UNIDADES,F
MOVLW .10
XORWF UNIDADES,W
BTFSS STATUS,Z
GOTO INICIO


CLRF UNIDADES
INCF DECENAS,F
MOVLW .10
XORWF DECENAS,W
BTFSS STATUS,Z
GOTO INICIO

CLRF DECENAS
INCF CENTENAS,F
MOVLW .10
XORWF CENTENAS,W
BTFSS STATUS,Z
GOTO INICIO

CLRF CENTENAS
INCF UMIL,F
MOVLW .10
XORWF UMIL,W
BTFSS STATUS,Z
GOTO INICIO
CLRF UMIL
GOTO INICIO


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

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