Microcontroladores PIC en Linux.
¿Quieres reaccionar a este mensaje? Regístrate en el foro con unos pocos clics o inicia sesión para continuar.

BoostC, ejemplo: leer ADC (3 lineas) y mostrar en LCD.

Ir abajo

BoostC, ejemplo: leer ADC (3 lineas) y mostrar en LCD. Empty BoostC, ejemplo: leer ADC (3 lineas) y mostrar en LCD.

Mensaje por arcachofo Vie 28 Nov 2008 - 0:35

Este ejmplo lo usé para leer los niveles de luz, tomados en distintos tramos del panel solar del Busca-sol ( ) y mostrarlos en un LCD 20x2 para comprobar su funcionamiento. Está escrita para 16F876A, pero se puede adaptar a otros PIC, muestra una lectura sencilla de ADC (solo ADRESH) y el uso del driver LCD.

Código:


//***** pic16f876A *****

#include <system.h>

 
#pragma DATA _CONFIG, _HS_OSC & _WDT_OFF & _PWRTE_ON & _BODEN_OFF & _LVP_OFF & _CPD_OFF & _WRT_OFF & _DEBUG_OFF & _CP_OFF;

 
#pragma CLOCK_FREQ 8000000        //8 MHz
 
 
//------------------------ DEFINICIONES LCD-------------------------------

//------------------------------------------------------------------------
 
#define LCD_ARGS    2,        /* Interface type: mode 0 =8bit, 1 =4bit(low nibble), 2 =4bit(upper nibble) */ \

        1,            /* Use busy signal: 1 = use busy, 0 = use time delays */\

        PORTC, TRISC,        /* Data port and data port tris register */ \

        PORTC, TRISC,        /* Control port and control port tris register */ \

        1,            /* Bit number of control port is connected to RS */ \

        2,            /* Bit number of control port is connected to RW */ \

        3            /* Bit number of control port is connected to Enable */

//    C1  rs

//    C2  rw

//    C3  enable

//    C4  D4

//    C5  D5

//    C6  D6

//    C7  D7

 
#include <lcd_driver.h> // include the LCD template code
 
 
//----------------------- DEFINICIONES LEER ADC --------------------------

//------------------------------------------------------------------------

 
#define nivel_izq adc_read(1); n_izq = read;

#define nivel_tra adc_read(2); n_tra = read;

#define nivel_der adc_read(3); n_der = read;
 
 
//----------------------- CONFIGURAR VARIABLES ---------------------------

//------------------------------------------------------------------------

 
char read;                //lectura ADC

char conta;                //contador

int n_der;                //nivel luz derecha

int n_tra;                //nivel luz atras

int n_izq;                //nivel luz izquierda
 
 
//----------------------------- FUNCIONES --------------------------------

//------------------------------------------------------------------------

 
void adc_read(char canal)

{

    switch (canal)

    {

        case 1:

            adcon0 = 0b10000101;

        case 2:

            adcon0 = 0b10001101;

        case 3:

            adcon0 = 0b10010101;

        case 4:

            adcon0 = 0b10011101;

        case 5:

            adcon0 = 0b10100101;

    }

   
    while (adcon0.2 == 1);

    read = adresh;

}

 
void main()

{

//------------------------- CONFIGURAR PUERTOS ---------------------------

//------------------------------------------------------------------------

 
    trisa = 0b11111;

    trisb = 0b00000000;

    trisc = 0b00000000;

   
    porta = 0b00000;

    portb = 0b00000000;

    portc = 0b00000000;

   
    adcon0 = 0b01000001;

    adcon1 = 0b00000000;        //leer solo adresh (256 valores)

   
//------------------------------------------------------------------------

//----------------------------- PRINCIPAL --------------------------------
 
    lcd_setup();
 
    delay_ms(100);

   
    while( 1 )

    {

        lcd_clear();

       
        nivel_izq                //leer niveles de luz

        nivel_tra

        nivel_der
 
        n_der = n_der * 2 - n_tra;

        n_tra = n_tra - n_izq;
 
        lprintf( "I:%3d", n_izq );

        lprintf( " T:%3d", n_tra );

        lprintf( " D:%3d", n_der );

       
        delay_ms( 500 );

    }

}


arcachofo
arcachofo
Participante Activo
Participante Activo

Mensajes : 91
Fecha de inscripción : 26/11/2008

Volver arriba Ir abajo

Volver arriba

- Temas similares

 
Permisos de este foro:
No puedes responder a temas en este foro.