Duda con ADC y GPIO de edu-ciaa

270 views
Skip to first unread message

Federico Carnevale

unread,
Jan 7, 2016, 2:44:12 PM1/7/16
to Embebidos32
Hola, soy nuevo en este tipo de programación (entiendo la electrónica) y lei el PDF "Introduccion a OSEK-OS" que me ayudo mucho. En diciembre arranque a hacer pruebas con la edu-ciaa-nxp y entendi como funcionan los ejemplos de los leds y los interruptores. Ahora quiero hacer pruebas con el ADC y vi un ejemplo que tiene lo siguiente:

1  fd_adc = ciaaPOSIX_open("/dev/serial/aio/in/0", ciaaPOSIX_O_RDONLY);
2  ciaaPOSIX_ioctl(fd_adc, ciaaPOSIX_IOCTL_SET_SAMPLE_RATE, 100000);
3 ciaaPOSIX_ioctl(fd_adc, ciaaPOSIX_IOCTL_SET_CHANNEL, ciaaCHANNEL_3)

Vi en el grupo que hicieron un par de dudas con este código pero no me queda del todo claro de lo que hacen la segunda y tercer liena (sobre todo la segunda).
luego viene la tarea analogic:

TASK(Analogic)
{
   uint16_t hr_ciaaDac;

   /* Read ADC. */
   ciaaPOSIX_read(fd_adc, &hr_ciaaDac, sizeof(hr_ciaaDac));

   /* Signal gain. */
   hr_ciaaDac >>= 0;

   /* Write DAC */
   ciaaPOSIX_write(fd_dac, &hr_ciaaDac, sizeof(hr_ciaaDac));

   /* end of Blinking */
   TerminateTask();

lo que entiendo de esta parte es que toma la señal analogica y la escribe discretizada en hr_ciaaDac y luego la vuelve a sacar por el DAC. No veo una alarma u algo que haga que la tarea se repita.
Otra duda que tengo es ¿ Cuales son los valores de discretización (rango)? basicamente quiero tomar una señal del ADC y en base a ese valor realizar una accion (por ejemplo si la señal analogica es un escalon de 5V o mayor que prenda un led).

Otra duda que tengo es: ¿ Como uso los GPIO? supongamos que quiera poner en "1" GPIO1 o supongamos que quiera escribir un numero de 1 Byte desde GPIO0 a GPIO7.
Si me tienen paciencia seria joya porque en C hice muy pocas cosas.

Gracias.

Federico.

Mariano Cerdeiro

unread,
Jan 7, 2016, 3:00:22 PM1/7/16
to embebidos32
Hola Federico,

efectivamente parece que es un error. La tarea si se activa de forma ciclica pero esta medio mal el código.

Fijate en: https://github.com/ciaa/Firmware/blob/master/examples/adc_dac/etc/adc_dac.oil#L83

Lo que no me encanta que además paralelamente se hace:
https://github.com/ciaa/Firmware/blob/master/examples/adc_dac/src/adc_dac.c#L162

y esto puede generar una doble activación, lo que en https://github.com/ciaa/Firmware/blob/master/examples/adc_dac/etc/adc_dac.oil#L70 no esta permitido, por ende podria generar un halt del rtos.

En concreto: el ejemplo funciona, la tarea se ejecuta periodicamente cada 1ms pero hay un riesgo latente que se cuelgue el sistema durante la inicialización.

Si te doy acceso al repo te animas a mejorar esto al menos con un comentario y sacando el activate task? que te parece? O hacer un fork y un pull request?

Saludos.
Mariano.-


--
-- 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 anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a embebidos32...@googlegroups.com.
Para acceder a más opciones, visita https://groups.google.com/d/optout.

Juan Cecconi

unread,
Jan 7, 2016, 7:24:19 PM1/7/16
to embebidos32

Sería bueno que lo modifique Federico que fue quien encontró el problema así toma más coraje!
Además quedó un Copy&Paste feo...hasta el.comentario dice modbus! ;)
Saludos y buen aporte

Federico Carnevale

unread,
Jan 8, 2016, 9:45:02 AM1/8/16
to Embebidos32
Mucha presión me ponen jajaja. Por ahi con el tiempo gane confianza a medida que entienda mas del tema.

Con el tema de la variable "hr_ciaaDac"¿que rango de valores toma esa conversión? es de 10 bit?? osea va de 0 a 1023? y de cuanto es la resolución en tensión???
Porque quiero hacer unas pruebas if para prender leds.

Juan Cecconi

unread,
Jan 8, 2016, 10:06:30 AM1/8/16
to embebidos32
La respuesta está posiblemente en la wiki del proyecto...pero seguro seguro en el datasheet del micro! ;)
Saludos

Mariano Cerdeiro

unread,
Jan 9, 2016, 5:57:28 AM1/9/16
to embebidos32, ciaa-f...@googlegroups.com, Juan Cecconi
Hola Federico,

ya hicimos los cambios, de hecho habiamos empezado antes... mira los cambios en:
https://github.com/ciaa/Firmware/pull/380/files

Comenta con gusto en la página, si ves algo raro.

Juan como independiente haces también un review y le das ok al pull request si estas deacuerdo?

Si alguien lo quiere probar se puede hacer:
git fetch
git checkout feature/improve_adc
git reset --hard feature/improve_adc (ojo si tenian cambios locales se pierden todos)

Saludos.
Mariano.-


Reply all
Reply to author
Forward
0 new messages