Hola, amigos. Estoy tratando de programar una balanza electrónica que cuenta con las siguientes características:
Una celda de carga junto a un circuito de amplificación, entregan de 0 a 5 voltios a la entrada (AN0) del PIC16F877A .
Luego, uso el módulo del ADC para obtener una salida digital del peso de (0 a 30 kg), este peso es proporcional al voltaje de entrada.
Después, el peso se muestra en un LCD.
Al realizar las características mencionadas anteriormente, no tengo problemas en hacerlo; pero también necesito conectar un teclado 3x4 para poner el precio por unidad de kilo del producto, y ese precio que se multiplique por el peso y así obtener el precio total que se va a pagar.
Ahí es donde entra mi problema, ya que según he estado leyendo el PIC sólo puede realizar una sola tarea a la vez,
así que no puede estar usando el módulo ADC y a la vez detectando el número que se está pulsando en el teclado.
El código de la primera parte es el siguiente:
El circuito en Proteus, lo dejo más abajo.
Como había dicho anteriormente, el código que puse sólo realiza la primera parte.
¿Podrían ayudarme con la ultima parte?
Por ahí vi que tenía que hacerlo con interrupciones, pero como recién estoy iniciando en programación, todavía no entiendo de qué se trata.
Estoy utilizando PIC C Compiler. Gracias.
Una celda de carga junto a un circuito de amplificación, entregan de 0 a 5 voltios a la entrada (AN0) del PIC16F877A .
Luego, uso el módulo del ADC para obtener una salida digital del peso de (0 a 30 kg), este peso es proporcional al voltaje de entrada.
Después, el peso se muestra en un LCD.
Al realizar las características mencionadas anteriormente, no tengo problemas en hacerlo; pero también necesito conectar un teclado 3x4 para poner el precio por unidad de kilo del producto, y ese precio que se multiplique por el peso y así obtener el precio total que se va a pagar.
Ahí es donde entra mi problema, ya que según he estado leyendo el PIC sólo puede realizar una sola tarea a la vez,
así que no puede estar usando el módulo ADC y a la vez detectando el número que se está pulsando en el teclado.
El código de la primera parte es el siguiente:
PHP:
#INCLUDE <16F877A.H>
#DEVICE ADC = 10
#FUSES HS
#USE DELAY(CLOCK = 20M)
#INCLUDE <lcd.c>
#include <kbd4x4_1.c>
#define use_portd_lcd TRUE //Configuración puerto D control lcd
#define use_portb_kbd true
float precio;
float peso;
int16 ADC;
int x;
char key;
void main ()
{
SETUP_ADC(ADC_CLOCK_INTERNAL);
SETUP_ADC_PORTS(ALL_ANALOG);
SET_ADC_CHANNEL(0);
delay_us(20);
port_b_pullups(true);
lcd_init();
lcd_putc("\f Balanza \n");
lcd_putc(" Electronica ");
delay_ms(1000);
lcd_putc("\f"); // Limpia pantalla
lcd_putc("Peso = ");
lcd_gotoxy(15,1); // Acomoda cursor LCD
lcd_putc("Kg");
delay_ms(50);
lcd_putc("\nValor =");
lcd_gotoxy(9,2); // Acomoda cursor LCD
lcd_putc("s/");
delay_ms(50);
while (TRUE)
{
key=kbd_getc(); // detecta la tecla pulsada
x=key-48; // comvirtiendo en valor entero
if(key!=0) // si se pulsa una tecla entra a ......
{
precio = x * peso; // calculo del precio
lcd_gotoxy(10,2);
printf(lcd_putc,"%02.2g",precio); // nuestra el valor del peso
}
ADC = READ_ADC();
peso = 30.0*ADC/1023.0;
lcd_gotoxy(8,1);
printf(lcd_putc,"%02.2g",peso);
delay_ms(100);
}
}
Como había dicho anteriormente, el código que puse sólo realiza la primera parte.
¿Podrían ayudarme con la ultima parte?
Por ahí vi que tenía que hacerlo con interrupciones, pero como recién estoy iniciando en programación, todavía no entiendo de qué se trata.
Estoy utilizando PIC C Compiler. Gracias.
Adjuntos
Última edición por un moderador: