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

Temas similares

04/07/2012 #1


configurar entradas y salidas de atmega16
Hola que tal mucho gusto, estoy en una encrucijada de mi U y necesito hacer un ensayo con un ATMEGA16 entonces necesito configurar una salida como invesora de una entrada es decir tengo que utilizarlo como una leve compuerta logica en mi ensayo... tengo un código asi:
IF(PINA.1) //si el pin 1 del puerto A está en 1...
{
//PORTB.3 = 0;
}

IF(!PINA.1) //si el pin 1 del puerto A está en 0...
{
//PORTB.1 = 1;
}
utilizé un ejemplo que tenían aquí mismo pero no se si estoy en lo correcto con este código.
05/07/2012 #2


no encuentro nada que me explique esto
05/07/2012 #3

Avatar de cosmefulanito04

Yo uso el Avr studio 5/6 y para manejar los puertos hago esto:

Defino 3 funciones:

1-
Código:
void configura_puertos(u8 puertoa,u8 puertob,u8 puertoc,u8 puertod) // Configuro los puertos como Entrada/Salida
{
	DDRA=puertoa;
        DDRB=puertob;
	DDRC=puertoc;
	DDRD=puertod;
}
2-
Código:
void set_bits (volatile u8 *port, u8 mask) // Mando a 1 un puerto determinado
{
	*port |= mask;
}
3-
Código:
void clear_bits (volatile u8 *port, u8 mask) // Mando a 0 un puerto determinado
{
	*port &= ~mask;
}
Ej. si quisiera que el puerto 0 y 2 del C tengan una salida 0 y 1 respectivamente (el resto de los puertos que funcionen como entradas).

Código:
...
configura_puertos(0,0,(1<<PC2)|(1<<PC0),0); // Puerto C 0 y 2 como salidas
clear_bits (&PORTC,(1<<PC0));
set_bits (&PORTC,(1<<PC2));
...
Donde:

(1<<PC0) = 1<<0 = Desplaza 0 veces un 1 = 00000001 b (binario)
(1<<PC2) = 1<<2 = Desplaza 2 veces un 1 = 00000100 b (binario)

Luego para hacer esa negación simplemente haría esto:

Código:
....

int main(){
   configura_puertos(0,(1<<PB3),0,0);// Configuro los puertos que voy a usar
   
   while(1)
   {
    if(PINA&(1<<PA1))
         clear_bits (&PORTB,(1<<PB3)); //Borro el puerto
    else
         set_bits (&PORTB,(1<<PB3)); // Seteo 1 en el puerto
   }

}
Eso sería todo.
06/07/2012 #4
Moderador

Avatar de Chico3001

Intentaste descomentando los codigos??


Código PHP:
IF(PINA.1//si el pin 1 del puerto A está en 1...
{
PORTB.3 0;
}

IF(!
PINA.1//si el pin 1 del puerto A está en 0...
{
PORTB.1 1;

08/07/2012 #5


correcto, entonces si por ejemplo quiero que A0 sea entrada y A1 una salida negada de A0? solo quiero usar este puerto.. puede hacerse asi? es decir que se cumpliera una operacion lógica asi A0=A1` (A0=A1 negada) que la salida de A0 sea lo opuesto...

---------- Actualizado después de 23 minutos ----------

muchas gracias por el tiempo que prestan para responder estas interrogantes quizas un poco ignorantes por el simple hecho de no saber nada de atmega16
09/07/2012 #6
Moderador

Avatar de Chico3001

Claro que se puede... solo hay que configurar un pin como entrada y otro como salida.. de la forma que te dice cosme...
09/07/2012 #7


mil gracias... ahora a trabajar en la compilacion del programa haber como sale..
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.