Knipperende LED is de eerste stap die u zou willen nemen om aan de slag te gaan met elektronica. In deze tutorial gaan we een LED verbinden met ATmega32, een AVR-serie microcontroller. We gaan de LED met een halve seconde laten knipperen.
Componenten vereist
Hardware:
ATmega32A Microcontroller
Stroomvoorziening (5v)
AVR-ISP Programmer
100uF Condensator
LED
220Ω weerstand
Software
Atmel studio 6.1
Progisp of flitsmagie
Circuit en werkuitleg
Zoals getoond in het bovenstaande schakelschema voor het koppelen van LED met AVR-microcontroller, is het niet nodig om hier een extern kristal aan te sluiten. Omdat de ATMEGA standaard werkt op een interne 1MHz weerstand-condensatoroscillator. Alleen wanneer de nauwkeurigheid van de klok nodig is, zoals de toepassing van tellen met hoge precisie, wordt extern kristal bevestigd. Wanneer de controller voor het eerst wordt gekocht, is deze standaard gefuseerd om op intern kristal te werken.
De weerstand is hier aangesloten om de stroomopname van de LED te beperken. Onthoud dat de controller niet meer dan 30mA aan de terminals kan leveren.
Uitleg over programmeren
Het programma voor ATmega32-microcontroller om een LED te laten knipperen, wordt hieronder weergegeven. Het commentaar in de code legt het doel van de afzonderlijke regel van de code uit.
#include // header om controle van de gegevensstroom over pinnen mogelijk te maken
#define F_CPU 1000000 // de kristalfrequentie van de controller vertellen
# omvatten
int main (ongeldig)
{
DDRD = 0xFF; // (of 0b1111 1111) In AVRSTUDIO gebruiken we "ZERO" om de besturing te vertellen een bepaald bit van een poort als invoer te gebruiken, en om het te vertellen een bepaald bit als uitvoer te gebruiken gebruiken we "EEN". Aangezien we acht "ONE's" hebben geplaatst, zijn alle pinnen van PORTD ingeschakeld als uitvoer. Als we een nul plaatsen als "0b1111 0111", zijn nu alle pinnen 0,1,2,4,5,6,7 ingeschakeld als invoer en PIN 3 is ingeschakeld als invoer.
while (1) // loop gaat voor altijd door en de LED zal voor altijd knipperen
{
PORTD = 0xFF; // alle pinnen van PORTD zouden 5v-uitvoer leveren of hoog moeten trekken (LED AAN)
_delay_ms (220); // vertraging voor 200ms
_delay_ms (220);); // vertraging voor 200ms
PORTD = 0x00; // alle pinnen van PORTD zouden grond leveren bij uitvoer of naar beneden trekken
_delay_ms (220);); // vertraging voor 200ms
_delay_ms (220);); // vertraging voor 200ms
}
}