M52259DEMO:Problem using adc device and functions

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

M52259DEMO:Problem using adc device and functions

3,248 Views
d_vara
Contributor III

Hi.

I am working with 52259 chip and its M52259DEMO board.

I am trying to expand hvac demo example with adc extra functions.

I test my Demo board with adc example. And I have check hvac example. All it is ok.

But when I try use to code of first code into second code example I have problems.

I can open ADC device "f=fopen("adc:",&adc_init);" in hvac code.

But I can not open any channel:  "f1=fopen("adc:1",&adc_channel_param1);" in hvac code.

f1 is empty, its value is NULL.

The same code works in the adc example code.

 

I want use adc with MQX.

I do not understand why it does not work in MQX.

Help me, please.

Thank you.

Labels (1)
0 Kudos
10 Replies

886 Views
d_vara
Contributor III

Hi again.

I have discover one pssible problem:

I had wrote wrong this line:     f1 = fopen("adc:1", (const char*)&adc_channel_param1);
I wrote "adc1:" in device name....XDXDXD

But it still doesn´t work. I´m probe the new version of MQX.

Regards.

0 Kudos

886 Views
d_vara
Contributor III

I have just to resolve my problem, adc device running in MQX.

There are to use io_ioctl functions, with IOCTL_ADC_FIRE_TRIGGER.

 

Thanks for nothing. 

 

If anyone have problem, write me. By

0 Kudos

886 Views
ernesto_arc
Contributor II

 

 Hello!

I'm trying to run the ADC with M52259DEMO card. But the examples do not work that brings MQX

 

    printf("Opening ADC device ...");

    f = fopen("adc:", (const char*)&adc_init);
    if(f != NULL)
    {   
        printf("done\n");
    }
    else
    {   
        printf("failed\n");
        _task_block();
    }

 

 

always generates the following response

 

"Opening ADC device  failed"

 

I find no way to make it work. Please can you help me with this problem?

 

Thanks!

0 Kudos

886 Views
d_vara
Contributor III

Hello Ernesto.

 

I think that you have the same problem that me.

You must rewrite :

 

FILE_PTR  f,fadc, fadc0, fadc1, fadc2, fadc3, fadc4, fadc5, fadc6, fadc7;

f = fopen("adc:",&adc_init);

fadc = fopen("adc:0",&adc_channel_param0); //for example

 

I create 8 handlers, and one more called f, and fadc.

First you create a handler. Second, you start the interfaz ADC,  and then you assign sources to this handler choosing the channel.

 

I use to the next code:

 

ADC_RESULT_STRUCT data;

FILE_PTR  f,fadc, fadc0, fadc1, fadc2, fadc3, fadc4, fadc5, fadc6, fadc7;
pointer event_ptr;
data.result=VALOR_NO_VALIDO;     //VALOR_NO_VALIDO is it data wrong.

f = fopen("adc:",&adc_init);
if(f != NULL)
{   
     printf("OK.\n");
}
else//....code for errors

for (canal=0;canal!=8;canal++)     //open the 8 ADC´s
    {
        //printf("Abriendo canal #%d...",canal);
        switch (canal)
        {
       
            case ADC_SOURCE_AN0: fadc = fopen("adc:0",&adc_channel_param0);
                                 fadc0=fadc;
                                 break;
            case ADC_SOURCE_AN1: fadc = fopen("adc:1",&adc_channel_param1);
                                 fadc1=fadc;
                                 break;
            case ADC_SOURCE_AN2: fadc = fopen("adc:2",&adc_channel_param2);
                                 fadc2=fadc;
                                 break;
            case ADC_SOURCE_AN3: fadc = fopen("adc:3",&adc_channel_param3);
                                 fadc3=fadc;
                                 break;
            case ADC_SOURCE_AN4: fadc = fopen("adc:4",&adc_channel_param4);
                                 fadc4=fadc;
                                 break;
            case ADC_SOURCE_AN5: fadc = fopen("adc:5",&adc_channel_param5);
                                 fadc5=fadc;
                                 break;
            case ADC_SOURCE_AN6: fadc = fopen("adc:6",&adc_channel_param6);
                                 fadc6=fadc;
                                 break;
            case ADC_SOURCE_AN7: fadc = fopen("adc:7",&adc_channel_param7);
                                 fadc7=fadc;
                                 break;
        }
        if(fadc != NULL)
        {
            //printf("correcto, puntero asociado a canal %d OK.\n",canal);
        }
        else//..code for errors{}

}

 

//and learn conversion....bucle

switch (canal)
            {
                case ADC_SOURCE_AN0: fadc=fadc0;
                                     break;
                case ADC_SOURCE_AN1: fadc=fadc1;
                                     break;
                case ADC_SOURCE_AN2: fadc=fadc2;
                                     break;
                case ADC_SOURCE_AN3: fadc=fadc3;
                                     break;
                case ADC_SOURCE_AN4: fadc=fadc4;
                                     break;
                case ADC_SOURCE_AN5: fadc=fadc5;
                                     break;
                case ADC_SOURCE_AN6: fadc=fadc6;
                                     break;
                case ADC_SOURCE_AN7: fadc=fadc7;
                                     break;
            }
            ioctl(f,IOCTL_ADC_FIRE_TRIGGER,(pointer)ADC_TRIGGER_1);
            _time_delay(500);//espera
            if (read(fadc, &data, sizeof(data)))
            {
                if (data.result!=VALOR_NO_VALIDO) data_save=data.result;
            }
            else printf("Fail to learn.\n");

 

 

 

This is WORK!!

 

Tell your experience

 

0 Kudos

886 Views
ernesto_arc
Contributor II

Hola d.vara.

 

Intento realizar lo que me indicas, pero creo el problem que yo tengo esta antes de intentar seleccionar el canal de conversion o de intentar tomar lectura por ese canal.  El problema especificamente esta al intentar:

 

f = fopen("adc:",&adc_init);

 

Siempre me da la respuesta

 

printf("failed\n");

 

 

 

Yo habilito el ADC colocando:

 

#define BSPCFG_ENABLE_ADC        1

 

.. Intente grabar un video con las pasos de como intento realizar la prueba.. en ella tal vez sea mas facil encontrar que hago mal.

 

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

 

Muchas gracias por tus respuestas

SALUDOS!

0 Kudos

886 Views
d_vara
Contributor III

Hola Ernesto_arc.

 

Acabo de ver el video y me dejas perplejo.

Creí que no te funcionaba en el programa, pero no te va ni el ejemplo.

A mi con codewarrior 7.1.2 y el MQX 3.3 me funciona tanto el ejemplo como el programa.

 

Se que siempre lo dicen, pero antes de toooodo esto has recargado las librerías?

 

A veces se nos olvida, y luego no funcionan las cosas.

 

Vete a \Freescale MQX 3.3\config\m52259demo

y recarga el archivo build_libs.mcp.

Lo compilas, y entonces se hace activa la directiva que activa el ADC.

 

Ya me cuentas.

 

Por cierto de donde eres?

0 Kudos

886 Views
ernesto_arc
Contributor II

Hola d.vara!

 

Te cuento que intente todo lo que me indicaste y seguia sin trabajar... En vista de que no habia mas nada que faltara por hacer, decido daar formato al disco de mi PC y renstalar todo desde cero, hasta el sistema operativo..

 

FUNCIONO!... Tenia windows Seven RC y lo reinstale con la sorpresa de que funciono de una. 

 

Quiero agradecerte tus respuestas a mis llamados de auxilio. 

 

Muchas gracias!

 

PD: Soy de Colombia.. ¿y tu?

0 Kudos

886 Views
d_vara
Contributor III

Hola Ernesto.

 

me alegro mucho por ti.

 

yo soy de España.

Ahora mismo estamos parados con este chip. 

Keriamos conectarlo a una pantalla tft, pero resulta que la placa de evaluación no posee las conexiones necesarias.

Estamos algo desanimados, y estamos pensando en probar con Microchip.

 

Si te surge cualquier duda, no dudes en mandarme un privado, aunque espero que en unos meses seas tu el que sepa más que yo.

 

Un saludo.

 

0 Kudos

886 Views
eGuy
Contributor IV

This question belongs to MQX forum board. Please later post mqx related question to that board, you probably can get quicker response.

 

 Search "adc:" under MQX directory, you can find _io_adc_install("adc:") is conditional compiled based on BSPCFG_ENABLE_ADC, then you should know that BSPCFG_ENABLE_ADC should be set to 1 (not 0 )to enable adc related functions.

 

Hope this helps.

 

Jeff.

Message Edited by eGuy on 2009-10-30 08:23 AM
0 Kudos

886 Views
ernesto_arc
Contributor II

Hello eGuy,

 

this is not the problem, I correctly Enable  BSPCFG_ENABLE_ADC.

 

This is a video of how I test with ADC...But whatever I try, always gives the same result
0 Kudos