Saludos amigos de todopic, soy muy muy novato en este extenso mundo de los microcontroladores, apenas he desarrollado un par de programas en CSS 4.1 simulandolos en Proteus 8.
Ojala me puedan apoyar, intento desarrollar un pequeño proyecto, que a continuación describo:
Se trata de controlar una bomba de agua, que se encienda cuando un tánque se vacíe y que se detenga cuando este se llene, mostrando en un display de 7 segmentos 5 estados: 0=vacio, 1=1/4, 2=a la mitad, 3=3/4 y 4=lleno... y además se debe encender el punto decimal del display cuando la bomba está prendida y apagar cuando se apaga.
Resumiendo entonces se trata de 2 corridas: 1) cuando el tanque está vació y comienza a llenarse (bomba prendida) hasta que llega al estado lleno (bomba se apaga). 2) Cuando el tanque se está vaciando, la bomba no se prende hasta que se llegue al estado vacio.
Lo intente usando un switch, pero me fastidie pronto y ahora lo hice con estructuras if... Lo pego abajo. Pienso que el problema está en los puertos porque al hacer la simulación en proteus, los puertos de salida B, parecen muertos y no mandan nada al display... ya me desesperé, tal vez sea algo muy tonto de resolver, pero no es mi área, solo que quiero inciarme, mil gracias a todos los que gusten asesorarme.
#include <16F84A.h>
#FUSES NOWDT //No Watch Dog Timer
#FUSES XT //Crystal osc <= 4mhz for PCM/PCH , 3mhz to 10 mhz for PCD
#FUSES NOPUT //No Power Up Timer
#FUSES NOPROTECT //Code not protected from reading
#use delay(clock=4000000)
#BYTE TRISA = 0x85 // Configuramos el TRISA
#BYTE TRISB = 0x86 // Configuramos el TRISB
#BYTE PORTA = 0x05 // Configuramos el PORTA
#BYTE PORTB = 0x06 // Configuramos el PORTB
void main
{
TRISA = 0xff;
TRISB = 0x00;
int x;
while (true)
{
x = 0;
if (x == 0)
{
output_high(pin_B7);
}
if (x == 1)
{
output_low(pin_B7);
}
while (x==0)
{
if (PORTA == 0X00 )
{
PORTB = (0xBF);
}
if (PORTA == 0X01)
{
PORTB = 0x86;
}
if (PORTA == 0X02)
{
PORTB = 0xDB;
}
if (PORTA == 0X03)
{
PORTB = 0xCF;
}
if (PORTA == 0X04)
{
PORTB = 0xE6;
}
}
while (x==1)
{
if (PORTA == 0X00)
{
PORTB = 0xBF;
}
if (PORTA == 0X01)
{
PORTB = 0x86;
}
if (PORTA == 0X02)
{
PORTB = 0xDB;
}
if (PORTA == 0X03)
{
PORTB = 0xCF;
}
if (PORTA == 0X04)
{
PORTB = 0xE6;
}
}
}
}
Estoy usando la "x" como indicador de bomba prendida o bomba apagado. El programa me corre sin errores ni warnings, tal vez mi error también esta al hacer la simulación, si gustan subo el archivo de proteus también.
Gracias por todo amigos y saludos desde Mx.
