que necesita el portA del 16f876a para operar correctamente

Hola a todos, en esta ocasión encuentro problemas con el uso del porta del pic 16f876a. Por más que intento configurarlo, este no responde a pulsos de entrada pues siempre está a GND sin importar la resistensias pull up. Intento conectar un switch al RA3 y que cuando este se ponga a cero, encienda el pin RC3 (esta es una pequeña depuración para luego utilizar el ADC para un lm35). El problema es que siempre está activo (el RC3) por que siempre hay un cero a la entrada de RA3 así este lo coloque directo a VDD . MI código en Mplab Hi-tech es este:

#include <htc.h>
#include <stdio.h>
//#include "lcd.h"
#define _XTAL_FREQ 4000000

__CONFIG(FOSC_XT & WDTE_OFF & LVP_OFF );

void main(void)
{
TRISA = 0b11111111; //todo el porta como entradas
TRISC = 0; //todo el portC como salidas
ADCON1 = 0111; // todas entradas digitales
PORTC = 0;
PORTA = 0;

while (1)
{
if (RA3 == 0)
{
RC2 = 1;
__delay_ms (1);
}
else RC2 = 0;
}
}

el efecto que indico arriba, sucede tanto para proteus como para el Mplab sim. Si alguien sabe que estoy pasando por alto o que estoy haciendo mal les agradezco la colaboración de antemano. Si no puedo realizar esta pequeña tarea de este código ,menos va a funcionar el ADC que sus entradas están en porta. Gracias. http://i10.forosdeelectronica.net/icon_eek.gif
 
Hola a todos, en esta ocasión encuentro problemas con el uso del porta del pic 16f876a. Por más que intento configurarlo, este no responde a pulsos de entrada pues siempre está a GND sin importar la resistensias pull up. Intento conectar un switch al RA3 y que cuando este se ponga a cero, encienda el pin RC3 (esta es una pequeña depuración para luego utilizar el ADC para un lm35). El problema es que siempre está activo (el RC3) por que siempre hay un cero a la entrada de RA3 así este lo coloque directo a VDD . MI código en Mplab Hi-tech es este:

Código:
#include <htc.h>
#include <stdio.h>
//#include "lcd.h"
#define _XTAL_FREQ 4000000

__CONFIG(FOSC_XT & WDTE_OFF & LVP_OFF  );

void main(void)
{
TRISA = 0b11111111; //todo el porta como entradas
TRISC = 0;               //todo el portC como salidas
[COLOR=Red]//ADCON1 = 0111; // <-- (Aqui esta el error)[/COLOR]
ADCON1 = [COLOR=Blue]0x06 [/COLOR]   // <-- Este es el valor para el registro ADCON1 como digital
PORTC = 0;
PORTA = 0;

while (1)
{
if (RA3 == 0)
    {
    RC2 = 1;
    __delay_ms (1);
    }
    else RC2 = 0;
}
}
Hasta luego y suerte.
 
En realidad es lo mismo http://ww1.microchip.com/downloads/en/devicedoc/30292c.pdf. en la pagina 112, si el registro es 011x es todo el puerto digital. Pero el error lo tienes en que si quieres poner el valor en binario debes de poner 0bxxxxxxxx. Un ejemplo de lo que puedes poner:
En binario: ADCON1=0b00000111;
En decimal: ADCON1=6;
En hexadecimal: ADCON1=0x06;

Lo que estas introduciendo según tu código en el registro es un 111 en decimal que es un 0b1101111. Estas poniendo el pin AN3 como entrada Vref+ para el CAD.
Un saludo
 
Hola Darkbytes por responder. Realicé el cambio y efectivamente funcionó aunque surge la duda de por qué en el datasheet aparece 011x para configurar todos los pines de porta como análogos donde "x" aparentemente no importaría si fuese un 1 o un 0. Con todo esto, entendí que debo revisar mejor los registros y su configuración y encontré que mi proyecto original, que es un termómetro con Lm35, no funcionaba en un principio porque lo configuraba en el ADCON1 pero no le indicaba en el ADCON0 cual iva a ser mi pin de entrada análoga http://i10.forosdeelectronica.net/icon_rolleyes.gif. En este momento ya funciona correctamente con aparente presición (almenos en proteus) . Fué de mucha utilidad y muy oportuna su alluda . Mil Gracias http://i10.forosdeelectronica.net/apreton.gif

Hola Darkbytes por responder. Realicé el cambio y efectivamente funcionó aunque surge la duda de por qué en el datasheet aparece 011x para configurar todos los pines de porta como análogos donde "x" aparentemente no importaría si fuese un 1 o un 0. Con todo esto, entendí que debo revisar mejor los registros y su configuración y encontré que mi proyecto original, que es un termómetro con Lm35, no funcionaba en un principio porque lo configuraba en el ADCON1 pero no le indicaba en el ADCON0 cual iva a ser mi pin de entrada análoga http://i10.forosdeelectronica.net/icon_rolleyes.gif. En este momento ya funciona correctamente con aparente presición (almenos en proteus) . Fué de mucha utilidad y muy oportuna su alluda . Mil Gracias http://i10.forosdeelectronica.net/apreton.gif



Lo que estas introduciendo según tu código en el registro es un 111 en decimal que es un 0b1101111. Estas poniendo el pin AN3 como entrada Vref+ para el CAD.
Un saludo

Hola Basalto, ese es otro error que también cometí, es cierto, si no antepongo el "0b", el compilador lo reconoce como un número decimal, totalmente lejano a lo que quería conseguir.
Es molesto darse cuenta que algo no funciona por simple descuido... pero también es cierto que si todo fuese perfecto, nuestras mentes se limitarían.

Gracias compañero del foro. http://i10.forosdeelectronica.net/apreton.gif
 
Última edición:
Atrás
Arriba