Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

03/11/2011 #1


[AYUDA] PIC16F870 no conmuta entre puertos ADC
Bueno se que soy nuevo y generalemente suelo resolver mis problemas por mi mismo, pero esta vez necesito alguien me de una ayuda.

Si alguien es tan amable, intentaré ser breve.

Estoy usando PICS 16F870 y PIC C Compiler.

El programa es bastante basico, necesito leer la entrada AN0 (un valor analogico) y mientras se de una condicion (mayor o menor que) leer el AN1 y luego de otra condicion activar una salida.

A groso modo:

While (AN0 < X1 ){
If (AN0 < X2){
Activar salida
}
El problema es que al hacer el cambio de lectura de puerto en proteus anda bien, pero en plaqueta no, solo me lee el puerto AN0


setup_adc_ports(ALL_ANALOG);
setup_adc(ADC_CLOCK_DIV_32); //Configuracion de los ADC

While (TRUE){
set_adc_channel(0); // Configuro puerto 0
delay_ms(1);
// Espero para el cambio
PA1=read_adc();
//Leo valor
dato1=PA1 / 50;
//Lo modifico
delay_ms(200);
//Espero 200 ms
set_adc_channel(1);
//Configuro canal 1 (AN1)
delay_ms(1);
//Espero 1ms para el cambio
PA2=read_adc();
//Leo valor
dato2= PA2 *2 ;
//Lo modifico
//LINEA 1
lcd_gotoxy(1,1); //(x,y)
printf(LCD_PUTC,"Nivel= %fV",dato1);
//LINEA 2
lcd_gotoxy(1,2); //(x,y)
printf(LCD_PUTC,"Temper= %2.1fC",dato2);

}
Cualquier ayuda será bienvenida.

Muchas gracias.
08/11/2011 #2


Bueno, ahora parece medir en ambos canlales.
Pero no entiendo porque conectandole la salida del LM35 (lo ponga en el canal que lo ponga) siempre tiene 210mV y otro aparato que entrega una tension mide perfecto.

La verdad me desconcierta...

Dejo el codigo por si alguno le sirve o ve algo:


#include <16f870.h> //libreria del pic.
#fuses XT //tipo de cristal externo
#fuses NOWDT //Sin Watch Dog Timer
#fuses NOPROTECT //Codigo DesProtegido
#fuses NOLVP //Sin programacion de bajo voltaje.
#use delay (clock=4MHZ) //Cristal 4MHZ
#include <flex_lcd_orig.c>

//#define PORTA 0X05 //Defino los puertos
//#define PORTB 0X06 //Defino los puertos
//#define PORTC 0X07 //Defino los puertos

void main()
{

float PA1; //Variables declaradas
float PA2;

output_A(0x0);
output_B(0x0);
output_C(0x0);

delay_ms(10);

output_high(PIN_B7);

lcd_init(); //inicializacion del LCD
setup_adc_ports(AN0_AN1_AN3); //AN0 AN1 y AN3 analogicas
setup_adc(ADC_CLOCK_DIV_32); //Configuracion de los ADC
delay_ms(1);

set_tris_a(1);
set_tris_b(0);
set_tris_c(0);

while (TRUE)
{
set_adc_channel(0); //SELECCIONO CANAL 0
delay_ms(1); //espero cambio
PA1=read_adc() * 2; //leo y grabo en PA1 y ajusto la escala
delay_ms(1);

set_adc_channel(1); //SELECCIONO CANAL 1
delay_ms(1); //espero cambio
PA2=read_adc() / 50; //leo y grabo en variable PA2 y ajusto la escala
delay_ms(1); //delay por si acaso


//LINEA 1
lcd_gotoxy(1,1); //(x,y)
printf(LCD_PUTC,"Nivel= %fV",PA1);
//LINEA 2
lcd_gotoxy(1,2);
printf(LCD_PUTC,"Temper= %fC",PA2);

}
}
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.