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

Temas similares

02/09/2017 #3141

Avatar de roberttorres

banistelrroy dijo: Ver Mensaje
En físico tampoco funciona no cimunica
Prueba el ejemplo de el compañero D@rkbyte, como dije el código del ejemplo que subí no lo probé en físico, solo lo probé en la simulación y aparentemente funciona bien.

Pd: si el código no funciona seria conveniente que un moderador lo borrara para no crear confusión en los que quieran aprender.
02/09/2017 #3142

Avatar de banistelrroy

sirve como ayuda, estoy batallando con la comunicacion serial via rf, es tedioso ya que ay que camuflar el codigo por los ruidos que hay y afectan al pic.
08/09/2017 #3143

Avatar de banistelrroy

Hola a todos denuevo aqui, un poco con demora pero esque anduve ocupado, bueno les quiero decir que logre un comunicacion hasta el momento muy buena falta probar una par de dias para descartar errores, ya que el proyecto se trata de un radio control de 4 canales donde lo que activare seran coches a bateria para niños, ya logicamente con su interfaz con relays que casi ya la tengo terminada, lo que quiero conseguir esque no falle o mejor dicho que no se balla activar nada solito sin pulsar algun boton. loque me dio problemas fue el ruido ya que al probar funcionaba ok pero al apagar el trasmisor, en el receptor se prendian y se apagaban solos, lo que hice fue seguir unos tics que me dieron y pues use codificacion manchester, con una cabesera de datos y mejoro el tema.

En el trasmisor uso la interrupcion por cambio de estado del RB4 - RB7, en el receptor en un inicio use la interrupcion por RB0 pero, ya no la uso debido a que el receptor en todo momento esta capatando datos del exterior asi que siempre abra una interrupcion y el dato lo tendria que descartar por sofware asumo que seria lo mismo si no la uso, no se si estoy equivocado,adjunto el proyecto para que me digan como vas pues como les digolo hice investigando un poco pero se que es tedioso establecer una comunicacion estable y segura, talvez se mejore o se pueda agregar algo, ya que no quiero que el cochesito camine solito con un niño dentro. necesito su apoyo gracias a todos los que vallan a opinar.
Archivos Adjuntos
Tipo de Archivo: rar RF Usar + INT_v1.0.rar (84,1 KB (Kilobytes), 6 visitas)
Hace 4 Semanas #3144

Avatar de Dario

Hola gente, tanto tiempo. aqui de nuevo molestando con una consulta jeje...
resulta que estoy intentando hacer funcionar un modulo DFPLAYER MINI y he logrado comunicar el pic con el modulo. el unico problema que tengo, es que cuando reproduce la pista que le he ordenado reproducir, en este caso la numero 1, reproduce la ultima pista cargada. y si le cambio el numero de pista, por ejemlo, la 2, no funciona. queria saber si alguno de uds. ha trabajado con pbp y este modulo y me puede orientar un poquito. desde ya, se agradece cualquier idea. aqui les dejo el codigo que escribi, saludosss
PD: (ya vi un ejemplo en este mismo thread, pero no lo puedo entender y ademas no puedo usar el hserout en el micro... , perdon )

Código:
@ device  pic16F876A, hs_osc, wdt_off, pwrt_on, lvp_off, protect_off, bod_off
define loader_used 1
define osc 20     ; especifica que se va a utilizar uno de 20 Mhz
'*****************************************************************
adcon1 = 7        'se desactivan entradas analógicas'
cmcon  = 7        'se desactivan los comparadores (I/O digitales)'
trisa = %00000001         'se programa el puerto A como salida' 
trisb = %00000000         'se programa el puerto B como salida'
trisc = %00000000         'se programa el puerto C como salida'
PORTA=%00000001
PORTB=%00000000
PORTC=%00000000

'*****************************************************************
include "modedefs.bas"



LOOP:
IF PORTA.0=0 THEN 
GOSUB TRANSMITE
ENDIF
PAUSE 100
GOTO LOOP

TRANSMITE: 'PLAY TRACK n-1 
IF PORTA.0=0 THEN TRANSMITE
SEROUT portb.7,t9600,[$7E,$FF,$06,$03,$00,$00,$01,$FE,$F7,$EF] ' play track n.1 
PAUSE 10
RETURN

END
Hace 4 Semanas #3145
Moderador

Avatar de D@rkbytes

Yo tuve ese problema, pero no recuerdo si fue con el dfplayer mini o con otro módulo.
El asunto era que reproducía las pistas por fecha de creación y no por nombre de pista.

¿Renombraste los archivos como 001.mp3, 002.mp3, 003.mp3, etc.?
Hace 4 Semanas #3146

Avatar de Dario

D@rkbytes dijo: Ver Mensaje

¿Renombraste los archivos como 001.mp3, 002.mp3, 003.mp3, etc.?
Si, asi lo hice... todavia no puedo lograr nada diferente jeje...
Hace 4 Semanas #3147
Moderador

Avatar de D@rkbytes

Entonces puede ser que sí sea ese el módulo con el que tuve ese problema.
Posteriormente conseguí un módulo WT5001M02, pero lo olvidé y nunca lo usé.

Prueba cambiando la fecha a los archivos con esta aplicación: SetFileDate
Si cambia el orden de reproducción, entonces se debe a lo que comenté anteriormente.
Hace 4 Semanas #3148

Avatar de Dario

Ok, muchas gracias por tu tiempo amigo D@rkbytes, ya lo logre jeje... solo habia que hacer la siguiente modificacion:


Y el codigo quedaria asi:

Código:
@ device  pic16F876A, hs_osc, wdt_off, pwrt_on, lvp_off, protect_off, bod_off
define loader_used 1
define osc 20     ; especifica que se va a utilizar uno de 20 Mhz
'*****************************************************************
adcon1 = 7        'se desactivan entradas analógicas'
cmcon  = 7        'se desactivan los comparadores (I/O digitales)'
trisa = %00000001         'se programa el puerto A como salida escepto A0' 
trisb = %00000000         'se programa el puerto B como salida'
trisc = %00000000         'se programa el puerto C como salida'
PORTA=%00000001
PORTB=%00000000
PORTC=%00000000

'*****************************************************************
include "modedefs.bas"

LOOP:
IF PORTA.0=0 THEN 
GOSUB TRANSMITE
ENDIF
PAUSE 100
GOTO LOOP

TRANSMITE: 
SEROUT portb.0,T9600,[$7E,$FF,$06,$03,$00,$00,$01,$EF] ' play track n.1 
PAUSE 1000
RETURN

END
Imágenes Adjuntas
Tipo de Archivo: jpg FOROS EXPLICACION.jpg (55,6 KB (Kilobytes), 108 visitas)
Hace 4 Semanas #3149
Moderador

Avatar de D@rkbytes

Muy bien. Yo siempre enviaba el checksum.
En un rato que tenga tiempo me daré a la tarea de volver a probar ese módulo sin enviarlo.

Por ahora estoy bastante ocupado realizando una interfaz para el ELM327
Y aunque en el mercado ya existen, la que estoy realizando es bastante especial.
Hace 4 Semanas #3150

Avatar de Dario

Muy bueno. hoy ya vienen con comunicacion al celular, pero habemos personas que tenemos un autito viejito a las que nos vendria muy bien algo asi jeje... se le podria aumentar un modulo bluetooth para conectar a una aplicacion del celular jeje...
Hace 1 Semana #3151


Buenas amigos del foro, tengo una pregunta, estoy realizando un proyecto de una maquina para embobinar, la idea es que en un display se muestren los mensajes de dichos registros de cada evento, con un teclado matricial se ingresa el numero de vueltas y un sensor de efecto hall se encargara de percibir cuando de una vuelta el motor, mi duda es la siguiente, como hago para guardar 3 digitos en una sola variable, ejemplo, yo ingreso que la maquina va a dar 200 vueltas, cuando digito cada valor en el teclado se guardan cada uno en una misma variable, esa parte no la puedo entender.
Archivos Adjuntos
Tipo de Archivo: rar pic16f877a embobinar.rar (25,7 KB (Kilobytes), 11 visitas)
Hace 1 Semana #3152

Avatar de pandacba

Si para digito utilizaste una variable, cuando validas los sumas en otra.
ti tienes A, B,C,D como tus variables, utilzas las tres primeras y la suma las guardas en D
Si tienes 128 vueltas, al valida Aserá=1, B será =2 y C será = 8
Ahora que haces, A es unidad de centena por lo tanto multiplicas por 100, B es unidad de decena la multiplias por 10 y C como es unida la dejas tal cual.
ahora haces D=A+B+C en el ejemplo tendras en D almacenado 128 que es lo que te interesa para trabajar
luego haces tu bucle y comparas el valor actual con D y termina cuando son iguales , es una forma o vas decrementando D hasta que sea 0
O haciendo D parte de la variable del bucle "if"
Hace 1 Semana #3153

Avatar de torres.electronico

ATX dijo: Ver Mensaje
Buenas amigos del foro, tengo una pregunta, estoy realizando un proyecto de una maquina para embobinar, la idea es que en un display se muestren los mensajes de dichos registros de cada evento, con un teclado matricial se ingresa el numero de vueltas y un sensor de efecto hall se encargara de percibir cuando de una vuelta el motor, mi duda es la siguiente, como hago para guardar 3 digitos en una sola variable, ejemplo, yo ingreso que la maquina va a dar 200 vueltas, cuando digito cada valor en el teclado se guardan cada uno en una misma variable, esa parte no la puedo entender.
Hace un tiempo hice algo, ahi te comparto lo que yo arme... respecto a como lo hice, te cito algunos fragmentos

Código:
; DECLARACION DE VARIABLES     
a var byte
b var byte
DEG_1  var    Word
DEG_2  var    Word
DEG_3  var    Word
DEG_4  var    Word
DIGITO_1 var   Word
DIGITO_2 var   Word
DIGITO_3 var   Word
DIGITO_4 var   Word
Unidad   var   Word          ;unidad
Decena   var   Word          ;decena
Centena  var   Word          ;centena
Umil     var   Word
dig_VUELTA var word   
cuarteto   var byte
AuxW       var word        ;sayi var word
AuxB_a     var byte        ;tus var byte
AuxB_b     var byte        ;tus_b var byte
Aux1 var byte
aux2 var byte
aux3 var byte
aux4 var byte

inicio:
;****
;****
;****
;****
;****
programar:
;****BOTONES UNIDAD DE MIL********
IF Umil_MAS = 0 THEN
WHILE Umil_MAS = 0 : WEND
Umil=Umil + 1
if Umil > 9 then Umil=9
if Umil < 0 then Umil=0
aux1=umil
ENDIF
IF Umil_Menos = 0 THEN
WHILE Umil_Menos = 0 : WEND
Umil=Umil - 1
if Umil > 9 then Umil=9
if Umil < 0 then Umil=0
aux1=umil
ENDIF
;****BOTONES CENTENA********
;similar a U. de mil
aux2=centena
;****BOTONES DECENA********
;similar a U. de mil
aux3=decena
;****BOTONES UNIDAD********
;similar a U. de mil
aux4 = unidad
ENDIF
pause 10

digito_1 = aux1  
digito_2 = aux2  
digito_3 = aux3  
digito_4 = aux4 
dig_vuelta=digito_1+digito_2+digito_3+digito_4 
auxW=(digito_1*1000)+(digito_2*100)+(digito_3*10)+(digito_4*1)
;****
;****
;****
arranque:
If sensor=0 Then 
dig_vuelta=dig_vuelta-1 
auxw = auxw - 1
endif
If auxw =0 Then  GoTo FIN
pause 150
goto inicio
espero que te sea de ayuda en algo... saludos a todos y todas
Archivos Adjuntos
Tipo de Archivo: rar ETIbobinadora.rar (90,6 KB (Kilobytes), 11 visitas)
Hace 1 Semana #3154


hola soy nuevo en este foro aun no se como funciona o como hacer un seguimiento de los participantes

---------- Actualizado después de 28 minutos ----------

ATX dijo: Ver Mensaje
Buenas amigos del foro, tengo una pregunta, estoy realizando un proyecto de una maquina para embobinar, la idea es que en un display se muestren los mensajes de dichos registros de cada evento, con un teclado matricial se ingresa el numero de vueltas y un sensor de efecto hall se encargara de percibir cuando de una vuelta el motor, mi duda es la siguiente, como hago para guardar 3 digitos en una sola variable, ejemplo, yo ingreso que la maquina va a dar 200 vueltas, cuando digito cada valor en el teclado se guardan cada uno en una misma variable, esa parte no la puedo entender.

hola como estas queria saber si pudiste terminar el bobinador??
Hace 1 Semana #3155


carlosloza dijo: Ver Mensaje
hola soy nuevo en este foro aun no se como funciona o como hacer un seguimiento de los participantes

---------- Actualizado después de 28 minutos ----------




hola como estas queria saber si pudiste terminar el bobinador??
De hecho si pude, pero lo tengo en pantalla LCD 16X2, pude resolver el problema de la comparacion de los digitos ingresados del teclado con los del numero de vueltas dados por el motor

---------- Actualizado después de 8 minutos ----------

torres.electronico dijo: Ver Mensaje
Hace un tiempo hice algo, ahi te comparto lo que yo arme... respecto a como lo hice, te cito algunos fragmentos

Código:
; DECLARACION DE VARIABLES     
a var byte
b var byte
DEG_1  var    Word
DEG_2  var    Word
DEG_3  var    Word
DEG_4  var    Word
DIGITO_1 var   Word
DIGITO_2 var   Word
DIGITO_3 var   Word
DIGITO_4 var   Word
Unidad   var   Word          ;unidad
Decena   var   Word          ;decena
Centena  var   Word          ;centena
Umil     var   Word
dig_VUELTA var word   
cuarteto   var byte
AuxW       var word        ;sayi var word
AuxB_a     var byte        ;tus var byte
AuxB_b     var byte        ;tus_b var byte
Aux1 var byte
aux2 var byte
aux3 var byte
aux4 var byte

inicio:
;****
;****
;****
;****
;****
programar:
;****BOTONES UNIDAD DE MIL********
IF Umil_MAS = 0 THEN
WHILE Umil_MAS = 0 : WEND
Umil=Umil + 1
if Umil > 9 then Umil=9
if Umil < 0 then Umil=0
aux1=umil
ENDIF
IF Umil_Menos = 0 THEN
WHILE Umil_Menos = 0 : WEND
Umil=Umil - 1
if Umil > 9 then Umil=9
if Umil < 0 then Umil=0
aux1=umil
ENDIF
;****BOTONES CENTENA********
;similar a U. de mil
aux2=centena
;****BOTONES DECENA********
;similar a U. de mil
aux3=decena
;****BOTONES UNIDAD********
;similar a U. de mil
aux4 = unidad
ENDIF
pause 10

digito_1 = aux1  
digito_2 = aux2  
digito_3 = aux3  
digito_4 = aux4 
dig_vuelta=digito_1+digito_2+digito_3+digito_4 
auxW=(digito_1*1000)+(digito_2*100)+(digito_3*10)+(digito_4*1)
;****
;****
;****
arranque:
If sensor=0 Then 
dig_vuelta=dig_vuelta-1 
auxw = auxw - 1
endif
If auxw =0 Then  GoTo FIN
pause 150
goto inicio
espero que te sea de ayuda en algo... saludos a todos y todas
Muchas gracias con tus ideas me dio una solución, pensé en esto, usar 3 variables, ejemplo SET1, SET2, SET3 cada una corresponde cuando presiono una tecla, como es de 3 digitos por el momento, cuando presiono un numero se guardar el valor en SET1, cuando presiono otro numero avanza a guardar en SET2 y luego avanza y guarda en SET3, bien ahora salta en una subrutina al bucle donde empieza el motor a girar y a la vez a contar las vueltas que va dando el motor.

Ahora la solucion, cree otras 3 variables, VUELTAS1, VUELTAS2, VUELTAS3 empieza sumando de 0 a 9 VUELTAS3 y cuando es mayor de 9 suma por 1 a VUELTAS2 ahora tendriamos algo asi 010 serian 10 vueltas que a dado el motor, luego 3 condicionales IF para ver si SET1 es igual a VUELTAS1, si SET2 es igual a VUELTAS2 y si SET3 es igual a VUELTAS3, todo dio perfecto asi comparando variable por individual si pudo comparar y decifrar el numero de vueltas para detener el programa.

---------- Actualizado después de 4 minutos ----------

ATX dijo: Ver Mensaje
De hecho si pude, pero lo tengo en pantalla LCD 16X2, pude resolver el problema de la comparacion de los digitos ingresados del teclado con los del numero de vueltas dados por el motor

---------- Actualizado después de 8 minutos ----------



Muchas gracias con tus ideas me dio una solución, pensé en esto, usar 3 variables, ejemplo SET1, SET2, SET3 cada una corresponde cuando presiono una tecla, como es de 3 digitos por el momento, cuando presiono un numero se guardar el valor en SET1, cuando presiono otro numero avanza a guardar en SET2 y luego avanza y guarda en SET3, bien ahora salta en una subrutina al bucle donde empieza el motor a girar y a la vez a contar las vueltas que va dando el motor.

Ahora la solucion, cree otras 3 variables, VUELTAS1, VUELTAS2, VUELTAS3 empieza sumando de 0 a 9 VUELTAS3 y cuando es mayor de 9 suma por 1 a VUELTAS2 ahora tendriamos algo asi 010 serian 10 vueltas que a dado el motor, luego 3 condicionales IF para ver si SET1 es igual a VUELTAS1, si SET2 es igual a VUELTAS2 y si SET3 es igual a VUELTAS3, todo dio perfecto asi comparando variable por individual si pudo comparar y decifrar el numero de vueltas para detener el programa.
Aqui les dejo este proyecto como aporte a la comunidad, se que lo pueden mejorar con mas modificaciones pero el principo del programa puede servir de mucho
Archivos Adjuntos
Tipo de Archivo: rar Embobinador finalizado.rar (27,4 KB (Kilobytes), 3 visitas)
Hace 1 Semana #3156

Avatar de pandacba

No te hacen falta tres variables para contar, no tiene sentido, porque las vueltas o las contas en una sola variable hasta llegar al total(suma de los digitos) o la haces la variable de un fucler for hasta llegar a 0
Hace 1 Semana #3157


pandacba dijo: Ver Mensaje
No te hacen falta tres variables para contar, no tiene sentido, porque las vueltas, o las contás en una sola variable hasta llegar al total (suma de los dígitos) o las haces en la variable de un bucle for hasta llegar a 0
Comprendo lo que dices, pero la idea no estuvo mal, funciona igual y creo que es menos programación.
El tuyo es más complejo y la verdad fue lo último que se me ocurrió.
Hace 6 Días #3158

Avatar de roberttorres

Buenas
¿Ya lo probaste en físico?, tu código tiene problemas de estructura, en la simulación de proteus esta desbordando la pila por la instrucción de retorno(stack overflow return instruccion), eso se debe a que una rutina esta anidada dentro de otra(gosub) y no tiene la instrucción de retorno(return)lo que hace que el micro no sepa en que parte del código retornar desbordando así la pila.

Imágenes Adjuntas
Tipo de Archivo: jpg bobinadora (2).jpg (167,4 KB (Kilobytes), 35 visitas)
Hace 6 Días #3159


roberttorres dijo: Ver Mensaje
Buenas
¿Ya lo probaste en físico?, tu código tiene problemas de estructura, en la simulación de proteus esta desbordando la pila por la instrucción de retorno(stack overflow return instruccion), eso se debe a que una rutina esta anidada dentro de otra(gosub) y no tiene la instrucción de retorno(return)lo que hace que el micro no sepa en que parte del código retornar desbordando así la pila.
Sí, ya lo he probado y no da ningún error, es el proteus.
Al programa le corregí unos errores, después del 099 no podía comparar, le agregué unos condicionales IF y ahora sí puede trabajar.

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

Aquí la mejora del proyecto:
Archivos Adjuntos
Tipo de Archivo: rar final embobinar.rar (27,8 KB (Kilobytes), 5 visitas)
Hace 6 Días #3160

Avatar de pandacba

Me alegro que lo hayas echo funcionar, pero respecto de lo que dijiste como yo te lo plantee lleva más código, no es así, precisamente esta planteado para utilizar el menor código posible, al utilizar una sola variable para el total, lleva mucho menos código ya que ese proceso lo tenes multiplicado como tantas veces varibles individuales tienes.
En el que yo hice utilice una memoria flash externa para almacenar esa variable, asi si apago la máquina no debo setear todo de nuevo al encenderla, como me sobraban pines le di la posibilidad de utilzar un display LCD o uno basado en 7 segmentos y algunos extras más que no recuerdo
¿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 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.