TODOPIC
Microcontroladores PIC => Lenguaje Basic para microcontroladores PIC => Mensaje iniciado por: joebar en 30 de Octubre de 2006, 20:39:11
-
Hola a todos. Echadme una mano por favor, la aplicación es super sencilla, se trata de encender un led durante 0,7sg si tenemos una entrada y otro led igual si tenemos otra entrada diferente, na más, pero al simular en el Proteus no hace absolutamente nada, no da error pero no enciende las salidas...
Os espero, muchas gracias y saludos. ;)
(http://i26.photobucket.com/albums/c134/JoeBar35/intermitentescodigo.jpg)
(http://i26.photobucket.com/albums/c134/JoeBar35/intermitentes.jpg)
-
No se porque has puesto trisio=%000011 con comilla, de esta manera no lo ejecuta.
Tambien te faltan definir varias cosas:
GPIO = 0 ' inicializa el registro gpio
TRISIO = 0 ' configura los pines gpio como salida
CMCON1 = 7 ' desactiva los comparadores
ANSEL = 0 ' desactiva AD
VRCON = 0 ' voltaje de referencia
Es mas facil que te podamos ayudar si pegas el codigo y no una imagen de el, mejor aun con el archivo de proteus para probarlo directo.
Suerte
-
Hola joebar, más halla de lo comentado por veguepic, fijate que en las sentencias "IF" estas usando el registro TRISIO en ves del correcto que sería GPIO, por lo tanto debería quedar algo así:
if gpio.0=1 then goto derecha
end if
if gpio.1=1 then goto izquierda
end if
Espero te sea de ayuda.
Un saludo.
Atte. CARLOS.
-
Hola:
Como dice Carlos, estas utilizando el registro equivocado para los condicionales, Veguepic, creo que no lo tiene definido en el codigo porque MKB permite hacerlo cuando se esta creando el nuevo proyecto, sale una ventana en la cual se debe hacer las configuraciones necesarias de algunos registros y fusibles.
-
Hola Gio:
A mi al principio solo me aparecen los Fuses (MCLR, CP, etc) pero nada sobre los comparadores, el AD o el voltaje de referencia. Sera que me falta activar algo?
No estoy seguro pero creo recordar haber leido que si no desactivas los comparadores o el AD estos por defecto estan activos, de repente estoy en un error y se me han cruzado los cables. :(
Saludos
-
No estoy seguro pero creo recordar haber leido que si no desactivas los comparadores o el AD estos por defecto estan activos, de repente estoy en un error y se me han cruzado los cables. :(
Hola:
Asi es, hay que desactivarlos, y parece ser que me apresure en decir lo otro, ya que solo veo los fusibles que tu dices, no he utilizado mucho MKB, entonces se debera hacer como lo mencionas en tu post anterior.
-
No se porque has puesto trisio=%000011 con comilla, de esta manera no lo ejecuta.
Lo puse entre comillas para asignar las entradas y salidas directamente como puedes ver unas líneas más abajo, lo probé así ya que tampoco me funcionó el trisio=%000011.
Gracias por tu ayuda y comentario. Saludos. ;)
-
¿Son necesarios esos end if? ¿Si pones la condicion verdadera (then) en la misma linea del IF, deben ir los end if?
Lo digo desde la lejana llanura, alla por el VB, ya que casi nunca he programado en PBP, menos en MKB.
Saludos.
-
¿Son necesarios esos end if? ¿Si pones la condicion verdadera (then) en la misma linea del IF, deben ir los end if?
Lo digo desde la lejana llanura, alla por el VB, ya que casi nunca he programado en PBP, menos en MKB.
Saludos.
Sí que son necesarios, ya que si no los pone te da un error al compilar...
Saludos. ;)
-
Hola joebar, más halla de lo comentado por veguepic, fijate que en las sentencias "IF" estas usando el registro TRISIO en ves del correcto que sería GPIO, por lo tanto debería quedar algo así:
if gpio.0=1 then goto derecha
end if
if gpio.1=1 then goto izquierda
end if
OK, modificado pero nada de nada...
program Intermitentes
trisio=%000011
main:
gpio.4=0
gpio.5=0
if gpio.0=1 then goto derecha
end if
if gpio.1=1 then goto izquierda
end if
goto main
derecha:
gpio.4=1
delay_ms(700)
gpio.4=0
goto main
izquierda:
gpio.5=1
delay_ms(700)
gpio.5=0
goto main
end.
x Veguepic: No se como pegar el código desde Proyeus, si me ilustras te lo agradecería. :)
Os pongo también la configuración a ver si ahí veis algo que esté mal, esta misma aplicación la he realizado en 16F84 y funciona bien, ya veis que no tiene absolutamente nada de complicado pero algo me está fallando con el 12F675, no se, a ver que me podéis decir...
(http://i26.photobucket.com/albums/c134/JoeBar35/intermitentesconfig.jpg)
-
Hola en el TRISIO nadamas por si las dudas pon TRISIO=%001011, ya que GPIO.3 es entrada unicamente y prueba haber con el INTRC_OSC_NOCLKOUT para ver si es el crystal, ya van 2 que a mi no me funcionan.
Y por cierto alguna vez en MKB intente sacar las rutinas del main y me botaba un error o un warning y nunca jalaban los programas trata hacer esto
program Intermitentes
subprocedure derecha()
gpio.4=1
delay_ms(700)
gpio.4=0
end sub
subprocedure izquierda()
gpio.5=1
delay_ms(700)
gpio.5=0
end sub
main:
trisio=%001011
cmcon1 = 7
ansel = 0
vrcon = 0
gpio.4 = 0
gpio.5 = 0
x:
if gpio.0=1 then
derecha()
end if
if gpio.1=1 then
izquierda()
end if
goto x
end.
se me olvidaba en los registros pon mclr en off o en on si lo pones en on ponle una resistencia de 10k a vdd
-
Hola Navaismo, gracias por tu ayuda, ese código no funciona en MKB, me da errores por todos lados, voy corrigiendo los bucles procedures con gosub/return y me da errores en CMCON1, ANSEL y VRCON, no los reconoce, dice que no se han declarado... :x, joer, mira que es sencillo el programita ¿eh?... pues no hay de echarlo andar...
Saludos. ;)
-
Copiste y pegaste el codigo????? porque si lo hiciste mkb no reconoce nada pegando tendrias que teclearlo uno a uno y en los procedimientos debe llevar un espacio entre sub procedure.
Lo acabo de compilar y el unico error que encontro es que no tengo una dichosa libreria lo cual hace que no genere nada. jijijiji, deja veo si puedo ver si se compila bien
-
Ya esta joebar ya funciona solo quita el uno de cmcon, osea reemplaza cmcon1 por cmcon y listo si te sale un error de una libreria no encontrada, porque a mi me salio solo comenta la linea del include de la libreria que afecta si no pues te lo compilara bien.
aqui te dejo el codigo que me funciono:
program interm
sub procedure DERECHA()
GPIO.4 = 1
DELAY_MS(700)
GPIO.4 = 0
DELAY_MS(700)
END SUB
SUB PROCEDURE IZQUIERDA()
GPIO.5 = 1
DELAY_MS(700)
GPIO.5 = 0
DELAY_MS(700)
END SUB
MAIN:
TRISIO=%001011
CMCON = 7
ANSEL = 0
VRCON = 0
GPIO.4 = 0
GPIO.5 = 0
X:
IF GPIO.0 =1 THEN
DERECHA()
END IF
IF GPIO.1 =1 THEN
IZQUIERDA()
END IF
GOTO X
END.
recuerda tendras que teclearlo porque a varios nos salen errores acerca del copy&paste
saludos
-
Pues después de escribir de nuevo el programa, renombrado y configurado en el Proteus para que funcione con el hex correspondiente, na de na compañero, he estado tocando los fusibles (creo que se llaman así) en el MKB incluso desactivandolo todos y en el Proteus no se enciende ni una salida :?, me está ganando este programa, el caso es que en el 16F84A corre perfectamente...
Te pongo aquí el código (que es el mismo que el tuyo) es un copy/paste de lo escrito en el MKB, muchas gracias por tu ayuda y si se te ocurre algo más por favor... por aquí andaré. :P
program Intermitente3
sub procedure derecha()
gpio.4=1
delay_ms(700)
gpio.4=0
delay_ms(700)
end sub
sub procedure izquierda()
gpio.5=1
delay_ms(700)
gpio.5=0
delay_ms(700)
end sub
main:
trisio=%001011
cmcon=7
ansel=0
vrcon=0
gpio.4=0
gpio.5=0
x:
if gpio.0=1 then
derecha()
end if
if gpio.1=1 then
izquierda()
end if
goto x
end.
Saludos. ;)
-
Pues el que te pase me funcino perfectamente..... ya se configura los fuses asi:
_CPD_OFF activado
_CP_OFF activado
_MCLRE_OFF activado
_WDT_OFF activado
_INTRC_OSC_NOCLKOUT activado
solo activa esas 5 casillas y para que veas que no te miento checa esto:
el video de que si funciona (http://rapidshare.com/files/1449334/checa.rar.html) :mrgreen:
por cierto al activar el intosc no necesitas un cristal externo
-
Navaismo te has pasado tres pueblo.... un video y todo para demostrar que funciona, no hombre no hace falta, con tu palabra sobra... y con tu ayuda MÁS AÚN......... YA SI FUNCIONA!!!! :-/ :-/
El problema estaba en que activaba el _XT_OSC, al poner los fuses que me dices a funcionado a la primera.
MUCHISIMAS GRACIAS COMPAÑERO
¿Donde puedo encontrar información de la función de estos fuses?
Saludos. ;)
-
En el datasheet del Pic que uses, ahi viene todo de todo sobre el pic y sus registros
Y que bueno que ya te funcione bien; lo del video fue solamente para que no te desanimaras y quizas con el vieras un error que podrias haber tenido, no era con otra intencion.
Saludos y aqui seguimos para ayudarnos entre todos
-
Bueno pues gracias de nuevo y voy a explicar para que quiero esta aplicación tan tonta, pero que es una aplicación que voy a montar en mi coche, resulta que me dejaron un coche que con solo dar un toque al mando del intermitente se mantiene el intermitente encendido (bueno encendiendo y apagando, jejejeje) durante 4 intermitencias (cuestión de ajustar el tiempo en el programa), suficientes para indicar un adelantamiento o cambio de carril sin la necesidad de mantener bloqueado el mando del intermitente para la dirección deseada y desbloquear después.
Se que es una chorrada, pero yo que me llevo casi todo el día en carretera adelantando camiones cualquier día me quedo con el mando en la mano, así de esta forma solo doy un toque para la dirección que quiero y los intermitentes lucen lo necesario para indicar la maniobra.
:D :D , mucho diréis que vaya la paliza que he dado con el dichoso programita para esta bobada, pero es que me hace ilusión, la verdad es que si no lo hubiera conseguido con el 12F675 lo hubiese hecho con el 16F84A, que tengo uno y ya lo probé, funcionando claro. :P
Saludos. ;)
-
Pues no creo que sea una aplicacion tan x como dices, ademas cualquier programa por pequeño que sea a uno le da un tremenda satisfaccion.
Esperamos ver los resultados de tu trabajo
saludos