Translate, Traductor

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

miércoles, 19 de octubre de 2016

Hola Mundo con el PIC 16F88

Este es un ejemplo de uso del PIC 16F88, donde usamos una configuración básica para hacer prender y apagar un LED con un intervalo de 1 segundo.


Fritzing


Hacemos uso de información en entradas anteriores donde explicaba sobre los Bits de configuración y una plantilla básica.

El ejemplo se compilo con la versión 3.5 del MPLAB X IDE y se uso un programador PICKIT 3

El código fuente completo lo puedes encontrar en GitHub y el vídeo de como funciona en Youtube.

Clik aqui para el Repositorio en GitHub




Revisemos el programa:

1  Importamos la librería del Microcontrolador:




2  Escribimos los Bits de configuración del micro, esto lo hice con la herramienta del MPLAB que nos facilita la generación de la configuración:



Esta es una vista de la Herramienta de configuración de Bits que esta en la parte inferior de la ventana del MPLA IDE:



3  Asignamos memoria de usuario a las variables, esto lo hacemos a partir de la posición 0x20 que es donde empiezan los GPR (Registro de Propósito General, lo podes consultar en el manual)



4  Iniciamos la configuración de los puertos:



5  Y comenzamos a escribir el programa:


Te invito a Que descargues el código fuente y lo analices: Clik aqui para el Repositorio en GitHub


viernes, 6 de julio de 2012

PWM con microcontrolador

Vamos a implementar el PWM (para que recuerden que es PWM en la Wikipedia) con un microcontrolador 16F886. la idea es usar el modulo de PWM que traen algunos Microcontroladores PIC.


Usaremos el pin RB2/CCP1 com salida donde tendremos el pulso de ancho variable.
Se usa un comparador que activa un bit cuando el valor del registro PR2 coincide con la parte alta del TMR2, en ese momento el TMR2 toma el valor 00, luego el bit se pone en cero cuando otro comparador detecta que la parte del TMR2 y el CCPR1H son iguales.

En PR2 se asigna el periodo   T = (PR2 + 1)*4*Tosc * Valor predivisor TMR2
En CCPR1L se carga el ancho del pulso, que luego pasa a CCPR1H

Analicemos:


MOVLW   B'00001101'
MOVWF        CCP1CON ; Modo PWM <3,2,1,0>, bit <5,4> en ceros
MOVLW    B'00000100' ; <1x> Un prescaler de 16 da un periodo apox de 4ms y una frec de 244Hz
                        ; <01> Un prescaler de 4 da un periodo apox de 1ms y una frec de 1KHz
                        ; <00> Un prescaler de 1 da un periodo apox de 250us y una frec de 4KHz
MOVWF    T2CON ; Prescaler 16 <1,0> y activa el TMR2 <2>


Veamos el circuito:

Sencillo!!!

Ahora un video del circuito funcionando:



El codigo fuente:


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
d1, d2
ENDC


ORG 00
GOTO INICIO

RET_100MS ;99998 cycles
movlw 0x1F
movwf d1
movlw 0x4F
movwf d2
Delay_0
decfsz d1, f
goto $+2
decfsz d2, f
goto Delay_0

;2 cycles
goto $+1
RETURN

INICIO NOP
BANKSEL   OSCCON
      MOVLW B'01101100'
      MOVWF OSCCON
BANKSEL TRISA
CLRF TRISB
MOVLW B'00000000' ; Configuro RC2 como sailida
MOVWF PORTC
MOVLW .255
MOVWF PR2 ; Asigno el periodo
BANKSEL PORTB
MOVLW 0XFF
MOVWF PORTB
MOVLW B'00001101'
MOVWF CCP1CON ; Modo PWM <3,2,1,0>, bit <5,4> en ceros
MOVLW B'00000100' ; <1x> Un prescaler de 16 da un periodo apox de 4ms y una frec de 244Hz
; <01> Un prescaler de 4 da un periodo apox de 1ms y una frec de 1KHz
; <00> Un prescaler de 1 da un periodo apox de 250us y una frec de 4KHz
MOVWF T2CON ; Prescaler 16 <1,0> y activa el TMR2 <2>
CLRF CCPR1L ; Duty en cero (0)


NUEVO MOVLW .0
MOVWF CCPR1L
CALL RET_100MS


CICLO NOP
MOVLW .10
ADDWF CCPR1L,F
CALL RET_100MS
MOVLW .250
XORWF CCPR1L,W
BTFSS STATUS,Z
GOTO CICLO
GOTO NUEVO

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