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

Temas similares

24/02/2012 #1


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
25/02/2012 #2
Moderador

Avatar de D@rkbytes

boby1356 dijo: Ver Mensaje
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
//ADCON1 = 0111; // <-- (Aqui esta el error)
ADCON1 = 0x06    // <-- 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.
25/02/2012 #3

Avatar de Basalto

En realidad es lo mismo http://ww1.microchip.com/downloads/e...doc/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
25/02/2012 #4


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

---------- Actualizado después de 9 minutos ----------

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
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.