Controladora motor cc con pic

picpersp.gif (2615 bytes)

up_bot.gif (3181 bytes)

 

controlad1.gif (74564 bytes)

El circuito siguiente utiliza el microcontrolador 16F84 de Microchip y puede sustituir al PC como interfaz de la controladora. Realiza las mismas funciones de control del motor:

- lee el estado de los interruptores de fin de carrera S1 y S2 y el de los pulsadores P1 y P2
- envía a los pines 2 y 3 del conector DB25 hembra  las combinaciones 01, 10 y 11 según  el estado de los pulsadores:
código de detención (11) si cualquier interruptor de fin de carrera (S1 o S2) está        activado.
código de apertura (01)  si el interruptor S2 (dispositivo cerrado) está activado y se pulsa P1 (abrir)
código de cierre (10) si el interruptor S1 (dispositivo abierto) está activado y se pulsa P2 (cerrar)

SEUDOCÓDIGO PARA CONTROLADORA


repetir
enviar 15 a portb
leer porta
si bit2 rutina pa
si bit1 rutina pb
fin

rutina pa
leer porta
si no bit0 (sb)
enviar 5 a portb
repetir rutina
salir

rutina pb
leer porta
si no bit4 (sa)
enviar 10 a portb
repetir rutina
salir

contrsch.jpg (55813 bytes)

micropic3.gif (83623 bytes)

micropic2.gif (61158 bytes)

 

Este es el listado en PicBasic del programa:

device 16f84 

dim n,t,sa,sb,pa,pb

symbol pulse=b.0

define portb=00000000

define porta=00010111

start:

outb(15)

sa=INPORTA & 16

sb=INPORTA & 1

Pa=INPORTA & 4

delayms(1)

Pb=INPORTA & 2

if pa=4 then gosub Puno

if pb=2 then gosub Pdos

goto start

Puno:

outb(5)

delayms(1)

sb=INPORTA & 1

if sb=0 then goto Puno

return

Pdos:

outb(10)

delayms(1)

sa=INPORTA & 16

if sa=0 then goto Pdos:

return

end

PROGRAMA EN ENSAMBLADOR MPASM:
;-----------------------------------------------------
; (C) Leading Edge Technology Ltd
; --- Pic Basic Compiler V4.6 ---
; Website: http://LET.cambs.net
; EMail: johnmorr@mail.keyworld.net
;-----------------------------------------------------

W    equ    00
F    equ    01

    LIST    p=16F84 , r=DEC
; ----- DIM N,T,SA,SB,PA,PB -----
NTMP    equ    20
TTMP    equ    21
SA    equ    22
SB    equ    23
PA    equ    24
PB    equ    25
; ----- DEFINE PORTB=00000000 -----
    movlw     0
    tris    06
; ----- DEFINE PORTA=00010111 -----
    movlw     23
    tris    05
START    ; ----- OUTB(15) -----
    movlw     15
    movwf     6
; ----- SA=INPORTA & 16 -----
    movf    05,W
    andlw    16
    movwf     SA
; ----- SB=INPORTA & 1 -----
    movf    05,W
    andlw    1
    movwf     SB
; ----- PA=INPORTA & 4 -----
    movf    05,W
    andlw    4
    movwf     PA
; ----- PB=INPORTA & 2 -----
    movf    05,W
    andlw    2
    movwf     PB
; ----- IF PA=4 THEN GOSUB PUNO -----
    movlw     4
    xorwf    PA,W
    btfss    03,02
    goto    pb_lab2
    call    PUNO
pb_lab2
; ----- IF PB=2 THEN GOSUB PDOS -----
    movlw     2
    xorwf    PB,W
    btfss    03,02
    goto    pb_lab3
    call    PDOS
pb_lab3
    goto    START
PUNO    ; ----- OUTB(5) -----
    movlw     5
    movwf     6
; ----- SB=INPORTA & 1 -----
    movf    05,W
    andlw    1
    movwf     SB
; ----- IF SB=0 THEN GOTO PUNO -----
    movlw     0
    xorwf    SB,W
    btfss    03,02
    goto    pb_lab4
    goto    PUNO
pb_lab4
    return
PDOS    ; ----- OUTB(10) -----
    movlw     10
    movwf     6
; ----- SA=INPORTA & 16 -----
    movf    05,W
    andlw    16
    movwf     SA
; ----- IF SA=0 THEN GOTO PDOS: -----
    movlw     0
    xorwf    SA,W
    btfss    03,02
    goto    pb_lab5
    goto    PDOS
pb_lab5
    return
    END
 

Volcado hex del programa de la controladora para motor cc:

:1000000000306600173065000F3086000508103993

:10001000960005080139970005080439980005087D

:100020000239990004301806031D17281D200230DC

:100030001906031D1C282820042805308600050801

:100040000139970000301706031D27281D280800D6

:100050000A30860005081039960000301606031D88

:06006000322828280800E8

:00000001FF