Blinkende LED er det første skridt, du gerne vil tage for at komme i gang med elektronik. I denne vejledning skal vi forbinde en LED med ATmega32, som er en AVR-serie mikrokontroller. Vi blinker lysdioden med en halv sekund.
Komponenter, der kræves
Hardware:
ATmega32A mikrokontroller
Strømforsyning (5v)
AVR-ISP programmør
100uF kondensator
LED
220Ω modstand
Software
Atmel studio 6.1
Progisp eller flash magi
Kredsløb og arbejdsforklaring
Som vist i ovenstående kredsløbsdiagram til interface mellem LED og AVR-mikrocontroller er der ikke behov for at forbinde en ekstern krystal her. Fordi ATMEGA fungerer på intern 1MHz Resistor-Capacitor oscillator som standard. Kun når urets nøjagtighed er nødvendig, vedhæftes ekstern krystal som anvendelse af høj præcisionstælling. Når controlleren først købes, smeltes den som standard på intern krystal.
Modstanden er tilsluttet her for at begrænse den aktuelle tegning fra LED. Husk, at controlleren ikke kan levere mere end 30 mA ved terminalerne.
Programmering Forklaring
Programmet for ATmega32 mikrokontroller til at blinke en LED vises nedenfor. Kommentarerne i koden forklarer formålet med den enkelte linjekode.
#include // header for at aktivere datastrømskontrol over pins
#define F_CPU 1000000 // fortæller controllerens krystalfrekvens
#omfatte
int main (ugyldigt)
{
DDRD = 0xFF; // (eller 0b1111 1111) I AVRSTUDIO til at fortælle styringen at bruge en bestemt bit af en port som input bruger vi "ZERO", til at fortælle den at bruge en bestemt bit som output bruger vi "ONE". Da vi sætter otte "ONE", er alle PORTD-ben aktiveret som output. Hvis vi sætter et nul som “0b1111 0111”, er alle benene 0,1,2,4,5,6,7 aktiveret som input og PIN 3 er aktiveret som input.
mens (1) // loop fortsætter for evigt, og LED'en blinker for evigt
{
PORTD = 0xFF; // alle stifter af PORTD siges at give 5v output eller bliver bedt om at trække højt (LED ON)
_forsink_ms (220); // forsinkelse i 200 ms
_forsink_ms (220);); // forsinkelse i 200 ms
PORTD = 0x00; // alle PORTD-stifter siges at give jord ved output eller træk ned
_forsink_ms (220);); // forsinkelse i 200 ms
_forsink_ms (220);); // forsinkelse i 200 ms
}
}