Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?
22/11/2011 #1461


Maneras de regular tiempos en pic 16f628a
Hola; compañeros de foro:
Por favor necesito su ayuda, estoy aprendiendo sobre el pic 16f628a en PBP y trato de hacer un timer para un ventilador manejado con optotriacs, no se como hacer que presionando el boton de stop por 10 segundos, entre a una parte del programa para cambiar el tiempo de funcionamiento, es algo asi:

if botonstop=0 (por >=10 seg.) then (gosub) (goto?) timer
....
....
....
timer:
if botonfrente= 0 then sumartiempo(para incrementar el tiempo de encendido)
if botonretro=0 then restartiempo (para reducir el tiempo de encendido)
return? goto inicio?
muchas gracias de antemano.
22/11/2011 #1462

Avatar de MAXTORCAMPOS

Saludos technique, dime exactamente lo que quieres que haga el programa y quizas pueda ayudarte, pero explica detalladamente y seguro aca te lo resolvemos, me gustaria saber que significa tiempo de encendido? es el tiempo que dura para encender o el tiempo que dura encendido? saludos
23/11/2011 #1463

Avatar de torres.electronico

Hablando mal y pronto por que no me sente a pensarlo bien, creeria que podrias insertar la condicion if ... then para saltar a una rutina con un bucle de 10 segundoss con for...next y dentro de este bucle, si no ve que esta presionado el pulsador, retornar o ir a donde quieras...osea, que si esta presionado el pulsaodr hasta finalizar el bucle, al final solo tendrias que poner un goto e irias a la subrutina donde tendrias la parte de configutracion del temporixzador...
El tema esta en que en el momento en que entra en el bucle, el timer anterior, o mejor dicho, la cuenta del temporizador que tenias programado, al no correr en segundo plano, se pararia y si volves, retomaria desde donde lo dejo siempre y cuando no te4nga un reset la variable que almacena el dato del contador...Se entiende esto ultimo? De ultima, solo muestra parte de tu programa, y ahi sera mas facil ayudarte
Saludos
25/11/2011 #1464


Hola que tal
antes que nada quiero agradecer a lubeck y a Maxtorcampos por su ayuda! Muchas Gracias
Les comento, ya logre establecer comunicacion con el pic, y mi practica ya quedo al 100%.
Lucbeck cuando ponia
portb=dat
me encendia los leds en el orden que mencione anteriormente. Por lo que opte por poner un if en cada dato, quedando asi
If dat=1 then high portb.0

y asi sucesivamente hasta encender el ultimo bit.

Maxtorcampos:
cuando ponia
if dat=128 then high portb.7
efectivamente el compilador ya no me mandaba errores, sin embargo el pic no reconocia esta instruccion, ya que no encendia ningun led.
porque pudo haber pasado esto?

reitero mis agradecimientos y si alguien gusta que comparta mi programa de labview y el del pic, con gusto los subo =)

un saludo
25/11/2011 #1465


reitero mis agradecimientos y si alguien gusta que comparta mi programa de labview y el del pic, con gusto los subo =)
Lastima que ahora no tengo instalado el labview, no podras ponerlo en proteus....

me mata de curiosidad, el porque en ese pic, el binario no es binario....
25/11/2011 #1466


hola lubeck, con gusto, adjunto el de proteus y el que del pic que utilice para mi comunicacion.
por cierto veras que hay mas de 8 if's, bueno esto es porque era un corrimiento en sentido a la derecha y a la izquierda
Archivos Adjuntos
Tipo de Archivo: rar MC.rar (7,9 KB (Kilobytes), 85 visitas)
25/11/2011 #1467


Oki... deja darle una mirada... Gracias...
25/11/2011 #1468


una duda existencial.
Porque cuando pongo if dat=20 then high portb.0 el compilador no me marca errores, pero al momento de simularlo, no mas no enciende el led.
25/11/2011 #1469


Pues no entiendo GOX.... ese codigo que me pasaste ni siquiera deberia de funcionar....

puse este y va de 10

Código:
include "modedefs.bas"
@ device xt_osc 

trisc=%10000000
dat var byte 
trisb=0
portb=0

inicio:

serin portC.6, 0,dat
portb=dat
goto inicio

end
25/11/2011 #1470


originalmente mi programa lo tenia asi, de verdad que me encendia los leds, en una secuencia muy rara, y el que te pase me sirve al 100% tanto virtualmente como fisicamente.
25/11/2011 #1471


mmm.. fijate que en el proteus tienes el TX en RC6 y en el programa pones portC.1....

con respecto a los if .....thens.....

ya no se como mandas desde labview, es decir....

no es lo mismo un "1" (ascii) que en hexadecimal es un 31 o en binario es 00011001
a que mandes un 1 (numerico) que en hexadecimal es un 1 o en binario es un 00000001

ves la diferencia....

ahora si mandas un "1" es correcto como lo tienes....
si mandas un 1 es correcto como lo tengo...
25/11/2011 #1472


desde labview recibo datos numericos, que son convertidos a string, para que puedan ser escritos en el puerto serial.
25/11/2011 #1473


me rindo.....

desde labview recibo datos numericos,
como es que recibes datos en labview.... si utilizas en el pic el comando SERIN????

quien manda a quie????

el labview no manda al pic???? , los manda en string(es lo mismo que Ascii).????

si es asi, entonces estas bien, y todo el problema estuvo en que tu intentaste recibir una cadena de caracteres (cadena de caracteres es la suma de dos o mas ascii o string) y por eso te marcaba error PICBASIC NO MANEJA CADENAS DE CARACTERES ejem Dat="18" (mal), Dat="1" (bien), y lo que paso es que MAXTORCAMPOS te suguirio quitar las comillas y yo me fui con el error y que recibias un dato numerico... por eso el portb=dat.....


al tu poner Dat="1" picbasic internamente traduce a DAt=00011001 y deja de manejar los ascii....

espero te sirva mi explicacion
25/11/2011 #1474


si asi es, labview le manda al pic los datos.
entonces no puedo recibir un numero >10 en el pic??
porque en realidad labview si manda datos numericos, el problema es que esos datos numericos no pueden ser escritos en el "visa write" (que es el encargado de mandar los datos), debido a que este visa write no puede recibir datos numericos es necesario convertirlos a string, pero siguen siendo datos numericos solo que en otro formato para que el visa write pueda escrbirlos en el pic, se que los datos son numericos por que los obtengo de un for loop, el cual hace un conteo y con este conteo encendia y apagaba mis leds.

lubeck mi duda es.. envio datos numericos >10 previamente convertidos a string, como puedo hacer para que el pic me interprete este dato y pueda asi encender algo, se puede hacer esto?

ejemplo

IF dat=10 then HIGH portb.0

ya lo intente sin las comillas pero no enciende el led
25/11/2011 #1475


lubeck mi duda es.. envio datos numericos previamente convertidos a string, como puedo hacer para que el pic me interprete este dato y pueda asi encender algo, se puede hacer esto?
pues si te entiendo bien, (yo no he usado el labview), lo que tienes que hacer es mandar al visa write el codigo ascii del numero, es decir si quieres mandar un 65 al pic entonces mandas una "A" que es el numerico que le corresponde, busca la tabla de codigos ascii...

si tu mandas una "A" que es el codigo 65 que es 1000001 te va a prender el bit 0 y el 6....
en microcontroladores debes de estar pensando siempre o lo mas posible en Binario...
25/11/2011 #1476


ejemplo si mando un 75 que es una K que es 0100 1011
puedo poner
esto...
IF dat=K then high portb.0??

sin mandar una K necesariamente de labview, mando un 75, pero el pic, me puede interpretar este 75 como una K?
25/11/2011 #1477
Moderador

Avatar de Chico3001

El PIC siempre hace lo que su programa le indique.... Si el programa indica que el dato recibido se debe tratar como "k" entonces el PIC la tratara como K, pero si le indica que la trate como numero entonces asi se hara....

No se si me explique....
25/11/2011 #1478


Chico3001 dijo: Ver Mensaje
El PIC siempre hace lo que su programa le indique.... Si el programa indica que el dato recibido se debe tratar como "k" entonces el PIC la tratara como K, pero si le indica que la trate como numero entonces asi se hara....

No se si me explique....
si, pero es que ese es mi problema, cuando yo recibo un 10 o un numero mayor a 10 el pic no hace nada, desde labview y debido a la programacion que tengobno puedo enviarle letras puro numero, si pudiera enviar letras se facilitaria todo. bueno cuando mando un 10 y el pic lo recibe simplemente no hace nada con este dato, y es lo que no entiendo, como puedo hacer para que el pic interprete este dato y asi pueda enecender un puerto
25/11/2011 #1479


seguro que esta recibiendo un 10 (numerico) o estas recibiendo dos caracteres un "1" y un "0" osea un "10"???

el segundo picbasic no es posible que lo reciba...


es diferente....
25/11/2011 #1480

Avatar de arturouc

yo hice este codigo que recibe caracteres y lo convierte en numero el pic
la idea es que mandes desde la computadora una serie de caracteres por ejemplo
"0000123*" cuando lo recibe el pic
el primer caracter que es un "1" le asigna DATO[5]=49 despues DATO[6]=50, despues DATO[7]=51
y cuando recibe el "*"
hace la conversion a 123 numerico

DATO[INDICE]=DATOE 'este es el caracter que recibo por el puerto serie
INDICE=INDICE+1
IF DATOE=="*" THEN ' cuando del PC llaga un "*" interpreto el numero que recibi
INDICE=1
FOR I=1 TO 7
SELECT CASE DATO[I] 'dato que recibi
CASE 48 ' es un cero?
NUM[I]=0
CASE 49 ' es un uno?
NUM[I]=1
CASE 50 ' es un dos?
NUM[I]=2
CASE 51 'creo que ya entendiero....
NUM[I]=3
CASE 52
NUM[I]=4
CASE 53
NUM[I]=5
CASE 54
NUM[I]=6
CASE 55
NUM[I]=7
CASE 56
NUM[I]=8
CASE 57 ' es un nueve?
NUM[I]=9
CASE ELSE 'CUALQUIER OTRO CARACTER LO TOMA COMO CERO "O"
NUM[I]=0
END SELECT
NEXT I
'aqui determino que numero me enviaron por el PC
DATOACUM=NUM[7] + NUM[6]*10 + NUM[5]*100 + NUM[4]*1000 + NUM[3]*10000

espero te sirva...
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2016, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.