Apagar el led después de 30 segundos

0

Hola, estoy conduciendo algunos leds con bs170 mosfet. Los LED están encendidos, sin embargo, me gustaría poder apagarlo después de 30 segundos. Intenté usar el siguiente código pero no funcionó. Creo que se apaga y enciende más rápido de lo que me doy cuenta. Parece que estoy obteniendo una onda cuadrada en el alcance del pin al que está conectado el fet.

/*
 * AVRGCC1.c
 * 
 * Created: 21/04/2011 21:38:56
 *  Author: steven
 */ 

#define F_CPU 20000000UL  // 1 MHz 

#include <util/delay.h>
#include <avr/io.h>

int main(void)
{ 
        //TODO:: Please write your application code 
        DDRA=0b00000001; //Make PDA0 as output  
        PORTA =0b00000001; // turn on fet  
        _delay_ms(30000);
        DDRA=0b00000000;
} 
    
pregunta Ageis

2 respuestas

6

Esta parte ..

PORTA =0b00000001; // turn on fet 
_delay_ms(30000);
DDRA=0b00000000;

probablemente debería tener este aspecto ...

PORTA =0b00000001; // turn on fet 
_delay_ms(30000);
PORTA=0b00000000;

es decir, no quieres redefinir la dirección del pin, quieres cambiar su estado.

    
respondido por el JustJeff
3

Además, en lugar de sobrescribir todo el Puerto, generalmente es mejor modificar solo el bit afectado (pin). Esto se puede hacer por

Establezca el Pin x en "alto":

PORTA |= (1 << x);

Establezca el Pin x en "bajo":

PORTA &= ~(1 << x);

Especialmente si las partes múltiples están conectadas al puerto, este método es mucho más seguro. Lo mismo se puede hacer con el registro DDRx, si solo desea modificar la dirección de los pines individuales.

    
respondido por el Martin Matysiak

Lea otras preguntas en las etiquetas