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


GoX F4yCk3r DB dijo: Ver Mensaje
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?
no vi este mensaje...

si es correcto....

pero seria

IF dat="K" then high portb.0
25/11/2011 #1482


mmmm

bueno mi conclucion a tu duda, es que tienes dos posibilidades de enviar un dato a un pic....

1.-una es mandar una cadena de caracteres y recibirlos en un arreglo como se ha mencionado antes o con el codigo del amigo arturouc u cualquier otro algoritmo que cumpla con el fin...
y utilizando los if then necesarios o un select case... para prender bit por bit como lo estas haciendo...

2.- la otra es mandar un solo caracter y prender los bits nesesarios... y para esto prepare este video...

26/11/2011 #1483


juego de luces (luces navideñas)
Que tal amigos quiero compartir un proyecto de efecto de luces como las que se presentan para la fecha dicembrina he aqui el codigo:


Código:
LD1 Con 1
LD2 Con 2
LD3 Con 4
LD4 Con 8
LD5 Con 16
LD6 Con 32
LD7 Con 64
LD8 Con 128

PB_Up   var PortA.0 
PB_Dn   var PortA.1 
PB_Auto var PortA.2 

Up_Dn   var bit
Mode    var byte 
ModeOld var byte
PBData  var byte
Cnt1    var byte 
Cnt2    var word 

TrisA = %11111 
TrisB = %00000000
PortA = 0
PortB = 0

modeOld = 0
Up_Dn  = 1   
Cnt1   = 0 

Main: 
   Mode = PortA >> 3      
   
   if modeOld <> Mode then 
      Modeold = Mode       
      PBData = 0           
      Up_Dn  = 1           
      Cnt1   = 0 
   endif    
   
   gosub Chk_PB_UpDn
   
   if PB_Auto then 
      if Up_Dn = 1 then 
         gosub Run_Up 
      else 
         gosub Run_Dn
      endif
   endif
   
   PortB = PBData
   
   if PB_Auto then
      pause 100
   else
      gosub DeBounce
   endif

Goto Main    


Chk_PB_UpDn:   
   if PB_Up then 
      Up_Dn = 1
      if not PB_Auto then gosub Run_Up
   else 
      if PB_Dn then 
         Up_Dn = 0
         if not PB_Auto then gosub Run_Dn
      endif
   endif   
return      

Run_Up:
   select case Mode
      case 0  
         if Cnt1 = 16 then 
            if PB_Auto then 
               Up_Dn = 0
            else   
               cnt1 = 0    
            endif   
         endif
         Cnt1 = cnt1 + 1 
         gosub Mode0
      case 1 
         if Cnt1 = 9 then 
            if PB_Auto then 
               Up_Dn = 0
            else   
               cnt1 = 0    
            endif   
         endif
         Cnt1 = cnt1 + 1 
         gosub Mode1
      case 2
         PBData = PBData + 1
      
      case 3
         if Cnt1 = 11 then 
            if PB_Auto then 
               Up_Dn = 0
            else   
               cnt1 = 0    
            endif   
         endif
         Cnt1 = cnt1 + 1 
         gosub Mode3
    end select
return      

Run_Dn:
   select case Mode
      case 0  
         if Cnt1 = 0 then 
            if PB_Auto then
               Up_Dn = 1
            else
               cnt1 = 16
            endif
         endif
         Cnt1 = cnt1 - 1 
         gosub Mode0
      case 1
         if Cnt1 = 0 then 
            if PB_Auto then
               Up_Dn = 1
            else
               cnt1 = 9
            endif
         endif
         Cnt1 = cnt1 - 1 
         gosub Mode1
      case 2
         PBData = PBData - 1
      
      case 3
         if Cnt1 = 0 then 
            if PB_Auto then
               Up_Dn = 1
            else
               cnt1 = 11
            endif
         endif
         Cnt1 = cnt1 - 1 
         gosub Mode3
    end select
return

Mode0:
   select case cnt1 
      case 00 : PBData =  0
      case 01 : PBData =  ld1
      case 02 : PBData =  ld1+ld2
      case 03 : PBData =  ld1+ld2+ld3
      case 04 : PBData =  ld1+ld2+ld3+ld4
      case 05 : PBData =  ld1+ld2+ld3+ld4+ld5
      case 06 : PBData =  ld1+ld2+ld3+ld4+ld5+ld6
      case 07 : PBData =  ld1+ld2+ld3+ld4+ld5+ld6+ld7
      case 08 : PBData =  ld1+ld2+ld3+ld4+ld5+ld6+ld7+ld8
      case 09 : PBData =  ld2+ld3+ld4+ld5+ld6+ld7+ld8
      case 10 : PBData =  ld3+ld4+ld5+ld6+ld7+ld8
      case 11 : PBData =  ld4+ld5+ld6+ld7+ld8
      case 12 : PBData =  ld5+ld6+ld7+ld8
      case 13 : PBData =  ld6+ld7+ld8
      case 14 : PBData =  ld7+ld8
      case 15 : PBData =  ld8
      case 16 : PBData =  0
    end select
return

Mode1:
   select case cnt1 
      case 00 : PBData =  0
      case 01 : PBData =  ld1
      case 02 : PBData =  ld2
      case 03 : PBData =  ld3
      case 04 : PBData =  ld4
      case 05 : PBData =  ld5
      case 06 : PBData =  ld6
      case 07 : PBData =  ld7
      case 08 : PBData =  ld8
      case 09 : PBData =  0
    end select
return

Mode3:
   select case cnt1 
      case 00 : PBData =  0
      case 01 : PBData =  ld1
      case 02 : PBData =  ld1+ld2
      case 03 : PBData =  ld1+ld2+ld3
      case 04 : PBData =  ld2+ld3+ld4
      case 05 : PBData =  ld3+ld4+ld5
      case 06 : PBData =  ld4+ld5+ld6
      case 07 : PBData =  ld5+ld6+ld7
      case 08 : PBData =  ld6+ld7+ld8
      case 09 : PBData =  ld7+ld8
      case 10 : PBData =  ld8
      case 11 : PBData =  0
    end select
return

DeBounce:
   Cnt2 = 0
   repeat 
      Cnt2 = Cnt2 + 1
      pause 1
    until (PB_Dn = 0) and (PB_Up = 0) or (Cnt2 > 200)
    if Cnt2 < 50 then pause (50 - Cnt2)    
return

End
Archivos Adjuntos
Tipo de Archivo: pdf juego de luces.pdf (15,8 KB (Kilobytes), 79 visitas)
26/11/2011 #1484


Lindo codigo autotronico.....

oye una pregunta... para que sirven los diodos D1 al D4 en el esquema?
no les veo razon aparente...
26/11/2011 #1485

Avatar de J2C

Solo D1 y D2 no tendrian razon de estar (salvo para igualar a D3 y D4), pero D3 y D4 cumplen una clara función.



Saludos, JuanKa.-
26/11/2011 #1486


Mmm no pues no le encuentro, segun yo RA3 y RA4 siempre son iguales... no entiendo para que los diodos...

¿cual es la funcion?
26/11/2011 #1487

Avatar de J2C

Lubeck

Vuelve a analizar detenidamente el circuito "juego de luces.pdf" que coloco Autotronico y veras que RA3 y RA4 no son siempre iguales, sino que siguen una secuencia determinada según el Modo que hayas elegido.

Mode0 .......

Mode1 .......

Mode3 .......





Saludos, JuanKa.-
26/11/2011 #1488


J2C : los diodos son para proteger el puerto A en caso de conectar la alimentacion mal
lubeck: en el esquema esta puentiado el selector con RA3 y RA4, equivocacion mia pero ya lo corregui, con lo cual las opciones del juego de luces se amplia, lo arme en proteus y les dejo la simulacion al igual que el diagrama correguido en el punto de RA3 y Ra4.

---------- Actualizado después de 2 minutos ----------

autotronico dijo: Ver Mensaje
J2C : los diodos son para proteger el puerto A en caso de conectar la alimentacion mal
lubeck: en el esquema esta puentiado el selector con RA3 y RA4, equivocacion mia pero ya lo corregui, con lo cual las opciones del juego de luces se amplia, lo arme en proteus y les dejo la simulacion al igual que el diagrama correguido en el punto de RA3 y Ra4.
por otro lado con la condicon anterior el mode se ejecuta en deteminar la entrada por el puerto sin que el programa corra en la opcion es como si en ambos casos llegara un 1 logico.
Archivos Adjuntos
Tipo de Archivo: pdf simulacion juego de luces.pdf (15,7 KB (Kilobytes), 66 visitas)
Tipo de Archivo: rar juego de luces.rar (65,0 KB (Kilobytes), 89 visitas)
26/11/2011 #1489




ya le entendi....



gracias...
26/11/2011 #1490

Avatar de J2C

Autotronico

En este caso:
autotronico dijo: Ver Mensaje
J2C : los diodos son para proteger el puerto A en caso de conectar la alimentacion mal
Como que el PIC ya paso a mejor vida y no tiene ningun sentido proteger las entradas del puerto A.




Por otra parte considero totalmente ilogico colocar la llave de 4 posiciones y los 4 diodos de acuerdo a tu ultimo esquema:

llave 1 : ------ RA3=1 ; RA4=0
llave 2 : ------ RA3=0 ; RA4=1
llave 3 : ------ RA3=1 ; RA4=0
llave 4 : ------ RA3=0 ; RA4=1

Dado que las posicines 1 y 3 serian exactamente lo mismo entre ellas, y las 2 y 4 también serian lo mismo entre ellas.




Sin embargo, y es lo que di a entender, en el primer esquema tenia logica:

llave 1 : ------ RA3=1 ; RA4=0
llave 2 : ------ RA3=0 ; RA4=1
llave 3 : ------ RA3=1 ; RA4=1

Permitiendo elegir entre 3 modos distintos que puedes manejar por programa.



Saludos, JuanKa.-
26/11/2011 #1491


hola a todos
hola amigos recien estoy iniciandome en este mundo de electronica con microcontroladores
en esta ocacion quiero realizar un temporizador de 0 - 99 minutos programable.
nose como empesar espero de su ayuda adjunto el diagrama en proteus
Archivos Adjuntos
Tipo de Archivo: rar temporizador.rar (22,0 KB (Kilobytes), 83 visitas)
26/11/2011 #1492


nose como empesar
yo te recomendararia que....

no pretendas que alguien te haga el codigo...
empieza como la mayoria empezamos.... encendiendo un led... para eso puedes ir a la pagina #1 de este tema... y ya que hayas leido gran parte y echo un codigo propio aunque este mal, lo pones y te podemos echar una mano los que gustemos hacerlo...
27/11/2011 #1493


J2C "Como que el PIC ya paso a mejor vida y no tiene ningun sentido proteger las entradas del puerto A"

Amigo, claro que protego al pic, en la alimentacion siempre coloco un diodo de proteccion en el caso de que la alimentacion este mal.

Al igual puedo colocar un unico diodo entre la alimentacion y el selector y otro en la alimentacion al PIC.

Por otro lado tenes mucho razon en la configuracion opcional de las entradas.

SALUDOS
27/11/2011 #1494


lubeck dijo: Ver Mensaje
mmmm

bueno mi conclucion a tu duda, es que tienes dos posibilidades de enviar un dato a un pic....

1.-una es mandar una cadena de caracteres y recibirlos en un arreglo como se ha mencionado antes o con el codigo del amigo arturouc u cualquier otro algoritmo que cumpla con el fin...
y utilizando los if then necesarios o un select case... para prender bit por bit como lo estas haciendo...

2.- la otra es mandar un solo caracter y prender los bits nesesarios... y para esto prepare este video...

http://www.youtube.com/watch?v=_ZwNt6hwLKs




Muchas gracias Lubeck . me ha servido de mucho tu ayudam duda resuelta.
Gracias mil gracias
salu2
28/11/2011 #1495

Avatar de Dario

hola amigos por aqui de nuevo con mis ideas y problemas jeje... bueno, les cuento que he diseñado un controlador de motores microcontrolados para usar en robotica. el circuito se basa en un micro pic12f629, un l293 y funciona asi: recibe un tren de pulsos por gpio3 usando pulsin y los guarda en la variable t1 para despues compararlos con los valores 50,100,150'200 y 250 con los que se logran las funciones ADELANTE, ATRAS, IZQUIERDA y DERECHA. estoy probandolo con un robot que arme, que evade obstaculos mediante dos bumpers hechos con microswitchs. el problema que tengo, es que cuando lo pongo en funcionamiento y detecto un obstaculo, aveces funciona y aveces no. yo pense que se trataba de ruido en el sistema pero no, lo extraño, es que en proteus me hace lo mismo y no entiendo cual es el error que estoy cometiendo, yo creo que es el micro del driver de motores y por eso les dejo el codigo y la simulacion en proteus para ver si me pueden dar una manito con esto... muchas gracias a todos.
Archivos Adjuntos
Tipo de Archivo: rar pic drive.rar (42,0 KB (Kilobytes), 90 visitas)
29/11/2011 #1496

Avatar de Dario

bueno gente del foro, ya solucione el problema jejeje... les gane ... no era el control de motores, era el pic maestro el que hacia el problema. la solucion fue encerrar las rutinas de giro y retroceso del pic maestro en un lazo for...next y listo
aca les dejo el codigo corregido por si lo necesitan jeje... les cuento que esta practica forma parte del tutorial de robotica que estoy haciendo y pronto compartire en el post de robotica que hice hace un tiempo.
saludos y gracias amigos

Código:
@ DEVICE MCLR_OFF, XT_OSC, WDT_OFF, LVP_OFF, BOD_OFF, PWRT_OFF, PROTECT_OFF
DEFINE OSC 4                  'define el oscilador a 4MHZ
CMCON = 7                     'comparadores off
TrisA=%11111111               'todo el port A como entrada
TrisB=%00000000               'todo el port B como salida
PORTA = %11111111             'todo el port A en 1
PORTB = %00000000             'pone a cero todo el puerto b
derecho var porta.0
izquierdo var porta.1
pulso var portb.0
x var byte
low pulso
inicio:
pulsout pulso,100      'avanza si no hay bumper en contacto   
if derecho=0 AND IZQUIERDO=1 then doblaizq  'ir a doblaizq si hay contacto en bumper derecho 
if DERECHO=1 AND izquierdo=0 then doblader 'ir a doblader si hay contacto en bumper izquierdo
if derecho=0 and izquierdo=0 then retro 'ir a retro si ambos bumpers estan
goto inicio

doblader:                       'contacto en bumper derecho, ir a la izquierda     
for x=1 to 10                    
pulsout pulso,200
pause 200
next 
for x=1 to 10 
pulsout pulso,250
pause 200
next
goto inicio

doblaizq:                     'contacto en bumper izquierdo, ir a la derecha
for x=1 to 10 
pulsout pulso,250
pause 200
next 
for x=1 to 10                    
pulsout pulso,200
pause 200
next
goto inicio

retro: 
for x=1 to 10                   'ambos bumpers en contacto 
pulsout pulso,150          ' retrocede y dobla a la derecha
pause 200
next
for x=1 to 10 
pulsout pulso,250
pause 200
next
goto inicio
29/11/2011 #1497
Moderador

Avatar de D@rkbytes

Saludos D@rio.
Una pregunta + un comentario.
Por que usas For x=0 To 10 Step 1
Si hará lo mismo que For x=0 To 10
Ya que los pasos de un For Next se dan de uno en uno por default.
Ósea que el Step 1 esta redundando en el código
hará 11 pasos de todos modos con o sin el Step 1
Si quieres hacer 10 pasos solamente, seria For x=1 To 10
Ok. Buen código y suerte.
29/11/2011 #1498

Avatar de Nano24

D@rio dijo: Ver Mensaje
hola amigos por aqui de nuevo con mis ideas y problemas jeje... bueno, les cuento que he diseñado un controlador de motores microcontrolados para usar en robotica. el circuito se basa en un micro pic12f629, un l293 y funciona asi: recibe un tren de pulsos por gpio3 usando pulsin y los guarda en la variable t1 para despues compararlos con los valores 50,100,150'200 y 250 con los que se logran las funciones ADELANTE, ATRAS, IZQUIERDA y DERECHA. estoy probandolo con un robot que arme, que evade obstaculos mediante dos bumpers hechos con microswitchs. el problema que tengo, es que cuando lo pongo en funcionamiento y detecto un obstaculo, aveces funciona y aveces no. yo pense que se trataba de ruido en el sistema pero no, lo extraño, es que en proteus me hace lo mismo y no entiendo cual es el error que estoy cometiendo, yo creo que es el micro del driver de motores y por eso les dejo el codigo y la simulacion en proteus para ver si me pueden dar una manito con esto... muchas gracias a todos.
Que tal dario, una forma mas resumida ya que estas usando trenes de pulso, pues usa un PIC y un Servomotor, quitale el tapón de tope para que gire a 360 grados y déjale el circuito de control que trae, así descartarías la idea de usar un L293, menos complicado, menos circuito y menos consumo.
29/11/2011 #1499

Avatar de Dario

Saludos D@rio.
Una pregunta + un comentario.
Por que usas For x=0 To 10 Step 1
Si hará lo mismo que For x=0 To 10
Ya que los pasos de un For Next se dan de uno en uno por default.
Ósea que el Step 1 esta redundando en el código
jeje... tenes razon, es verdad, ya lo modifico jeje...

Que tal dario, una forma mas resumida ya que estas usando trenes de pulso, pues usa un PIC y un Servomotor, quitale el tapón de tope para que gire a 360 grados y déjale el circuito de control que trae, así descartarías la idea de usar un L293, menos complicado, menos circuito y menos consumo.
hola nano, te cuento que no estoy usando servomotores, si te fijas en la simulacion en proteus y en lo que dije en el primer mensaje, estoy usando un controlador de motores que diseñe que se comporta como un servo pero este tiene la capacidad de controlar 2 motores usando una sola linea de control. de todas formas, gracias por tu recomendacion.
saludosss
30/11/2011 #1500


Hola que tal, aqui molestando de nuevo jeje
bueno ahora ando controlando un motor a paso unipolar de 5 hilos.
ya logre hacer todas sus velocidades horario y antihorario.
solo tengo una pequeña problematica...
cuando pulse un pulsador que se haga una sola secuencia del motor. por ejemplo


trisb=0 ;hacer salidas el puerto b
antihorario:
portb=%0011 ;energiza bobina A y C
PAUSE 5 ;espera 5 mls
portb=%0110 ;energiza bobina C y B
PAUSE 5 ;espera 5 mls
portb=%1100 ;energiza bobina B Y D
PAUSE 5 ;espera 5 mls
portb=%1001 ;energiza bobina D Y A
PAUSE 5 ;espera 5 mls
GOTO antihorario ;continuar girando
END

este programa hace el full step del motor, bueno cuando yo presione un boton solo quiero que se energize la bobina A y C y cuando vuelva a presionar el boton que se energicen las siguiente bobinas que serian C y B, tengo una vaga idea de como hacerlo pero no la puedo aterrizar =(.
Imagino que es con un if dentro de un for, pero no tengo clara la idea

alguna sugerencia??
de antemano gracias
¿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.