Hola a todos, soy nuevo en el tema de pic's y en el tema del assembler... Y porq no decir tambien que en la electrónica en general! jaja
Primero q nada contarles q hace bastante sigo la comunidad y arranque como la mayoria, costruyendo mi programador, comprando un 16f628a y haciendo titilar leds de todas las formas q se me ocurrieron. Pero desarme una disquetera y quiero hacer andar el motor paso a paso que mueve el lente de la disquetera, es un motor de 4 cables, ya medi las resistencias de los pares para saber cual eran los pares de cada una de las dos bobinas, me compre un L293b para el circuito del puente H y 8 diodos 1n4007 para la proteccion del circuito, hice el programa en assembler para que el motor se mueva en sentido horario solamente, a modo de prueba, lo cargo en el pic, monto todo sobre el protoboard y el motor hace un especie de zumbido tenue, por miedo de hacerlo bosta lo desconecte enseguida, el codigo en assembler es este:
;****Encabezado****
list P=16F628A
#include <P16F628A.inc>
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_ON & _PWRTE_ON & _INTOSC_OSC_NOCLKOUT & _DATA_CP_OFF & _LVP_OFF & _MCLRE_ON;****Definicion de variables****
Contador1 equ 0x20 ;selecciono posicion en la memoria RAM para guardar el registro utilizado para la demora
Contador2 equ 0x21 ;registro utilizado para la demora
Pulsador equ 0 ;defino pulsador como el bit 0, en este caso sera PORTA
;****Vector reset****
Reset org 0x00 ;aca comienza el micro
goto Inicio ;salto al inicio del programa
org 0x05 ;origen del codigo de programa
;************************
;paso A B C D *
;1 1 0 1 0 *
;2 1 0 0 1 *
;3 0 1 0 1 *
;4 0 1 1 0 *
;************************
;****Programa principal****
Inicio;****Configuracion de puertos****
movlw b'00000111' ;Configuro PORTA como i/o digital
movwf CMCON ;muevo 111 a W, y W a CMCON
bsf STATUS,RP0 ;paso del banco 0 a banco 1
;TRISA por default esta en 11111111
movlw b'11110000' ;muevo 11110000 a W
movwf TRISB ;muevo W a TRISB
bcf STATUS,RP0 ;paso del banco 1 al banco 0
;****Control del led****
Bucle btfsc PORTA,Pulsador ;pregunto si esta en 0 logico
movlw b'00001010' ;realizo el primer paso del motor
movwf PORTB
call Demora_150ms ;espero 150ms
movlw b'00001001' ;realizo el segundo paso del motor
movwf PORTB
call Demora_150ms ;espero 150ms
movlw b'00000101' ;realizo el tercer paso del motor
movwf PORTB
call Demora_150ms ;espero 150ms
movlw b'00000110' ;realizo el cuarto paso del motor
movwf PORTB
call Demora_150ms ;espero 150ms
goto Bucle ;testeo otra vez la condicion del pulsador
;****Demora****
Demora_150ms
movlw 0xFF ;
movwf Contador1 ;icinio contador1
Repeticion1
movlw 0xC3 ;
movwf Contador2 ;inicio contador2
Repeticion2
decfsz Contador2, 1 ;decrementa contador2 y si es 0 sale
goto Repeticion2 ;si no es 0 repito el ciclo
decfsz Contador1, 1 ;decrementa contador1
goto Repeticion1 ;si no es 0 repito el ciclo
return ;regreso de la subrutina
end ;fin del codigo
es una remodelacion del primer programa q dan el la revista 5 de Ucontrol donde te enceñan a hacer el 1º programa en assembler para controlar un led, de ahi "robe" la sintaxis del delay, la definicion de puertos (en la cual hay muchas cosas q todavia no tengo en claro porq me falta leer mucho mas del tema). en proteus conecto rb0 a A del motor, rb1 a B del motor, rb2 a C y rb3 a D, con los 1n4007 puestos como proteccion, podria poner el L293d y ahorrarme los diodos (el L293b no esta en proteus), pero es este programa no estoy usando el puente en H, el motor solo va para un lado asiq no lo crei necesario. cuando le doy al play en proteus el motor gira unos pocos grados en sentido anti horario, nose exactamente cuanto, pero aproximadamente 1/5 de vuelta y despues arranca a girar en sentido horario, segun tengo entendido en el codigo, cuando presiono el boton el motor tendria q detener su giro, pero en vez de eso se queda haciendo algo asi como un pendulo...
Para sacarme la duda de si al menos giraba el motor lo probe en el protoboard y paso lo q conte mas arriba del zumbido del motor. alimente todo con una fuente de 5V y 200mA (cargador de un celular), en el protoboard al circuito lo hice con el l293b, para que ya me quede armado en el momento q tenga el programa completo y funcional, las patas en1, en2, vss y vs del l293b las puse a los 5V de la fuente (no se si esta mal q el voltaje de alimentacion sea igual que el voltaje de la parte logica, en el datasheet decia que mientras vss<=vs<=36V, la alimentacion del pic tambien la tome de los 5V del cargador de celu
Mi teoria es q tuve suerte de que no se me quemo nada todavia, pero les pido a ustedes q son los q saben q me tiren la justa ya que tengo ganas de que ese motorcito pedorro ande a mi antojo
desde ya muchas gracias (perdon la ortografia, 7.32am y no por madrugar sino por aun no acostarme jajaja)
PD: deje adjunta la foto donde esta el circuito que use del integrado con los diodos porq tal vez les servia, el archivo de proteus si lo necesitan lo subo