Programa asm o c para pic16f84a para control motor pap

Hola:

Me costó lo suyo porque usas técnicas muy obsoletas.
Código:
;********************************************************
;
;    Movimiento de un motor de pasos, 
;    MOTOR DE 48 PASOS POR VUELTA
;    1 PASO CADA 1.25SEG  A 32768KHz
;
;        RB3    RB2    RB1    RB0
;        
;        1    0    1    0
;        1    0    0    1    AVANCE, LOS 1 SON ON        
;        0    1    0    1    SE SUPONE A TRAVÉS DE ULN2003
;        0    1    1    0
;
;*******************************************************

;ZONA DE DATOS *****************************************

    LIST     P=16F88
    INCLUDE    <P16F88.INC>
    __CONFIG    _CONFIG1, _CP_OFF & _CCP1_RB0 & _DEBUG_OFF &  _WRT_PROTECT_OFF & _CPD_OFF & _LVP_OFF & _BODEN_OFF &  _MCLR_ON & _PWRTE_ON & _WDT_OFF & _XT_OSC
    __CONFIG    _CONFIG2, _IESO_OFF & _FCMEN_OFF

;   Oscilador cristal externo 4 MHz, con dos condensadores de 22 pF.

; _CP_OFF: Protección de código DESACTIVADO.
; _DEBUG_OFF: Debug en circuito DESACTIVADO.
; _WRT_PROTECT_OFF: Protección a escritura en memoria de programa DESACTIVADO.
; _CPD_OFF: Protección de código de datos DESACTIVADO.
; _LVP_OFF: Programación en baja tensión DESACTIVADO.
; _BODEN_OFF: Reset por Brown-out DESACTIVADO.
; _MCLRE_ON: Reset por pin externo ACTIVADO.
; _PWRTE_ON: Retraso al reset ACTIVADO.
; _WDT_OFF: Watchdog DESACTIVADO.
; _XT_OSC: Oscilador externo del tipo XT.

; _IESO_OFF: Modo de intercambio de externo a interno DESACTIVADO.
; _FCMEN_OFF: Monitor de CLK DESACTIVADO.

;*******************************
;    DEFINICIÓN DE REGISTROS
;********************************
    CBLOCK 0x20
    POS    ;Aquí va el número de paso de 1 a 4
    CUENTA ;Cuenta cada interrupción de 0.25 segundos, a las 5 dá un paso
    RETARDO
    ENDC

    ORG    0X0000
    GOTO     SETEOS

    ORG    0X0004
    GOTO    INTERR

    ORG    0X0008
SETEOS    
    BANKSEL    ANSEL    ;TRABAJO BANCO 1
    clrf    ANSEL    ; Puertos digitales.
    MOVLW    B'11110000'    ;BITS BAJOS = SALIDA
    MOVWF    TRISB
    MOVLW    B'11111111'
    MOVWF    TRISA
    BANKSEL INTCON
    BCF    INTCON, GIE
    BSF    INTCON, INT0IE
    BCF    INTCON, INT0IF
    BANKSEL PORTA
    MOVLW    .1
    MOVWF    POS
    CLRF    CUENTA

;**************************************ESPERA 1 BOTÓN************************
ESPERA    
    BTFSS    PORTA, 0    
    GOTO    ADEL
    BTFSS    PORTA, 1
    GOTO    ATRAS
    BTFSS    PORTA, 2
    GOTO     AVANCE            
    CLRF    PORTB        ;APAGA TODO PUES ESTÁ EN REPOSO
    GOTO    ESPERA


;****************************************ADELANTE****************************
;                       MUEVE UN PASO Y VUELVE
;****************************************************************************
ADEL    
    CALL    TIEMPO
    BTFSC    PORTA, 0
    GOTO    ESPERA        ;RUIDO    
    INCF    POS
    MOVLW    .5
    SUBWF    POS,0
    BTFSS    STATUS, Z
    GOTO    NA
    MOVLW    .1
    MOVWF    POS
NA    CALL     PULSOS
    CALL    TIEMPO
    CALL    TIEMPO        ;ESPERA ESTABILIZARSE
    GOTO    ESPERA
        
;****************************************ATRAS****************************
;                       MUEVE UN PASO Y VUELVE
;****************************************************************************
ATRAS    
    CALL    TIEMPO
    BTFSC    PORTA, 1
    GOTO    ESPERA        ;RUIDO    
    DECF    POS
    BTFSS    STATUS, Z    ;controlo no baje de 1, si es 0 va a 4
    GOTO    NT        
    MOVLW    .4
    MOVWF    POS
NT    CALL     PULSOS
    CALL    TIEMPO        ;ESPERA ESTABILIZARSE
    CALL    TIEMPO
    GOTO    ESPERA


;****************************************AVANCE********************************
;                   SOLO SE SALE CON STOP
;******************************************************************************

AVANCE    
;    CLRF    RTCC ¿Qué es RTCC? Si lo djo, da error.
    NOP    
    NOP
    BCF    INTCON, INT0IF
    BSF    INTCON,    GIE
    BSF    INTCON, INT0IE
    
QUEDA    
    BTFSS    PORTA, 3
    GOTO    PARA
    GOTO    QUEDA

;****************************************PARA**********************************

PARA    
    CALL    TIEMPO
    BTFSC    PORTA, 3
    GOTO     QUEDA        ;SI FUE UN RUIDO VUELVO
    CLRF    PORTB
    BCF    INTCON, GIE
    BCF    INTCON, INT0IF
    GOTO    ESPERA
;********************************************************************************



;**************************************TIEMPO RETARDO REBOTES*****************************
TIEMPO    
    MOVLW    .50
    MOVWF    RETARDO
TI    DECFSZ    RETARDO        ;RETARDO PARA REBOTES
    GOTO    TI
    RETURN
;*****************************************************************************************

;***************************************PULSOS*************************************
PULSOS    
    MOVLW    .1
    SUBWF    POS, 0
    BTFSS    STATUS, Z
    GOTO    SEG
    MOVLW     B'00001010'    ;1 CODIGO
    MOVWF    PORTB
    RETURN
SEG    MOVLW    .2
    SUBWF    POS, 0
    BTFSS    STATUS, Z
    GOTO    TER
    MOVLW     B'00001001'    ;2 CODIGO
    MOVWF    PORTB
    RETURN
TER    MOVLW    .3
    SUBWF    POS, 0
    BTFSS    STATUS, Z
    GOTO    CUAT
    MOVLW     B'00000101'    ;3 CODIGO
    MOVWF    PORTB
CUAT    MOVLW    .4
    SUBWF    POS, 0
    BTFSS    STATUS, Z
    GOTO    FINAL
    MOVLW     B'00000110'    ;4 CODIGO
    MOVWF    PORTB
FINAL    RETURN

;************************************INTERR***********************************
;                                CADA .25 DE SEGUNDO VIENE AQUÍ
;*****************************************************************************
INTERR    INCF    CUENTA
    MOVLW    .5
    SUBWF    CUENTA, 0
    BTFSS    STATUS, Z
    GOTO     VOLVER        ; SI NO LLEGÓ A 5
    CLRF    CUENTA        ; SI LLEGÓ A 5/4 AVANZO
    INCF    POS
    MOVLW    .5
    SUBWF    POS,0
    BTFSS    STATUS, Z
    GOTO    NIN
    MOVLW    .1
    MOVWF    POS
NIN    CALL     PULSOS
    CALL    TIEMPO
VOLVER    
    BCF    INTCON, INT0IF    ;BOORO BANDERA
    RETFIE

    END
Compila bien, no quiere decir que funcione como desees, puede hacer cosas raras.

Un saludo.
 
el esquema que puse yo es unipolar, pero como los motores que me interesa usar son bipolares decia de cambiarlo. ahora me he liado. te refieres al esquema bipolar que pusiste tu. no?
 
ok. es que por un momento me pareció que te referías al que puse yo. en fin. perdona la duda.
mañana lo compilo y pruebo con el proteus. cualquier cosa te comento.
 
Mirate esta pagina que explican cosas sobre el RTCC:
http://www.embeddedcodesource.com/developer/microchip_technology_58/ce345_rtcc
yo no entiendo como se usa, pero aqui dicen que la usan para optener algo en tiempo real.

Por otro lado, he intentado compilarlo yo y me da este error:
Error[113] C:\USERS\PEDRO PAVO\DOCUMENTS\PIC-PRUEBAS\16F84A\MADERO ASEMBLER BIPOLAR.ASM 209 : Symbol not previously defined (INT0IF)

si tu has podido compilarlo, pasame el Hex para ver como trabaja en proteus porfa.
 
Hola:

Ya se que se refiere al RTC. Reloj Calendario Tiempo Real. Se usan en los PIC que lo llevan incorporado ya en el mismo en capsulado, para el 16F84A o el 16F88 es externo.

Fig2403_DS1307.gif

http://www.pic16f84a.org/proteus.html#Proteus_Capitulo_24

En este caso no te hace falta. El ejemplo del libro viene bien hecho. El ejemplo que me pusiste es para un PIC de 16 bits, nosotros estamos con el de 8 bits.

Uso la versión MPLAB v8.84.

Al compilar me da estos valores de salida.
----------------------------------------------------------------------
Debug build of project `D:\PAP_PIC16F88\PAP_16F88.mcp' started.
Language tool versions: MPASMWIN.exe v5.44, mplink.exe v4.42, mplib.exe v4.42
Preprocessor symbol `__DEBUG' is defined.
Fri Jan 18 16:16:41 2002
----------------------------------------------------------------------
Clean: Deleting intermediary and output files.
Clean: Deleted file "D:\PAP_PIC16F88\PAP_16F88.o".
Clean: Deleted file "D:\PAP_PIC16F88\PAP_16F88.err".
Clean: Deleted file "D:\PAP_PIC16F88\PAP_16F88.hex".
Clean: Deleted file "D:\PAP_PIC16F88\PAP_16F88.lst".
Clean: Deleted file "D:\PAP_PIC16F88\PAP_16F88.cof".
Clean: Deleted file "D:\PAP_PIC16F88\PAP_16F88.mcs".
Clean: Done.
Executing: "C:\Archivos de programa\Microchip\MPASM Suite\MPASMWIN.exe" /q /p16F88 "PAP_16F88.asm" /l"PAP_16F88.lst" /e"PAP_16F88.err" /d__DEBUG=1
Message[302] D:\PAP_PIC16F88\PAP_16F88.ASM 57 : Register in operand not in bank 0. Ensure that bank bits are correct.
Message[302] D:\PAP_PIC16F88\PAP_16F88.ASM 59 : Register in operand not in bank 0. Ensure that bank bits are correct.
Message[302] D:\PAP_PIC16F88\PAP_16F88.ASM 61 : Register in operand not in bank 0. Ensure that bank bits are correct.
Message[305] D:\PAP_PIC16F88\PAP_16F88.ASM 90 : Using default destination of 1 (file).
Message[305] D:\PAP_PIC16F88\PAP_16F88.ASM 109 : Using default destination of 1 (file).
Message[305] D:\PAP_PIC16F88\PAP_16F88.ASM 155 : Using default destination of 1 (file).
Message[305] D:\PAP_PIC16F88\PAP_16F88.ASM 193 : Using default destination of 1 (file).
Message[305] D:\PAP_PIC16F88\PAP_16F88.ASM 199 : Using default destination of 1 (file).
Executing: "C:\Archivos de programa\Microchip\MPASM Suite\mplink.exe" /p16F88 "PAP_16F88.o" /u_DEBUG /z__MPLAB_BUILD=1 /z__MPLAB_DEBUG=1 /o"PAP_16F88.cof" /M"PAP_16F88.map" /W /x
MPLINK 4.42, Linker
Device Database Version 1.7
Copyright (c) 1998-2011 Microchip Technology Inc.
Errors : 0


Loaded D:\PAP_PIC16F88\PAP_16F88.cof.
----------------------------------------------------------------------
Debug build of project `D:\PAP_PIC16F88\PAP_16F88.mcp' succeeded.
Language tool versions: MPASMWIN.exe v5.44, mplink.exe v4.42, mplib.exe v4.42
Preprocessor symbol `__DEBUG' is defined.
Fri Jan 18 16:16:47 2002
----------------------------------------------------------------------
BUILD SUCCEEDED
Compilado, también puedes descargarlo en zip.
Código:
:020000040000FA
:020000000828CE
:020008006A2864
:10001000831603139B01F0308600FF3085008312A6
:1000200003138B130B168B10831203130130A000E4
:10003000A101051C2128851C2F28051D3B288601B0
:1000400019284A2005181928A00A05302002031D86
:100050002B280130A0004F204A204A2019284A208E
:1000600085181928A003031D37280430A0004F204D
:100070004A204A201928000000008B108B170B160D
:10008000851D432840284A208519402886018B1366
:100090008B1019283230A200A20B4C280800013026
:1000A0002002031D56280A30860008000230200274
:1000B000031D5D2809308600080003302002031D5F
:1000C00063280530860004302002031D69280630AD
:1000D00086000800A10A05302102031D7928A1012C
:1000E000A00A05302002031D77280130A0004F2010
:0600F0004A208B100900FC
:02400E00213F50
:02401000FC3F73
:00000001FF

En cuanto al INT0IF, así se llama para el 16F88. Para el 16F84A se llama T0IF. No me da error al compilar.

Suerte.
 

Adjuntos

  • PAP_16F88-4MHz.zip
    432 bytes · Visitas: 64
hola de nuevo. segun el isis del proteus, los botones funcionan algo diferente de lo esperado. el "play" o avance, pin 2, hace que quede armado a la espera de que se toque un boton pero no hace avance a 48 pasos por minuto que se esperan. cuando se le da al "avance rapido" pin 18, si esta en espera avanza rapido y si no no. lo mismo que el retroceso rapido, pin 17, que solo lo hace si esta en espera. y el stop, pin 1, hace que quede inactivo y no responde a nada, solo al play, pin 2, que lo pone en espera para poder empezar de nuevo.

deberia ir de la siguiente manera: al darle play, quedar en play asta darle al stop. y al darle al avance rapido o retroceso rapido, realizar la funcion de avance o retroceso asta que se suelte el boton. seria complicado de cambiar?
tambien he visto que tiene oscilador interno:
• Internal oscillator block:
- 8 user selectable frequencies: 31 kHz,
125 kHz, 250 kHz, 500 kHz, 1 MHz, 2 MHz,
4 MHz, 8 MHz
seria interesante no tener que ponerlo en la placa ademas de saber como controlar las funciones de tiempo para que de una vuelta por minuto a 48 pasos por vuelta.
tambien por otro lado se de un sitio donde ponen unas cervezas fresquitas y no voy porque no me gusta ir solo, te bienes ;).
mi rabia es que llego a entender la teorica, pero no he tocado nunca la practica y sin alguien al lado no lo acabaria. no imaginas cuanto te lo agradezco.

me ha gustado mucho ver que se mobia, es un gran avance para el exito. eres un crack. que ganas tengo de sacarme esta espinita y saber hacerlo yo.
 
Hola:

Me alegro que te haya funcionado algo, por algo se empieza. Me imagino que usas el esquema es justo abajo.
scaled.php



No se si haz pensado poner el de abajo. Tiene su código fuente que puse arriba.

Fig3013_MotorPAP.GIF



En tu esquema pone UNL2003, el de abajo L293.
¿Cuál estás usando?

hola de nuevo. segun el isis del proteus, los botones funcionan algo diferente de lo esperado. el "play" o avance, pin 2, hace que quede armado a la espera de que se toque un boton pero no hace avance a 48 pasos por minuto que se esperan. cuando se le da al "avance rapido" pin 18, si esta en espera avanza rapido y si no no. lo mismo que el retroceso rapido, pin 17, que solo lo hace si esta en espera. y el stop, pin 1, hace que quede inactivo y no responde a nada, solo al play, pin 2, que lo pone en espera para poder empezar de nuevo.

Si pasa estas cosas, si actúa así, es que se ha programado así aunque no seas consciente de ello. Por ejemplo. Quiero pulsar el botón A que significa Play, poner en marcha el motor PAP, si al pulsarlo, sólo retrocede dos pasos hacia atrás...

¿Qué impresión me da?

No actúa como quería. Así que mejor revisar paso a paso las órdenes indicadas.


deberia ir de la siguiente manera: al darle play, quedar en play asta darle al stop. y al darle al avance rapido o retroceso rapido, realizar la funcion de avance o retroceso asta que se suelte el boton. seria complicado de cambiar?

Mejor hazlo otra vez desde cero o fíjate en los ejemplo del libro lo que hace. Al menos usa pseudocódigos, es decir, escribes con tus palabras lo que quiere hacer con el PIC.

Ejemplo:
- Al pulsar el botón play, seguirá en play hasta
- que al pulsar Stop se detenga.
- Al pulsar avance rápido o
- retroceso rápido.
- realizar dicha función hasta que
- suelte el botón.

Cada línea escrita arriba, ya puedes usar instrucciones del ensamblador (ASM). haz de principio a fin de lo que quieres por cada botón y acciones, al final poco a poco lo lograrás. Requiere tiempo. Se puede ahcer, eso si, vuelvo a repetir, requiere tiempo y hacer pruebas y pruebas.


tambien he visto que tiene oscilador interno:
• Internal oscillator block:
- 8 user selectable frequencies: 31 kHz,
125 kHz, 250 kHz, 500 kHz, 1 MHz, 2 MHz,
4 MHz, 8 MHz
seria interesante no tener que ponerlo en la placa ademas de saber como controlar las funciones de tiempo para que de una vuelta por minuto a 48 pasos por vuelta.

Puedes configurar el oscilador interno, normalente a 4 MHz. Usted decide. ¿Cada cuánto tiempo quieres hacer los pasos del PAP cuando esté en marcha en play? ¿Y en retroceso rápido?

tambien por otro lado se de un sitio donde ponen unas cervezas fresquitas y no voy porque no me gusta ir solo, te bienes ;).
mi rabia es que llego a entender la teorica, pero no he tocado nunca la practica y sin alguien al lado no lo acabaria. no imaginas cuanto te lo agradezco.

me ha gustado mucho ver que se mobia, es un gran avance para el exito. eres un crack. que ganas tengo de sacarme esta espinita y saber hacerlo yo.


Suerte.
 
Edito: ha abido cruce de mensajes, este lo escribi sin ver el anterior tuyo.
para las pruebas con el compilado bipolar use su esquema, el bipolar. y antes use el unipolar en proteus y el programa hacia lo que digo.
mirare de seguir este consejo que creo que la unica manera de aprender es tirandome a la piscina, jeje.
mil gracias que me haas adelantado mucho.

Hola. he estado ntentando usar el componente l293 de las lbreras de proteus, para saber cual es cada patilla. el caso es que no se seguir pero no va con mi modificacion, es decir que o he puesto algo mal en el esquema o algo de menos.
te adjunto los archivos del proteus a ver si te valen y una imagen del esquema a ver si le ves mis fallos.
 

Adjuntos

  • maderografo.rar
    106 KB · Visitas: 45
Última edición:
Hola:

Sobre el L293, aquí hay información:

motore13.gif

http://www.iesleonardo.info/ele/pro...edro Ramos/control de motores paso a paso.htm

Se que este no es el procedimiento que quieres, con ello es bueno hacer un esquema a mano o a paint de lo que quieres hacer com indica abajo.

wpe10.gif


Aquí hay dos ejemplos para el 16F886 del oscilador interno tanto en asm como en C.
Código:
;
;                                EJEMPLO 4-1
;                        Autor: Mikel Etxebarria
;                        Orozko-Bizkaia, Septiembre 2010
;
;El oscilador interno
;
;Al seleccionar el oscilador interno, la frecuencia de trabajo se puede modificar dinámicamente
;ajustando los bits IRCF2:IRCF0 del registro OSCCON (postcaler de INTOSC). En este ejemplo el
;valor binario de las entradas RA2:RA0 se emplea para actualizar el OSCCON y seleccionar así
;diferentes frecuencias de trabajo.
;
;RB0 cambia de estado cada cierto tiempo mediante el empleo de una rutina de temporización que 
;consume unos 500000 ciclos (Tc). Al variar la frecuencia de trabajo, se varía la duración de cada
;cilco (TC) y por tanto el tiempo en el que RB0 cambia de estado y que se puede apreciar claramente
;Los tiempos se resumen en la siguiente tabla
;
;RA2:RA0    F            Tc            Tiempo
;------        --------    -------        ----
;000        31 KHz        129 uS        64.5 s
;001        125 KHz        32 uS        16 s
;010        250 KHz        16 uS        8 s
;011        500 KHz        8 uS        4 s
;100        1 MHz        4 uS        2 s
;101        2 MHz        2 uS        1 s
;110        4 MHz        1 uS        0.5 s
;111        8 MHz        0.5 uS        0.25 s

        
        List    p=16F886        ;Tipo de procesador
        include    "P16F886.INC"    ;Definiciones de registros internos
        #define Fosc 4000000    ;Velocidad de trabajo

;Ajusta los valores de las palabras de configuración durante el ensamblado.Los bits no empleados
;adquieren el valor por defecto.Estos y otros valores se pueden modificar según las necesidades

        __config    _CONFIG1, _LVP_OFF&_PWRTE_ON&_WDT_OFF&_EC_OSC&_FCMEN_OFF&_BOR_OFF    ;Palabra 1 de configuración
        __config    _CONFIG2, _WRT_OFF&_BOR40V                                    ;Palabra 2 de configuración

Temp_1    equ    0x20
Temp_2    equ    0x21                
Temp_3    equ    0x22                ;Variables para los bucles de temporización

        org    0x00
        goto    Inicio            ;Vector de reset
        org    0x05            

;Rutina de temporización de unos 500000 ciclos de instrucción (Tc). Se realiza con tres bucles anidados.
;En función de la velocidad seleccionada según el valor de OSCCON, se consiguen temporizaciones
;diferentes.
Delay        movlw    .2
            movwf    Temp_1
Delay_3        movlw    .243
            movwf    Temp_2
Delay_2        clrf    Temp_3
Delay_1        nop
            decfsz    Temp_3,f    
            goto    Delay_1        ;Delay_1=256*4=1024 ciclos
            decfsz    Temp_2,F
            goto    Delay_2        ;Delay_2=(Delay_1*243)+(243*4)=249804 ciclos
            decfsz    Temp_1,F
            goto    Delay_3        ;Delay_3=(Delay_2*2)+(2*4)=499616 ciclos
            return

;Programa principal        
Inicio        clrf    PORTB        ;Desconecta salidas
            bsf        STATUS,RP0
            bsf        STATUS,RP1    ;Selecciona banco 3
            clrf    ANSEL        ;Puerta A digital
            clrf    ANSELH        ;Puerta B digital
            bcf        STATUS,RP1    ;Selecciona banco 1
            movlw    b'00111111'
            movwf    TRISA        ;RA5-RA0 entradas
            movlw    b'11111110'
            movwf    TRISB        ;RB0 se configura como salida

            bsf        OSCCON,SCS    ;Oscilador interno como fuente prinipal de reloj

            bcf        STATUS,RP0    ;Selecciona banco 0

Loop        movlw    0x01
            xorwf    PORTB,F        ;RB0 cambia de estado
            call    Delay        ;Temporiza 500000 ciclos de instrucción.
            movf    PORTA,W        
            andlw    b'00000111'
            movwf    Temp_1        ;Lee las entradas RA2:RA0
            rlf        Temp_1,F
            rlf        Temp_1,F
            rlf        Temp_1,F
            rlf        Temp_1,w    ;Ajusta a la posición de los bits IRCF2:IRCF0
            iorlw    0x01
            bsf        STATUS,RP0    ;Banco 1
            movwf    OSCCON        ;Actualiza el nuevo valor del postcaler de INTOSC
            bcf        STATUS,RP0    ;Banco 0
            goto    Loop

            end                    ;Fin del programa fuente
Código:
/*
                                EJEMPLO 4-1
                        Autor: Mikel Etxebarria
                        Orozko-Bizkaia, Septiembre 2010

El oscilador interno

Al seleccionar el oscilador interno, la frecuencia de trabajo se puede modificar dinámicamente
ajustando los bits IRCF2:IRCF0 del registro OSCCON (postcaler de INTOSC). En este ejemplo el
valor binario de las entradas RA2:RA0 se emplea para actualizar el OSCCON y seleccionar así
diferentes frecuencias de trabajo.

RB0 cambia de estado cada cierto tiempo mediante el empleo de una rutina de temporización que 
consume unos 500000 ciclos (Tc). Al variar la frecuencia de trabajo, se varía la duración de cada
cilco (TC) y por tanto el tiempo en el que RB0 cambia de estado y que se puede apreciar claramente
Los tiempos se resumen en la siguiente tabla

RA2:RA0    F            Tc            Tiempo
------        --------    -------        ----
000        31 KHz        129 uS        64.5 s
001        125 KHz        32 uS        16 s
010        250 KHz        16 uS        8 s
011        500 KHz        8 uS        4 s
100        1 MHz        4 uS        2 s
101        2 MHz        2 uS        1 s
110        4 MHz        1 uS        0.5 s
111        8 MHz        0.5 uS        0.25 s 
*/

#include <16f886.h>

/* Ajusta los valores de las palabras de configuración durante el ensamblado.Los bits no empleados
adquieren el valor por defecto.Estos y otros valores se pueden modificar según las necesidades */

#fuses     NOLVP,PUT,NOWDT,EC_IO,NOFCMEN,NOBROWNOUT    //Palabra 1 de configuración
#fuses    NOWRT,BORV40                                //Palabra 2 de configuración

/* Con estas directivas las funciones "input" y "output_bit" no reprograman
el pin de la puerta cada vez que son utilizadas. Si no se indica el
modo fast_io se asume por defecto standard_io el cual reprograma el pin
siempre antes de ser utilizadas estas funciones.*/

#use fast_io (A)
#use fast_io (B)

int Temp_0;
int16 i;

main()
{
      output_b(0x0);                    // Borra las salidas
     setup_adc_ports(NO_ANALOGS);    //Puertas A y B Digitales
      set_tris_a(0b01111111);          // RA0-RA6 se configuran como entradas
    set_tris_b(0b11111110);          // Puerta B se configura como salida

//Oscilador interno a 4MHz como fuente prinipal de reloj inicialmente
    setup_oscillator(OSC_INTRC|OSC_4MHZ);

     while(1) 
    {
    output_toggle(PIN_B0);            //RB0 Cambia de estado
    for(i=1;i<2000;i++)
        delay_cycles(250);            //Temporiza el equivalente a 500000 ciclos de instrucción aprox.
                
    Temp_0=input_a()&0x07;            //Lee las entradas RA2:RA0
    rotate_left(&Temp_0,1);
    rotate_left(&Temp_0,1);
    rotate_left(&Temp_0,1);
    rotate_left(&Temp_0,1);            //Ajusta a la posición de los bitas IRCF2:IRCF0
    setup_oscillator(Temp_0|0x01);
    }      
}

Si quieres más precisión, usas el Timer o te fijas en el 16F88. El 16F886, 16F887 y el 16F88 son muy similares, pero de distinto cantidad de pines.

Un saludo.
 
bueno, la verdad es que me das informacion muy buena. la voy a imprimir y me la estudio un poco. pero ahora tengo que hacer una pausa en este camino ya que el lunes tengo los examenes del IOC de acceso a grado superior y quisiera aprovarlos.
dentro de unos dias te comento como lo llevo.
de nuevo gracias.
 
Hola, no me había dado cuenta de un fallo que veo. en el esquema unipolar, la persona que lo dibujo he hizo el programa para el pic16f84a, puso en el programa que el crystal era a 32768Hz y en el esquema a 32768KHz. se sabe cual es el correcto? yo creo que el del programa, pues el error de la placa es de texto mientras que el del programa haría que no funcione. es correcto?
 
Buenas Handyss. Si lo que quieres es un oscilador para contar segundos, el que debes usar es el de 32768Hz. Hz! no KHz!

Por cierto, suerte con los examenes, yo ya los hice hace tiempo, y no me arrepiento en nada! Que CFGS vas a hacer? Saludos y suerte!
 
Pues casi que no me queda presupuesto para seguir estudiando. Pero estoy casi decidido a diseño de componentes electrónicos. De siempre me ha gustado investigar hacer halgo y me desintereso mucho cuando funciona. Seria ideal estar siempre con prototipos.
Si sabes o puedes. Necesito una mano con un programa. Meta me ha ayudado mucho pero no entiendo ni la mitad del programa para terminarlo pues aunque me gusta no se hacerlo.
te adjunto el codigo original y el esque ma original. y tambien el esquema nuevo y la adaptacion que me paso meta. si simulas el original en proteus, veras que avance = motor avanza 48 pasos por minuto y se para dandole al stop, adelante= avance rapido y atras= retroceso rapido.
la idea es que el original usa motores unipolares pero yo tengo dos bipolares y queria aprobecharlos.
expongo esquemas y programas.
se me olvidaba, el original es para 16f84a y quiero usar el 16f88 ya que lo tengo en casa.

originales para pic 16f84a:
madero original.txt y circuitocontrolplanchet.jpg

y los resultados aportados por meta al cual estoy muy agradecido:
para pic16f88 son los otros dos archivos para bipolares
 

Adjuntos

  • madero original.txt
    5.2 KB · Visitas: 34
  • circuitocontrolplanchet.jpg
    circuitocontrolplanchet.jpg
    34.1 KB · Visitas: 29
  • bipolares partiendo del original por meta.txt
    6 KB · Visitas: 36
  • Fig3013_MotorPAP.GIF
    Fig3013_MotorPAP.GIF
    10.5 KB · Visitas: 25
Última edición:
META a tu pregunta en el codigo de que significa RTCC, simplemente decirte que la linea es clrf RTCC y se esta en el banco 0, y tiene EQU 0x01 con lo cual es que se carga el valor 0 en TMR0 para asi efectuar los tiempos en la interrupcion
handyss solo comentarte que META te ha hecho toda la faena, en los esquemas que te ha puesto él con motor bipolar tienes que cambiar el 16f84 por el 16f88 que es el que tienes y compilar el programa que, me repito , META te adjunto con el 16f88
Buena suete con tu proyecto IOC y tambien con este
Un saludo
 
Quizas he hecho algo mal al compilar. me gusta el tema pero estoy verdisimo. al probar la compilacion en hex que meta me paso. lo probe en proteus con el esquema del bipolar y creo, que con el 16f88, pero lo repetire a ver si hice algo mal. el caso es que funciono pero no exactamente como la prueba en el original con el unipolar. tenia alguna funcion de botones que no hacia lo esperado. repito prueba a ver. y sobre todo, mil perdones a Meta por no haber sabido aprovechar su esfuerzo a la primera. tengo algun minimo conocimiento general pero a base de que como me gusta he ido construyendo algunas cosas pero nunca lo he estudiado.
 
Atrás
Arriba