lunedì 30 gennaio 2012

Scheda pic per l'acquisizione dati da sensori IR






Firmware per l'invio delle misure dei quattro sensori:
#define    CPL1_RDA_BOUDRATE    115200        // RDA Boud Rate: ..., 9600, 14400, 19200, 38400, 57600, 115200, 128000
#use rs232(baud=CPL1_RDA_BOUDRATE,xmit=RDA_TX,rcv=RDA_RX,RESTART_WDT,STREAM=RDA1,BRGH1OK,DISABLE_INTS)

//------------------------------------------------------------------------------------------
void SendFrame()
{
// Versione:        1.0.0
// Prima versione:  25.01.12
// Ultima modifica: 25.01.12
//
    printf("\r\nPronto per l'invio del frame\r\n");

    for(;;)
    {
        restart_wdt();
        if(kbhit())
        {
            Led2Toggle();
            if(getc()=='a') {
                Led1Toggle();
                delay_us(100);
                SendIrData();
            }
        }
    }
}
//------------------------------------------------------------------------------------------
void SendIrData()
{
// Versione:        1.0.0
// Prima versione:  25.01.12
// Ultima modifica: 25.01.12
//
    int i, frameChk;
    long val;
    int frameData[8];         // frame
    restart_wdt();

    AdcSetup(ALL_ANALOG, 4);
    val = Read_ADC();
    frameData[0] = val>>8;
    frameData[1] = val&0xFF;
    AdcSetup(ALL_ANALOG, 3);
    val = Read_ADC();
    frameData[2] = val>>8;
    frameData[3] = val&0xFF;
    AdcSetup(ALL_ANALOG, 5);
    val = Read_ADC();
    frameData[4] = val>>8;
    frameData[5] = val&0xFF;
    AdcSetup(ALL_ANALOG, 7);
    val = Read_ADC();
    frameData[6] = val>>8;
    frameData[7] = val&0xFF;

    frameChk = 0;
    putc(0x02);
    for(i = 0; i < 8; ++i)
    {
        putc(frameData[i]);
        frameChk += frameData[i];
    }
    frameChk = (int) ~frameChk;
    putc(frameChk);
    //putc(0x03);
}
//------------------------------------------------------------------------------------------

Firmware della scheda micro per la ricezione dei dati:

//------------------------------------------------------------------------------------------
void TestRxFrame()
{
// Versione:        1.0.6
// Prima versione:  25.01.12
// Ultima modifica: 25.01.12
//
    int chk;
    int16 n1,n2,n3,n4;

    printf(LcdPutc, "\fPremere P1 per \nricevere i dati");
    for(;;)
    {
        restart_wdt();
        if(kbhit()) printf(LcdPutc, "%x",getc());

        if(P1Click())
        {
            Led1Toggle();
            putc('a');

            if(getc()!=2)
            {
                printf(LcdPutc, "\fDati ricevuti\nnon validi");
                delay_ms(2000);
                printf(LcdPutc, "\f");
                continue;
            }
            n1 = getc()*0x100;
            n1+=getc();
            n2 = getc()*0x100;
            n2+=getc();
            n3 = getc()*0x100;
            n3+=getc();
            n4 = getc()*0x100;
            n4+=getc();
            chk = getc();

            printf(LcdPutc, "\f%05lu %05lu\n%05lu %05lu %03u",n1,n2,n3,n4,chk);

        }
    }
}

Nessun commento:

Posta un commento