El ejemplo del LED parpadeante no funciona

1

Estoy intentando ejecutar un ejemplo de LED de parpadeo estándar en Atmega8A, pero mi LED no parpadea. Aquí está mi circuito:

Y aquí está mi código:

#ifndef F_CPU
    #define 16000000UL
#endif // F_CPU

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

#define set_bit(target, num)    (   target |=   _BV(num))
#define clear_bit(target, num)  (   target &=   ~ _BV(num))
#define toggle_bit(target, num) (   target ^=   _BV(num))

#define DELAY_IN_MS 1000 /* 1 sec */


int main()
{
    set_bit(DDRD, PD7);
    set_bit(PORTD, PD7);
    while(1)
    {
        toggle_bit(PORTD, PD7);
        _delay_ms(DELAY_IN_MS);
    }

    return 0;
}

¿Qué pasa?

    
pregunta Edward

4 respuestas

1

Me parece que tienes el cátodo del LED conectado a Vdd. Ese es el camino equivocado, así que debes girar el LED. O alternativamente, conecte el cátodo a GND en lugar de VDD. Además, es una mala práctica no incluir una resistencia en la ruta de corriente del LED; 220 ohmios o así debería estar bien.

ACTUALIZACIÓN:

Parece que tienes más problemas que solo eso. Siguiendo el pin-out publicado por 'TMa', su Vcc, GND (p7, p8) parecen invertidos. También el GND en pin22 está desconectado. Por lo general, todas las GND en un IC deben estar conectadas porque están conectadas internamente a través del sustrato.

    
respondido por el akellyirl
1

He solucionado el problema. Gracias chicos, por su atención y ayuda:

El problema estaba en la compilación. Aquí, cómo estaba compilando (el ejemplo de Blink no funciona, la verificación falla ):

avr-gcc -Wall blink.c -mmcu=atmega8 -DF_CPU=16000000UL -o blink.o
avr-objcopy -R .eeprom -O ihex blink.o blink.hex

Así es como estoy compilando ahora:

avr-gcc -Wall blink.c -mmcu=atmega8 -DF_CPU=16000000UL -o blink.elf
avr-objcopy -j .data -j .text -O ihex blink.elf blink.hex

BTW:

Code is working fine even if there is nothing connected to the second 'GND', 'AREF' and 'AVCC'.
    
respondido por el Edward
0

En primer lugar, ¡bienvenido al intercambio de pila de EE!

Ahora, si su esquema es correcto, le falta un reistor de pull-up en el pin RESET . Esto es lo que generalmente se agrega:

simular este circuito : esquema creado usando CircuitLab

El condensador C1 está ahí para deshacerse un poco del efecto de rebote cuando se presiona / suelta el botón.

Agregue una resistencia limitadora de corriente para el LED (220 Ohmios). El LED es un DIODO de emisión de luz, por lo que sin una resistencia para limitar la corriente, el LED actúa como un cortocircuito a GND.

Además, conecte ambas conexiones a tierra (pin 8 y 22) y conecte Vcc a Avcc (pin 7 y 20). Además, agregue un condensador de 0.1 uF desde AREF a GND si no se usa para referencia de ADC. Tenga cuidado con los terminales positivos y negativos en el capacitor, los positivos deben ir a AREF y los negativos a GND .

Sobre el código, deshacerse de return 0; no es incorrecto tenerlo, pero el sistema incorporado no suele regresar de main () . Y sin la optimización del compilador, si regresara, podría causar un comportamiento no identificado.

    
respondido por el Golaž
0

No creo que el LED esté correctamente conectado a PD7.

    
respondido por el TMa

Lea otras preguntas en las etiquetas