Problema con USB y DAC en SAMD21

155 views
Skip to first unread message

Ramiro Vera

unread,
Jan 8, 2020, 8:08:31 AM1/8/20
to Embebidos32
Hola gente! Espero que anden bien.

Acudo a ustedes para preguntarles a que se debe el error que estoy teniendo.
Les hago una breve introduccion: Estoy desarrollando una placa que controla las luces y sonido de barrales de bomberos, ambulancia y patrulleros.
En el mismo uso el micro SAMD21 (CortexM0+) que tiene la posibilidad de usar el USB directo y lo uso como log para ver el estado de la placa. 
SI prendo la salida de audio la placa funciona correctamente. El problema yace cuando prendo la salida de audio y quiero ver lo que saca el USB a traves de algun programa como minicom o putty. Basicamente cada tiempos periodicos (aprox 50ms) el audio se plancha (aprox por 15ms), rompiendo la buena calidad del mismo. Lo raro es que solo se da si prendo el programa, es decir, si cierro el programa el audio no se plancha.
Revise que no haya funciones bloqueantes en el log, trate de cambiar las prioridades pero no pude solucionarlo. La unica solucion que aplique es desactivar el modulo de USB durante la salida de audio, pero pierdo el log del amplificador que es necesario para control. 
Trate de explicarlo como algun tipo de handshake interno que tiene el USB que no lo puedo controlar y me saca recursos del micro pero sinceramente no se bien cual es el problema.
En octubre postee en AVRFreaks el mismo problema pero no me respondieron nada. Ahi subi algunas fotos de como se ve el audio por si no quedo claro.


Me gustaria que dejen su opinion de cual seria el problema y si es posible cual seria la solucion optima. Acepto cualquier sugerencia. Si necesitan que explique algo de nuevo lo hago sin problemas.
Sin mas muchas gracias por leer el post
Saludos

Ramiro Vera
flatamp2.png
flatamp.png

Ing. Mirko Serra

unread,
Jan 8, 2020, 8:49:01 AM1/8/20
to embeb...@googlegroups.com
Ideas sueltas. ¿Estás usando algún tipo de DMA para la salida o solo un bucle tirándole datos? Si tenés DMA tal vez podés darle algún buffer para que no se interrumpa el DAC.
Otra posibilidad es trabajar USB por polling. Otra opción es simular polling enmascarando la interrupción del USB y decidiendo vos cuándo atenderla. También podés deshabilitar la interrupción del USB para ver si es eso lo que está molestando.

Saludos.


--
-- Recibiste este mensaje porque estás suscripto al Grupo Google Embebidos32. Para postear en este grupo, escribe un email a embeb...@googlegroups.com. Para des-suscribirte, envía un email a embebidos32...@googlegroups.com. Para más opciones, visita el sitio del grupo en https://groups.google.com/d/forum/embebidos32?hl=es
---
Has recibido este mensaje porque estás suscrito al grupo "Embebidos32" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a embebidos32...@googlegroups.com.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/embebidos32/cd9b79f4-bcc0-496b-b360-475b6f7b5211%40googlegroups.com.

Carlos Pantelides

unread,
Jan 8, 2020, 5:20:43 PM1/8/20
to Embebidos32
si te contentás con que ande sin saber por que falló, quizás podrías guardar el log y recuperarlo luego?

Ramiro Vera

unread,
Jan 20, 2020, 7:46:27 AM1/20/20
to Embebidos32
Hola Mirko gracias por responder y perdon por tardar en la respuesta.

Actualmente el programa hace polling cuando quiero mandar por log. Lo que hice hasta ahora es deshabilitar el log durante la interrupcion de DAC, pero mi ideal seria que en algun momento, trabajen juntos. Pense en pasarle datos al DMA pero creo que tendria el mismo problema cuando quiera interrumpir la secuencia del DAC para cargar los datos al DMA. Igual es una alternativa que eventualmente seria mejor que la que tengo hasta ahora.
Muchas gracias por el aporte!
Saludos 

Ramiro

El miércoles, 8 de enero de 2020, 10:49:01 (UTC-3), Mirko escribió:
Ideas sueltas. ¿Estás usando algún tipo de DMA para la salida o solo un bucle tirándole datos? Si tenés DMA tal vez podés darle algún buffer para que no se interrumpa el DAC.
Otra posibilidad es trabajar USB por polling. Otra opción es simular polling enmascarando la interrupción del USB y decidiendo vos cuándo atenderla. También podés deshabilitar la interrupción del USB para ver si es eso lo que está molestando.

Saludos.


El mié., 8 ene. 2020 a las 13:08, Ramiro Vera (<ramir...@gmail.com>) escribió:
Hola gente! Espero que anden bien.

Acudo a ustedes para preguntarles a que se debe el error que estoy teniendo.
Les hago una breve introduccion: Estoy desarrollando una placa que controla las luces y sonido de barrales de bomberos, ambulancia y patrulleros.
En el mismo uso el micro SAMD21 (CortexM0+) que tiene la posibilidad de usar el USB directo y lo uso como log para ver el estado de la placa. 
SI prendo la salida de audio la placa funciona correctamente. El problema yace cuando prendo la salida de audio y quiero ver lo que saca el USB a traves de algun programa como minicom o putty. Basicamente cada tiempos periodicos (aprox 50ms) el audio se plancha (aprox por 15ms), rompiendo la buena calidad del mismo. Lo raro es que solo se da si prendo el programa, es decir, si cierro el programa el audio no se plancha.
Revise que no haya funciones bloqueantes en el log, trate de cambiar las prioridades pero no pude solucionarlo. La unica solucion que aplique es desactivar el modulo de USB durante la salida de audio, pero pierdo el log del amplificador que es necesario para control. 
Trate de explicarlo como algun tipo de handshake interno que tiene el USB que no lo puedo controlar y me saca recursos del micro pero sinceramente no se bien cual es el problema.
En octubre postee en AVRFreaks el mismo problema pero no me respondieron nada. Ahi subi algunas fotos de como se ve el audio por si no quedo claro.


Me gustaria que dejen su opinion de cual seria el problema y si es posible cual seria la solucion optima. Acepto cualquier sugerencia. Si necesitan que explique algo de nuevo lo hago sin problemas.
Sin mas muchas gracias por leer el post
Saludos

Ramiro Vera

--
-- Recibiste este mensaje porque estás suscripto al Grupo Google Embebidos32. Para postear en este grupo, escribe un email a embeb...@googlegroups.com. Para des-suscribirte, envía un email a embeb...@googlegroups.com. Para más opciones, visita el sitio del grupo en https://groups.google.com/d/forum/embebidos32?hl=es

---
Has recibido este mensaje porque estás suscrito al grupo "Embebidos32" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a embeb...@googlegroups.com.

Ramiro Vera

unread,
Jan 20, 2020, 7:51:02 AM1/20/20
to Embebidos32
Hola Carlos Pantelides, gracias por responder y perdon por la tardanza.

Actualmente me interesaria saber el porque. Sin embargo, sin saber exactamente el porque lo que me queda es que ande. No es una mala posibilidad, sin embargo la placa que tengo tiene planeado utilizar por largo tiempo las sirenas, y el log lo queria para avisos de warning o alertas. Podria pensarse que seria un flujo de error. Si lo desactivo o lo hago a destiempo podria quemarse algo o no atrapar el problema a tiempo.
De todas formas, es mejor lo que planteaste que lo que tengo ahora.
Muchas gracias por la respuesta
Saludos

Ramiro
Reply all
Reply to author
Forward
0 new messages