W tym artykule nie będzie nic nowego ani odkrywczego jeżeli chodzi o software - prezentowane programy są banalnie proste. Chodzi raczej o zastąpienie - przynajmniej na chwilę - mojego ulubionego procesorka ATtiny2313 nową ATmegą 48P. Zamówiłem kilka egzemplarzy tego bardziej zaawansowanego mikrokontrolera głównie dla wypróbowania jego możliwości i ficzerów. Na początku więc zmontowałem prosty układ z trzema diodami LED, napisałem programik, który miał powodować ich miganie, następnie zaś wyposażyłem procesor w oscylator kwarcowy 4MHz z kondensatorami blokującymi i odpowiednio ustawiłem fusebity. 4MHz - częstotliwość dużo niższa, niż ta, którą się ATmegom zadaje, ale chodziło mi o zachowanie kompatybilności w kontekście uzależnień czasowych (częstość przerwań timerów itp.) z układami projektowanymi na ATtiny. Inna rzecz, że tylko takie oscylatory mam w swoich śmieciach...
A propos śmieci - wygrzebałem w nich również dwie sztuki drivera mocy ULN2803 (uwaga: linki do kart katalogowych opisywanych tu układów na końcu artykułu; oprócz ULN2803 - tutaj proszę się posłużyć wyszukiwarką), idealnie nadającego się do moich, zasilanych najczęściej z USB lub z baterii 3*1.5V, prototypowych i eksperymentalnych projektów. Postanowiłem więc, że wykorzystam ten driver do zapalania diod LED - wiadomo, że sam procesor da radę wysterować diody świecące, ale zwykle stosuje się do tego układy tranzystorowe (wyjścia mikrokontrolera mogą po prostu nie wydolić prądowo). Zastąpienie ich driverem mocy może w wielu przypadkach zdecydowanie uprościć układ.
Po kolei więc.
Jeśli chcemy do taktowania wykorzystać zewnętrzny oscylator ("kwarc"), powinniśmy odpowiednio ustawić fusebity. Najprościej (intuicyjnie bez mała) robi się to z poziomu BASCOMA - na obrazku moja propozycja, jednak polecam gorąco lekturę karty katalogowej ATmegi w celu dostosowania ustawień do potrzeb konkretnego projektu.
Z karty katalogowej dowiemy się również, jak podłączyć do układu programator - używam oczywiście USBASP (jak widać na obrazku powyżej).
Na schemacie nie uwzględniłem podłączenia programatora, ale ponieważ odpowiednie końcówki są szczegółowo opisane, nie powinno być z tym problemu. Jeśli zasilacie układ z USB (przez programator) - pamiętajcie o biegunach :)
Drugi program napisałem na próbę w C. Jest on typowo "szkolny", na opóźnieniach czasowych. Bardziej jednak chodziło mi o wypróbowanie dodatku do używanego przeze mnie w Linuksie środowiska Eclipse (The AVR Eclipse Plugin), umożliwiającego wygodne pisanie oprogramowania dla mikrokontrolerów AVR.
Listing programu:
I zrzut ekranu pokazujący piękno najlepszego linuksowego środowiska do programowania mikrokontrolerów AVR:
Co prawda jeszcze nie grzebałem w konfiguracji, więc chwilowo nie wiem, gdzie wpisać dodatkową opcję do wiersza polecenia uruchamiającego z poziomu Eclipse programator avrdude, ale zawsze można ładować wsad do procesora za pomocą wspomnianego przeze mnie gnome-avrdude.
I jeszcze jedna uwaga: w mojej konfiguracji systemu avrdude wymaga uprawnień roota, co można obejść nadając plikowi urządzenia, utworzonemu dla naszego programatora, prawa do zapisu dla wszystkich. Nie jest to aż taki problem, żeby go specjalnie punktować, jednak warto o tym pamiętać.
I jeszcze linki do kart katalogowych:
A propos śmieci - wygrzebałem w nich również dwie sztuki drivera mocy ULN2803 (uwaga: linki do kart katalogowych opisywanych tu układów na końcu artykułu; oprócz ULN2803 - tutaj proszę się posłużyć wyszukiwarką), idealnie nadającego się do moich, zasilanych najczęściej z USB lub z baterii 3*1.5V, prototypowych i eksperymentalnych projektów. Postanowiłem więc, że wykorzystam ten driver do zapalania diod LED - wiadomo, że sam procesor da radę wysterować diody świecące, ale zwykle stosuje się do tego układy tranzystorowe (wyjścia mikrokontrolera mogą po prostu nie wydolić prądowo). Zastąpienie ich driverem mocy może w wielu przypadkach zdecydowanie uprościć układ.
Po kolei więc.
1. Programowanie ATmegi 48P
Niestety, avrdude nawet w najnowszej wersji nie obsługuje tego mikrokontrolera - jedynie podstawową ATmega48. Owszem, BASCOM nie ma z tym problemów, ale jak przeczytacie w dalszej części tego tekstu, chciałem też trochę pobawić się w Linuksie. Obejściem problemu w avrdude jest wymuszenie współpracy z mikrokontrolerem bez sprawdzania sygnatury. Jeśli używacie np. gnome-avrdude, można go skonfigurować jak pokazano na obrazku:Jeśli chcemy do taktowania wykorzystać zewnętrzny oscylator ("kwarc"), powinniśmy odpowiednio ustawić fusebity. Najprościej (intuicyjnie bez mała) robi się to z poziomu BASCOMA - na obrazku moja propozycja, jednak polecam gorąco lekturę karty katalogowej ATmegi w celu dostosowania ustawień do potrzeb konkretnego projektu.
Z karty katalogowej dowiemy się również, jak podłączyć do układu programator - używam oczywiście USBASP (jak widać na obrazku powyżej).
2. Schemat układu
Jak wspominałem na początku - nic wielkiego (oprócz ATmegi ;)). Chodzi tylko o pokazanie, jak można użyć układu ULN2803 z mikrokontrolerem. Sposób podłączenia wykoncypowałem w oparciu o kartę katalogową i propozycje dostępne na forach. Pamiętać należy - w dużym skrócie i uproszczeniu - że wysterowanie jedynką logiczną wejścia drivera powoduje wystawienie na wyjściu zera; w przeciwnym wypadku diody pozostają odłączone.Na schemacie nie uwzględniłem podłączenia programatora, ale ponieważ odpowiednie końcówki są szczegółowo opisane, nie powinno być z tym problemu. Jeśli zasilacie układ z USB (przez programator) - pamiętajcie o biegunach :)
3. Program
W BASCOMie, w którym mam większe doświadczenie, program zastosowany do wypróbowania układu napisałem w sposób bardziej finezyjny - diody zapalane są i gaszone kolejno co sekundę, czas zaś odmierzany jest przez 16-bitowy Timer 1 (dzięki zastosowanemu kwarcowi można przyjąć, że przy preskalerze o wartości 64 przerwanie generowane jest co 1,048 sekundy).
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
' Test mikrokontrolera ATmega48P | |
' - zapalające się kolejno diody LED... | |
$regfile = "m48pdef.dat" | |
$Crystal=4000000 | |
$hwstack=40 | |
$swstack=16 | |
$framesize=32 | |
Config Timer1 = Timer , Prescale = 64 | |
Config Portc = &B0111111 | |
Portc = &B0000000 | |
Enable Interrupts | |
Enable Timer1 | |
On Timer1 Do_light | |
Dim A As Byte | |
Do | |
' Nic się tu nie dzieje... | |
Loop | |
End | |
Do_light: | |
If A = 0 Then | |
Portc = &B0000001 | |
Elseif A = 1 Then | |
Portc = &B0000010 | |
Else | |
Portc = &B0000100 | |
End If | |
Incr A | |
A = A Mod 3 | |
Return |
Drugi program napisałem na próbę w C. Jest on typowo "szkolny", na opóźnieniach czasowych. Bardziej jednak chodziło mi o wypróbowanie dodatku do używanego przeze mnie w Linuksie środowiska Eclipse (The AVR Eclipse Plugin), umożliwiającego wygodne pisanie oprogramowania dla mikrokontrolerów AVR.
Listing programu:
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
* main.c | |
* | |
* Created on: 2012-11-29 | |
* Author: Rafał Wileczek | |
*/ | |
#include <avr/io.h> | |
#include <util/delay.h> | |
/* | |
* Zapalanie trzech diod LED na przemian | |
* - test avr-gcc i dodatku do Eclipse. | |
*/ | |
int main(void) | |
{ | |
DDRC = 0x3F; | |
while(1) | |
{ | |
PORTC = 1; | |
_delay_ms(1000); | |
PORTC = 2; | |
_delay_ms(1000); | |
PORTC = 4; | |
_delay_ms(1000); | |
} | |
} |
I zrzut ekranu pokazujący piękno najlepszego linuksowego środowiska do programowania mikrokontrolerów AVR:
Co prawda jeszcze nie grzebałem w konfiguracji, więc chwilowo nie wiem, gdzie wpisać dodatkową opcję do wiersza polecenia uruchamiającego z poziomu Eclipse programator avrdude, ale zawsze można ładować wsad do procesora za pomocą wspomnianego przeze mnie gnome-avrdude.
I jeszcze jedna uwaga: w mojej konfiguracji systemu avrdude wymaga uprawnień roota, co można obejść nadając plikowi urządzenia, utworzonemu dla naszego programatora, prawa do zapisu dla wszystkich. Nie jest to aż taki problem, żeby go specjalnie punktować, jednak warto o tym pamiętać.
4. Podsumowanie
Działa. Mogę teraz co poważniejsze projekty realizować na bogatszym mikrokontrolerze. Ktoś mnie ostatnio zapytał, dlaczego właśnie ATmega48P? Po pierwsze, pisząc programy w BASCOMie, który mam w wersji demo, nie ma możliwości uzyskania kodu wynikowego większego niż 4kB. A literka P (PicoPower) - bo te ATmegi były akurat w promocji ;)I jeszcze linki do kart katalogowych:
Komentarze
Prześlij komentarz