Blinkende LED er det første trinnet du vil ta for å komme i gang med elektronikk. I denne opplæringen skal vi koble en LED til ATmega32, som er en AVR-serie mikrokontroller. Vi skal blinke lysdioden med en halv sekund.
Komponenter kreves
Maskinvare:
ATmega32A mikrokontroller
Strømforsyning (5v)
AVR-ISP Programmerer
100uF kondensator
LED
220Ω motstand
Programvare
Atmel studio 6.1
Progisp eller flash magi
Krets og arbeidsforklaring
Som vist i kretsskjemaet ovenfor for grensesnitt LED med AVR-mikrokontroller, er det ikke nødvendig å koble til en ekstern krystall her. Fordi ATMEGA fungerer på intern 1MHz Resistor-Capacitor oscillator som standard. Bare når klokkens nøyaktighet er nødvendig, ved anvendelse av høy presisjonstelling, festes ekstern krystall. Når kontrolleren først blir kjøpt, smelter den som standard på intern krystall.
Motstanden er koblet til her for å begrense gjeldende tegning fra LED. Husk at kontrolleren ikke kan levere mer enn 30mA på terminalene.
Programmering Forklaring
Programmet for ATmega32 mikrokontroller for å blinke en LED er vist nedenfor. Kommentarene i koden forklarer formålet med den enkelte linjen i koden.
#include // header for å aktivere datastrømskontroll over pins
#define F_CPU 1000000 // forteller kontrollerens krystallfrekvens
#inkludere
int main (ugyldig)
{
DDRD = 0xFF; // (eller 0b1111 1111) I AVRSTUDIO for å fortelle den kontrollerende å bruke en bestemt bit av en port som inngang, bruker vi “ZERO”, for å fortelle den å bruke en bestemt bit som output bruker vi “ONE”. Siden vi setter åtte "ONE" er alle PORTD-pinnene aktivert som utdata. Hvis vi setter null som “0b1111 0111”, er nå alle pinnene 0,1,2,4,5,6,7 aktivert som innganger, og PIN 3 er aktivert som inngang.
mens (1) // sløyfe fortsetter for alltid og LED vil blinke for alltid
{
PORTD = 0xFF; // alle PORTD-pinner sies å gi 5v-utgang eller blir fortalt å trekke høyt (LED PÅ)
_forsink_ms (220); // forsinkelse på 200 ms
_forsink_ms (220);); // forsinkelse på 200 ms
PORTD = 0x00; // alle PORTD-pinner sies å gi bakken ved utgang eller trekk ned
_forsink_ms (220);); // forsinkelse på 200 ms
_forsink_ms (220);); // forsinkelse på 200 ms
}
}