Przejdź do głównej zawartości

Programowanie AVR cz. 6: Czy ATmega z ATtiny mogą się jakoś dogadać?

Mogą. I to na wiele sposobów. Doświadczeni elektronicy od razu wskażą kilka - od prostego połączenia port-w-port począwszy.
Jednym z elementów wyposażenia mikrokontrolerów AVR, a dokładniej moich dwóch modeli ATtiny2313 i ATmega48P, jest zrealizowany sprzętowo port UART, zgodny logicznie z RS232 (jeśli chodzi o całkowitą zgodność, konieczne jest użycie układu dopasowującego napięcia - można użyć tranzystorów lub MAX232). Obsługa tego portu w BASCOMie jest banalnie prosta. Posłużmy się przykładem. Niech ATmega będzie nadajnikiem, który wysyła przez łącze szeregowe, w odstępach co ok. pół sekundy, kolejne duże litery alfabetu łacińskiego (a przy okazji każdy wysłany znak sygnalizuje zapalająca się na chwilę dioda - schematu i konstrukcji układu z poprzedniego posta nie zmieniałem); wysyłanie liter uruchamiane jest przyciskiem. ATtiny zaś, wyposażony w wyświetlacz LCD, będzie odbiornikiem, który podczas oczekiwania na znak wyświetla napis "Ready...", po odbiorze znaku wyświetla jego kod ASCII i sam znak, a na koniec transmisji, po odebraniu kodu "znaku" Escape, pokazuje przez chwilę napis "End!".
Do wysyłania znaków (pojedynczych, seryjnie) przez port szeregowy służy funkcja Print lub Printbin, do odbierania - Inkey lub Waitkey (ta druga wstrzymuje program do nadejścia nowego znaku - nie polecam). Portów sprzętowych w układach, które tutaj wykorzystałem, nie trzeba konfigurować.
Programy odbiornika i nadajnika możemy sobie przejrzeć na poniższym listingu:

' Test UART - nadajnik (ATmega48P + ULN2803 + 3*LED)
$regfile = "m48pdef.dat"
$crystal = 4000000
$baud = 9600
$hwstack = 40
$swstack = 16
$framesize = 32
$eeprom
Alfabet:
Data 65 , 66 , 67 , 68 , 69 , 70 , 71 , 72 , 73 , 74 , 75 , 76
Data 77 , 78 , 79 , 80 , 81 , 82 , 83 , 84 , 85 , 86 , 87 , 88
Data 89 , 90 , 27
$data
Config Portc = &B0111111
Portc = &B0000000
Config Portd.2 = Input
Portd.2 = 1
Dim Adres As Byte , Tmp As Byte
Dim Dioda As Byte
Dim Znak As Byte
Dim I As Byte
Adres = Loadlabel(alfabet)
Tmp = Adres
Do
Debounce Pind.2 , 0 , Wyslij , Sub
Loop
End
Wyslij:
For I = 1 To 27
Readeeprom Znak , Tmp
Printbin Znak
If Dioda = 0 Then
Portc = 4
Elseif Dioda = 2 Then
Portc = 1
Else
Portc = 2
End If
Incr Dioda
Dioda = Dioda Mod 3
Waitms 500
Incr Tmp
Next I
Tmp = Adres
Dioda = 0
Portc = 0
Return
view raw nadajnik.bas hosted with ❤ by GitHub
' Test UART - odbiornik (ATtiny2313 + wyświetlacz LCD)
$regfile = "attiny2313.dat"
$crystal = 4000000
$baud = 9600
$hwstack = 40
$swstack = 16
$framesize = 32
Config Lcd = 16 * 1a
Dim Znak As Byte
Cls
Cursor Off
Lcd "Ready..."
Do
Znak = Inkey()
If Znak > 0 Then
If Znak <> 27 Then
Cls
Lcd "CHR: " + Znak + " " + Chr(znak)
Else
Cls
Lcd "End!"
Waitms 1000
Cls
Lcd "Ready..."
End If
End If
Loop
End
view raw odbiornik.bas hosted with ❤ by GitHub
Pamiętajmy o poprawnym połączeniu naszych dwóch układów mikroprocesorowych, szczególnie, gdy każdy korzysta ze swojego źródła zasilania. Musimy połączyć masy obu układów oraz - na krzyż - linie TxD i RxD (w poprzednim wpisie linkowałem karty katalogowe - tam znajdziemy opis wyprowadzeń obu mikrokontrolerów). Kolejna ważna sprawa to parametry transmisji - w zasadzie konfigurowalna jest tylko prędkość; w obu układach powinna być koniecznie ustawiona taka sama wartość. Zmiany wartości możemy dokonać na poziomie środowiska (w odpowiednim okienku - przy okazji dowiemy się, jaka będzie najodpowiedniejsza dla naszego kwarcu/częstotliwości taktowania) lub wpisać w kodzie programu.

Istnieje również możliwość zdefiniowania programowego portu szeregowego - BASCOM dostarcza w tym przypadku bardzo wygodnych narzędzi. Jak zwykle zresztą :)

Komentarze

Popularne posty z tego bloga

Niesamowicie prosty czujnik zmierzchowy.

Tym razem zero programowania, będzie natomiast nostalgiczno-wspomnieniowy układzik, lekko zmodyfikowany. Otóż kilka dni temu rozmawialiśmy w gronie znajomych o różnego rodzaju czujnikach zmierzchowych i czujnikach ruchu. Ponieważ należę do tych wariatów, co to hołdują jeszcze owej przestarzałej i kompletnie odrealnionej dziś zasadzie: "po co kupować, gdy można zrobić", stwierdziłem, że poskładam takie coś (czujnik zmierzchowy; sensor ruchu faktycznie lepiej nabyć, choćby ze względu na rozmiary ;)) i być może podłączę do jakiegoś mikrokontrolera. Przypomniało mi się też przy okazji, że znalazłem ostatnio w elektronicznych śmieciach stary fotorezystor (dla niewtajemniczonych: element zmieniający rezystancję, czyli opór elektryczny, pod wpływem działania strumienia światła) RPP130, jeden z kilku pozostałych po montowanych wieki temu układach tranzystorowych do zdalnego sterowania pracą urządzeń za pomocą latarki... No OK, nie było to specjalnie rozbudowane zdalne sterowanie ;) ...

Aktualizacja oprogramowania układowego w ESP-01 do najnowszej wersji NodeMCU

Oprogramowanie i projekt NodeMCU cieszą się niesłabnącym zainteresowaniem świata konstruktorów urządzeń IoT, zatem co jakiś czas warto odświeżyć sobie firmware w naszych płytkach ESP. Osobiście jestem przeciwnikiem zmienienia czegoś, co dobrze działa, tylko dla zasady czy z chęci cieszenia się świadomością posiadania najnowszej wersji, ale tym razem chodzi jednak o coś innego – zwiększenie funkcjonalności i zapewnienie poprawnego działania oraz kompatybilności z najnowszymi projektami i bibliotekami. W tytule tego artykułu jest mowa o najprostszych płytkach z układem ESP8266 – ESP-01 . To właśnie w oparciu o ten model opracowałem płytkę prototypową, o której pisałem w poprzednim rozdziale. Dotychczas wszystkie moje płytki ESP miały na pokładzie oprogramowanie NodeMCU w wersji 0.9.5 . Zorientowani choć trochę w temacie od razu zauważą (Google? Bing?), że wersja ta ma już co najmniej dwa lata... Najwyższy czas zatem na aktualizację.

Płytka prototypowa na bazie ESP8266 (ESP-01)

To nie jest kolejny artykuł traktujący od początku do... nieco dalej (bo na pewno nie do końca) o płytkach ESP8266 . Żeby się dowiedzieć, co to takiego, odwiedźcie proszę np. tę stronę (oraz wiele innych – poproście o pomoc Waszą ulubioną wyszukiwarkę): http://www.esp8266.com/wiki/doku.php?id=esp8266-module-family . No ale żeby nie było, ESP8266 to układ zawierający na pokładzie wydajny mikrokontroler z rdzeniem RISC-owym, taktowany zegarem 40MHz (wersja, o której jest ten wpis) lub 80MHz, 512KB pamięci flash i podsystem komunikacji przez sieć WiFi . Jest powszechnie wykorzystywany jako swego rodzaju karta sieciowa do połączeń bezprzewodowych naszych urządzeń IoT , które budujemy w zaciszu domowych laboratoriów (i nie tylko). Układ montowany jest na płytkach występujących w kilku wersjach, różniących się przede wszystkim liczbą wyprowadzeń uniwersalnych, czyli GPIO – im większa liczba, tym większe możliwości wykorzystania układu (więcej urządzeń peryferyjnych itp.). Są też pewne ...