Ze względu na to, iż w artykułach niekiedy stosuję swoiste "skróty myślowe" - pojawił się problem. Nie dla każdego od razu jasne jest "co autor miał na myśli". Wkrótce w tym miejscu zamieszczę gotowe kody w postaci prostych programów prezentujących dane zagadnienie. 


W przykładach użyłem swojego modułu SPA-1. Zrealizowany jest on z wykorzystaniem mikrokontrolera AtMega16 taktowanego zewnętrznym kwarcem 16MHz.

 

 Fusebity jakie należy zapisać:

Lfuse: 0x3F
Hfuse: 0xC7
Ponieważ piszę w środowisku Eclipse, toteż w programach nie została umieszczona definicja F_CPU!!!


Do pobrania udostępniony został schemat urządzenia, na którym testowane były projekty przykładowe. Mam nadzieję, że nie będziesz mieć problemów z jego analizą. Podobnie jak kody, tak i tworzenie schematów uzależnione jest od indywidualnych cech danego autora. Ja od kilku lat trzymam się takiej konwencji jak zaprezentowana - dla mnie osobiście jest to znacznie wygodniejsze i bardziej przejrzyste niż plątanina "makaronu" po wydrukowaniu. Co oczywiście nie znaczy, że każdemu ta koncepcja przypadnie do gustu. :)

Dla ułatwienia:

Podłączenie LCD:
RSPORT PORTB3
EPORT PORTB0
D4PORT PORTA4
D5PORT PORTA5
D6PORT PORTA6
D7PORT PORTA7
Pin RW zwarty do masy.

Wejścia:
KLAW_UP_port PORTC7 - klawisz
KLAW_DOWN_port PORTC6 - klawisz
KLAW_OK_port PORTC5 - klawisz
WE1_port PORTA3 - wejście na płycie
WE2_port PORTA2 - wejście na płycie
WE3_port PORTD3 - wejście na płycie
WE4_port PORTD2 - wejście na płycie
ZEW_port PORTB1 - wejście 230V (z transoptora)

Wyjścia:
WY1_port PORTD5 - wyjście na płycie
WY2_port PORTC2 - wyjście na płycie
WY3_port PORTD7 - wyjście na płycie
WY4_port PORTB4 - wyjście na płycie
LEDR_port PORTC3 - katoda diody czerwonej
LEDB_port PORTC4 - katoda diody niebieskiej
OUT_port PORTD4 - wyjście 230V (optotriak + triak)
RS485_port PORTB2 - wyjście sterowania kierunkiem układ MAX485
BUZZ_port PORTB5 - wyjście buzzera
mpx PORTA0 - wejście przetwornika AC (u mnie podłączony przetwornik ciśnienia MPX5010dp)

Termometr DS18B20 PORTA1
UWAGA!!!
Kody nie wspierają innych wersji termometru niż ten z literką "B". Nie mogę zagwarantować ich poprawnego działania dla pozostałych termometrów z tej rodziny.

Nóżka INT zegara PCF8583 podłączona jest do wejścia ICP timera1. Zastosowano zewnętrzny rezystor podciągający.

Mam nadzieję, że w ten sposób nowi Użytkownicy mojej strony nie będą mieli najmniejszych problemów z zaadaptowaniem prezentowanych kodów we własnych projektach.
UWAGA!!!
Sugeruję Ci, abyś wybierając interesujący Cię temat przejrzał wszystkie wcześniejsze przykłady.
Przyjąłem koncepcję, w której każdy nowy przykład jest rozbudowaniem przykładu poprzedniego.



KAŻDY Z PRZYKŁADÓW ZOSTAŁ PRZEZE MNIE SPRAWDZONY NA WSPOMNIANYM WCZEŚNIEJ URZĄDZENIU. REZENTOWANE KODY NIE SĄ ODERWANIEM OD CAŁOŚCI - STANOWIĄ GOTOWE PROSTE PROGRAMY. JEŻELI MIMO WSZYSTKO MASZ PROBLEM W URUCHOMIENIU KTÓREGOŚ Z PROGRAMÓW TO NAPISZ DO MNIE MAILA NA ADRES Ten adres pocztowy jest chroniony przed spamowaniem. Aby go zobaczyć, konieczne jest włączenie obsługi JavaScript. I ZAŁĄCZ W NIM KOMPLETNY KOD, Z JAKIM MASZ KŁOPOT. OŻESZ TAKŻE UŻYĆ OPCJI "UPLOAD PLIKÓW" NA MOJEJ STRONIE. Jeżeli w swoim kodzie przemapowałeś porty IO to poinformuj mnie o tym - zaoszczędzi mi to żmudnego sprawdzania wybranego przez Ciebie pinoutu.



Póki co dostępne są:


01_LCD_bez_buforowania
Podstawowa obsługa wyświetlacza alfanumerycznego zgodnego z HD44780.
Wyświetlanie tekstów z RAM i FLASH.
-------------------------------------------------------------------------------------------------------------
02_LCD_timery
Obsługa timerów programowych zaprezentowana na przykładzie migania tekstami na ekranie.


03_LCD_buforowany
Wyświetlacz LCD obsługiwany przez mechanizm zapisu buforowanego.
Przykład użycia funkcji konwertującej liczby bez znaku z formatowaniem liczby zer wiodących.
Wyświetlanie prostej animacji.


04_WeWy
Obsługa Wejść / Wyjść cyfrowych.
Wykorzystano klawisze UP, DOWN i OK.
UP, DOWN - zmiana wartości zmiennej.
OK - przełączanie stanu diody.


05_triggery
Wykorzystanie reakcji na zbocze.
W przykładzie co 20 inkrementacji zmiennej Val zostaje zmieniony komunikat na LCD.


06_eeprom
Przechowywanie parametrów urządzenia w EEPROM.
Na bazie poprzedniego przykładu: zapamiętujemy wartość zmiennej, której wartość zmieniamy z użyciem klawiszy.
Zapis do eeprom odbywa się 2s. po ostatnim użyciu któregoś z klawiszy edycji wartości zmiennej.


07_DS18B20_single
Poprzedni przykład rozbudowany o obsługę pojedynczego czujnika temperatury DS18B20.


08_menu
Przykład 06 wzbogacony o menu uzytkownika.
Wcisnij i przytrzymaj klawisz OK - wejdziesz do menu.
Down - następna pozycja (dekrementuj gdy pozycja ma tylko jedną wartość do edycji)
OK - wybierz pozycję (inkrementuj wartość w trybie edycji)
UP - wróc poziom wyżej
UWAGA!!! Ten przykład prezentuje technikę jaką omówiłem na stronie. Wielu programistów twierdzi, że są znacznie lepsze techniki
niż ta. Nie neguję tego w żaden sposób. Najzwyczajniej w świecie mi najbardzie podpasował ten sposób tworzenia menu.
Zachęcam Cię do poznania również innych technik, opisywanych m.in. w książce Tomasz Francuza lub dostępnych na forum elektroda.pl
czy atnel.pl. Sprawdź, przeanalizuj i sam zdecyduj co będzie dla Ciebie wygodniejsze.


09_PCF8583
Obsługujemy sobie zegar RTC PCF8583
Poprzez menu ustawiamy datę / czas.
Na wyświetlaczu naprzemiennie prezentujemy: czas, datę, dzień tygodnia.
Zegar sam dostraja się względem dryftu kwarcu.


10_PCF8583_testerKwarcu
Przykład 9 uzupełniony o wyświetlanie w dolnej linii dryftu czasowego kwarcu współpracującego z naszym RTC.
Ten przykład należy używać wyłącznie do przetestowania działania zegara!
Skąd pomysł na to? Chciałem połączyć metalowe obudowy kwarców zegarkowych z masą układu. Okazało się, że kilka
sztuk uszkodziłem podczas podlutowywania przewodu. Objaw? Zegar chodził za szybko / za wolno. Rekordzista spieszył się
o 15 minut na godzinę!!! Cóż... Mylić się jest rzeczą ludzką...


11_DS18B20_multi
Obsługa wielu termometrów DS18B20 - rozbudowany przykład 09.
UWAGA!!!
Zgodnie z przyjętą przeze mnie koncepcją termometry programuje się ręcznie poprzez menu (brak funkcji searchROM).
W momencie programowania do magistrali 1WIRE może być podłączony TYLKO JEDEN TERMOMETR!!!


12_PCF8583_ram
PCD8583 jako zewnętrzna pamięć z podtrzymaniem. Przydatna, gdy jakąś zmienną musimy zapisywać często (np. licznik
a obawiamy się uszkodzenia pamięci EEPROM).
W przykładzie co sekundę zapamiętujemy wartość zmiennej inkrementowanej w prawym górnym rogu ekranu.


13_RS485_zdarzeniowy
Komunikacja RS485 Master / Slave przy użyciu zdarzeniowego automatu sekwencyjnego.
W łatwy sposób połączymy ze sobą 2 urządzenia.
UWAGA!!! Kod przeznaczony jest do aplikacji wykorzystujących TYLKO 2 URZĄDZENIA!!!

 

SLAVE: Przykład zrealizowany w oparciu o 09_PCF8583 - umożliwiamy odczytanie daty / czasu przez zewnętrzny moduł.

MASTER: tutaj tylko wyświetlamy dane (prosty panel HMI)



14_DS18B20_wykres
Ten przykład powstał zupełnie przez przypadek. Na forum elektroda.pl pod adresem
http://www.elektroda.pl/rtvforum/viewtopic.php?t=2465481&highlight=
trafiłem na ciekawą koncepcję tworzenia wykresu na wyświetlaczu alfanumerycznym.
Postanowiłem ugryźć ten temat. Dzięki parodniowej wymianie korespondencji z Autorem pomysłu,
w rezultacie powstał kod, który można w łatwy sposób wykorzystać w swoich projektach.
Ten przykład powstał na bazie 07_DS18B20_single - wykres pokazuje nam wartości temperatury pomiędzy 16 a 32 stopnie.


15_LCD_buforowany_RW
Pierwszy z przykładów wyposażony w odczyt flagi zajętości z wyświetlacza.
Żeby zbędnie nie zaciemniać - program bazuje na kodzie przykładu 04.

 

UWAGA!!!
W tym przykładzie wyjątkowo zmianie uległy piny do jakich podłączony jest wyświetlacz!
Wykorzystano pino 0-7 portu A - program testowany był na zestawie ewaluacyjnym ZL3AVR
zamiast na moim module SPA1.



W opracowaniu:
RS485_ThomBUS
Komunikacja RS485 Master / multi Slaves przy użyciu własnego protokołu komunikacyjnego.
Podstawowe właściwości:
- ramka protokołu w dużym uproszczeniu wzorowana na PPO znanych z protokołu ProfibusDP,
- transmisja ASCII, więc łatwo debugujemy na terminalu oraz możemy być z terminala masterem,
- dane wysyłamy w ramkach po 8 słów 16to bitowych - w jednej ramce mamy 16 zmiennych 8-io bitowych,
- wsparcie dla adresu rozgłoszeniowego. Jednym rozgłoszeniem możemy np. zrestartować wszystkie moduły lub wpisać wszystkim taki sam czas systemowy.

Do pobrania:

Użyj opcji uploadu plików, aby przekazać mi kod do sprawdzenia. Postaram się zajrzeć do niego tak szybko jak będzie to możliwe. Paczkę z poprawionym kodem umieszczę w tym samym miejscu.

 

 

Jeżeli wystąpi sytuacja, w której zostanie wyświetlona zawartość folderu z innego działu - należy wyczyścić cache przeglądarki! Następnie przeładować stronę.


Komentarze  

 
# DavidDavid 2016-10-26 09:45
I genuinely enjoy studying on this website, it holds good content. Never fight an inanimate object. by P. J. O'Rourke.
Odpowiedz | Odpowiedz z cytatem | Cytować
 

Licznik odwiedzin

Mapa odwiedzin



 

Copyright © ST WebSite 2017

Stronę hostuje FutureHost. []

Strona korzysta z plików cookie. Dane przechowywane na Twoim komputerze służą wyłą…cznie do poprawienia funkcjonalnoś›ci witryny. Jeżeli tego nie akceptujesz - powinieneś› ją… opuś›cić‡.

Akceptujesz ciasteczka z tej witryny?