TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: ituarte en 26 de Abril de 2012, 14:36:05
-
Hola tengo 3 sensores conectados a 3 pines consecutivos (PIN_0 ; PIN_1; PIN_2) , el primer sensor de temperatura me funciona correctamente, pero me gustaria que despues de un Delay de 3 segundos el adc leyera el PIN_1 y mostrara esos resultados y 3 segundos despues del PIN_2 y asi sucesivamente.
El codigo es el siguiente:
// Port B[0,1,2]=floating input no interr
// Analogic inputs
GPIO_Init(GPIOB, GPIO_PIN_0, GPIO_MODE_IN_FL_NO_IT);
GPIO_Init(GPIOB, GPIO_PIN_1, GPIO_MODE_IN_FL_NO_IT);
GPIO_Init(GPIOB, GPIO_PIN_2, GPIO_MODE_IN_FL_NO_IT);
//Init ADC
ADC1_Init(ADC1_CONVERSIONMODE_CONTINUOUS ,
ADC1_CHANNEL_0 , ADC1_PRESSEL_FCPU_D2, ADC1_EXTTRIG_TIM,
DISABLE, ADC1_ALIGN_RIGHT,ADC1_SCHMITTTRIG_CHANNEL1,
DISABLE);
// Show in LCD
while(1)
{
ADC1_StartConversion();
while(!(ADC1->CSR & 0x80 ));
temper=ADC1_GetConversionValue();
tempValue=((temper*300)/614)-59.97;
tempValueF=((tempValue*1.8)+32);
GPIO_WriteHigh(GPIOA,GPIO_PIN_3); // LED ON
LCD_CLEAR_DISPLAY();
LCD_printstring("Temperature\n");
LCD_2ndROW(); // Second line of LCD
LCD_printf("%u\n",tempValue);
LCD_printchar(0xdf); // Character º
LCD_printf("C \n");
LCD_printchar(0x2F); // Character /
LCD_printchar(0x2F);
LCD_printf(" %u\n",tempValueF);
LCD_printchar(0xdf);
LCD_printf("F \n");
GPIO_WriteLow(GPIOA,GPIO_PIN_3); // LED OFF
Delay (1400);
}
Solo he inicializado el channel0 porque no se si inicializando los canales 1 y 2 al hacer el ADC1_GetConversionValue() que valor me tomara,
Alguna idea??
-
Que microcontrolador? Que compilador? :?
En PICs debes iniciar los 3 pines como analógicos, luego seleccionar el canal, convertir, leer. Estos últimos pasos para cada pin.
Saludos!
-
Micro= STM8S207R8
Compilador = Stvdebug
Los 3 pines ya estan como analogicos
// Analogic inputs
GPIO_Init(GPIOB, GPIO_PIN_0, GPIO_MODE_IN_FL_NO_IT);
GPIO_Init(GPIOB, GPIO_PIN_1, GPIO_MODE_IN_FL_NO_IT);
GPIO_Init(GPIOB, GPIO_PIN_2, GPIO_MODE_IN_FL_NO_IT);
El canal lo selecciono con este
//Init ADC
ADC1_Init(ADC1_CONVERSIONMODE_CONTINUOUS ,
ADC1_CHANNEL_0 , ADC1_PRESSEL_FCPU_D2, ADC1_EXTTRIG_TIM,
DISABLE, ADC1_ALIGN_RIGHT,ADC1_SCHMITTTRIG_CHANNEL1,
DISABLE);
Inicio el conversor
ADC1_StartConversion();
pero para leer...no se como seleccionar que canal leer
-
Como dije eso era para PICs, para STM8 ni idea