logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Moduł USART dla wyświetlacza 16x1 zrealizowany na PIC16F84A

kolgreen 15 Lip 2012 09:41 6816 13
  • 1. Cele projektu

    Opracować moduł umożliwiający komunikację z wyświetlaczem 16x1 przez USART. By wysłać dane na wyświetlacz należy wydać instrukcję informującą o rozpoczęciu transmisji "[". Instrukcja "]" informuje mikrokontroler o zakończeniu danych przeznaczonych dla wyświetlacza. Dodatkowa instrukcja "#" pozwala na wyczyszczenie zawartości ekranu. Ponieważ wyświetlacz 16x1 podzielony jest na dwie części (po 8 znaków) mikrokontroler dba o poprawne przejście napisu na drugą połowę ekranu. W chwili zapełnienia znakami całego ekranu i otrzymania 17 znaku ekran jest czyszczony i 17 znak pojawia się jako 1 znak na ekranie. Więcej aktualnych informacji o USART LCD.

    2. Diagram wdrożenia

    2.1 Komunikacja mikrokontrolera z komputerem PC

    Mikrokontroler PIC16F84A komunikuje się z komputerem PC wykorzystując w tym celu port COM. Konieczne jest użycie układu MAX232 by dostosować napięcia TTL (5V) mikrokontrolera do standardu RS232 (12V) które występują na porcie COM.

    Moduł USART dla wyświetlacza 16x1 zrealizowany na PIC16F84A

    Rys. 1 Komunikacja PIC16F84A z PC

    2.2 Komunikacja mikrokontrolera z innym mikrokontrolerem

    Mikrokontroler PIC16F84A komunikuje się z innym mikrokontrolerem wykorzystując do tego celu USART.

    Moduł USART dla wyświetlacza 16x1 zrealizowany na PIC16F84A

    Rys. 2 Komunikacja PIC16F84A z innym uC

    3. Schemat elektryczny

    Moduł USART dla wyświetlacza 16x1 zrealizowany na PIC16F84A

    Rys. 3 Schemat elektryczny

    4. Protokół transmisji danych

    Tab. 1 Instrukcje sterujące
    Kod ASCII Instrukcja
    [ Rozpoczęcie odbioru danych
    ] Zakończenie odbioru danych
    # Wyczyszczenie ekranu

    5. Algorytm programu

    Moduł USART dla wyświetlacza 16x1 zrealizowany na PIC16F84A
    Rys. 4 Algorytm programu

    6. Kod programu
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    Fajne? Ranking DIY
    O autorze
    kolgreen
    Poziom 16  
    Offline 
    kolgreen napisał 269 postów o ocenie 240, pomógł 11 razy. Jest z nami od 2007 roku.
  • #2 11107363
    komatssu
    Poziom 29  
    Posty: 1056
    Pomógł: 98
    Ocena: 165
    Duży plus za użycie innego kontrolera niż oklepane ATMEGA... Układ PIC16F84 choć już leciwy i niezbyt wydajny, to wciąż jest dostępny i bardzo łatwy do programowania w asemblerze.
  • #3 11107999
    Urgon
    Poziom 38  
    Posty: 7200
    Pomógł: 197
    Ocena: 2630
    AVE...

    Lepiej w C/Basic programować. Zwłaszcza do takiego zadania. Assembler jest dobry do zadań czasowo krytycznych. No i kod wyższego poziomu łatwiej przenosić na różne układy...
    Aż się prosi zrobić z tego uniwersalny interfejs USART dla wyświetlaczy tekstowych, z możliwością programowego wybierania wielkości wyświetlacza...

    Wstaw zdjęcia gotowego układu...
  • #4 11108216
    Mariojas
    Poziom 17  
    Posty: 288
    Ocena: 7
    Warto dodać możliwość użycia "kursora". Czyli na początku transmisji podać od którego miejsca na wyświetlaczu ma nastąpić zmiana znaków.
    Inaczej przy każdej zmianie jakichś częściowych danych należy wysłać cały ekran na nowo. Marnotrawstwo czasu procesorów itd.
  • #5 11108602
    RomanFilipecki
    Poziom 18  
    Posty: 217
    Pomógł: 22
    Ocena: 32
    Nie pamiętam oznaczenia układu, ale było to na przełomie 20 i 21 wieku, w Elektronice praktycznej zaprezentowano układ scalony pełniący tą funkcję, co ciekawe był to PIC + aplikacja, znamienne tym że obsługiwał transmisję jednokierunkową i nie potrzebował konwertera poziomu ( 232 ). Zamiast niego użyty był 1 rezystor włączony w szereg z portem.
    Czy ktoś pamięta jego oznaczenie?

    Roman
  • #6 11109029
    Konto nie istnieje
    Konto nie istnieje  
  • #7 11110429
    rpal
    Poziom 27  
    Posty: 1501
    Pomógł: 72
    Ocena: 49
    Czy to nie jest wywarzanie otwartych drzwi, sam posiadam kilka wyświetlaczy 2x20 (fluorescencyjnych) z komunikacją po RS232 5V. Na allegro chodzą po 20 PLN. Rozumiem sens poznawczy i konstrukcyjny ale to się też musi opłacać.
  • #8 11110512
    mkpl
    Poziom 37  
    Posty: 5638
    Pomógł: 306
    Ocena: 839
    Kolega Mirley z tego co pamiętam zrobił coś takiego na Attiny2313 i miało całkiem niezłą funkcjonalność.
    Sam też posiadam wyświetlacze z kas fiskalnych zrobione na 89c2051 (może ktoś wie jak na ledowym wyświetlaczu zapalić kropkę ?)
  • #9 11116633
    kolgreen
    Poziom 16  
    Posty: 269
    Pomógł: 11
    Ocena: 240
    rpal napisał:
    Czy to nie jest wywarzanie otwartych drzwi, sam posiadam kilka wyświetlaczy 2x20 (fluorescencyjnych) z komunikacją po RS232 5V. Na allegro chodzą po 20 PLN. Rozumiem sens poznawczy i konstrukcyjny ale to się też musi opłacać.


    Sens poznawczy to raz. Dwa chciałem wykorzystać PIC16F84A, który ma bardzo kiepskie możliwości (niestety nie wiąże się to z ceną) a zalega mi na magazynku.
    Byłbym bardzo wdzięczny za namiary na tak tani wyświetlać z obsługą RS232. Na allegro nie mogę znaleźć. Jedyne co znalazłem to przejściówki plus wyświetlacz na ebay. Czyli praktycznie to co zrobiłem... Dla zainteresowanych "1x Serial 1602 LCM , LCD Display Module , UART , 9600 kbps". Cena? 16,99 USD :D

    Mariojas napisał:
    Warto dodać możliwość użycia "kursora". Czyli na początku transmisji podać od którego miejsca na wyświetlaczu ma nastąpić zmiana znaków.
    Inaczej przy każdej zmianie jakichś częściowych danych należy wysłać cały ekran na nowo. Marnotrawstwo czasu procesorów itd.


    Jasne, wystarczy użyć funkcję lcd_gotoxy

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Urgon napisał:
    Lepiej w C/Basic programować. Zwłaszcza do takiego zadania. Assembler jest dobry do zadań czasowo krytycznych.


    Nie do końca rozumiem, przecież kod jest napisany w C.

    Cytat:
    Swego czasu popełniłem podobny układ tylko na I2C. Usarty zawsze wykorzystuję do czego innego a I2C pozostaje wolne Smile.


    Z tym, że w PIC16F84A brak jednego i drugiego - trzeba to realizować programowo. No widzisz, ja mam tak czasem właśnie z USART. W tym wypadku jest to taki MODBUS dla ubogich, bo mogę USART używać do komunikacji po RS232 przez MAX232 z PC i jednocześnie wysyłać info na LCD z PC i uC. Jest to trochę dziwne ale w moich zastosowaniach często bardzo uniwersalne i przydatne.
    W PIC16F84A zostają jeszcze wolne piny i można dodać klawiaturkę, wtedy instrukcje mogą być wysyłane przez USART do uC. Jednocześnie można też sterować uC z aplikacji na PC.
  • #10 11116808
    Urgon
    Poziom 38  
    Posty: 7200
    Pomógł: 197
    Ocena: 2630
    AVE...
    kolgreen napisał:

    Urgon napisał:
    Lepiej w C/Basic programować. Zwłaszcza do takiego zadania. Assembler jest dobry do zadań czasowo krytycznych.

    Nie do końca rozumiem, przecież kod jest napisany w C.

    To się odnosiło do posta Komatssu...
  • #11 11117613
    rpal
    Poziom 27  
    Posty: 1501
    Pomógł: 72
    Ocena: 49
    kolgreen napisał:
    rpal napisał:
    Czy to nie jest wywarzanie otwartych drzwi, sam posiadam kilka wyświetlaczy 2x20 (fluorescencyjnych) z komunikacją po RS232 5V. Na allegro chodzą po 20 PLN. Rozumiem sens poznawczy i konstrukcyjny ale to się też musi opłacać.


    Sens poznawczy to raz. Dwa chciałem wykorzystać PIC16F84A, który ma bardzo kiepskie możliwości (niestety nie wiąże się to z ceną) a zalega mi na magazynku.
    Byłbym bardzo wdzięczny za namiary na tak tani wyświetlać z obsługą RS232.

    szukaj wyświetlaczy VFD
    o ile tego nie wywali nikt to proszę link http://allegro.pl/wyswietlacz-vfd-i2476599163.html podrożało bo 30 PLN chcą za to. TO ma tylko linię +5V, GND i RxD steruje się poziomem 5V
    Natomiast o nocie katalogowej to raczej zapomnij , jak dotąd jej nie znalazłem ale gdy się podłączy pod konwerter TTL/RS232 można sterować ze zwykłego PC-ta coś tam z niego wycisnąć, mi się osobiście udało. Często sprzedawane są te wyświetlacze przez "firmy" które zajmują się utylizacją kas fiskalnych czyli m.in przez ich serwisy albo sprzedawców ponieważ kasy fiskalnej nie można tak sobie po prostu zezłomować ponieważ są w niej zapisane obroty użytkownika i taki "utylizator" musi po prostu zniszczyć część elektroniki zawierającą dane ale wyświetlacze często sprzedają za przysłowiowe grosze sam kupiłem wiele wyświetlaczy LCD po 5-10 PLN :) Powodzenia w szukaniu.
    Na marginesie postu to ciekawe czemu ktoś zaskarżył mój post do admina, komu przeszkadzała wzmianka o opłacalności projektu ? :-)
  • #12 11117776
    kolgreen
    Poziom 16  
    Posty: 269
    Pomógł: 11
    Ocena: 240
    rpal napisał:

    szukaj wyświetlaczy VFD
    o ile tego nie wywali nikt to proszę link http://allegro.pl/wyswietlacz-vfd-i2476599163.html podrożało bo 30 PLN chcą za to. TO ma tylko linię +5V, GND i RxD steruje się poziomem 5V


    Sprawdź link, bo chyba nie o to chodziło? Wyświetlacz VFD (ang. Vacuum Fluorescent Display) to jednak bardzo daleko ma do LCD. W końcu to "tylko" próżniowa lampa elektronowa ze zdefiniowanymi z góry znakami...

    rpal napisał:

    Często sprzedawane są te wyświetlacze przez "firmy" które zajmują się utylizacją kas fiskalnych czyli m.in przez ich serwisy albo sprzedawców ponieważ kasy fiskalnej nie można tak sobie po prostu zezłomować ponieważ są w niej zapisane obroty użytkownika i taki "utylizator" musi po prostu zniszczyć część elektroniki zawierającą dane


    Mówisz o module fiskalnym, który przedsiębiorca musi przechowywać i dać do wglądu urzędowi podatkowemu. Z samą kasą on ma niewiele wspólnego, to tylko "czarna skrzynka" (jak w samolocie). Kasa nie posiadając takiego modułu (zafiskalizowanego) nie jest kasą fiskalną, ale również działa. Taki moduł się w kasie wymienia (gdy się zapełni). Samą kasę można zezłomować, rozebrać, byle tylko mieć moduł fiskalny.

    rpal napisał:
    ale wyświetlacze często sprzedają za
    przysłowiowe grosze sam kupiłem wiele wyświetlaczy LCD po 5-10 PLN :) Powodzenia w szukaniu.


    Akurat mam stare kasy (już nie fiskalne) ale ekraniki nadają się tylko do wyświetlania ceny. W sumie po to są... Zapomniałem o drukarce termicznej, dzięki za przypomnienie ;)

    rpal napisał:

    Na marginesie postu to ciekawe czemu ktoś zaskarżył mój post do admina, komu przeszkadzała wzmianka o opłacalności projektu ? :-)


    Nie wiem, mogłaby ta osoba to uzasadnić.
    Ja też myślę, że to nie jest na miejscu mówić w dziale DIY o "opłacalności", bo nie o to tu chodzi. W sumie zawsze mnie to śmieszy. Często czytam ten dział i zawsze ktoś się znajdzie, kto będzie uważał że przedstawiana rzecz:
    -jest nieopłacalna,
    -ktoś inny to już zrobił,
    -można to kupić,
    - itd.
  • #13 11121216
    rpal
    Poziom 27  
    Posty: 1501
    Pomógł: 72
    Ocena: 49
    zgadza się że VFD to nie to samo co LCD ale zdaje się autor pisał o wyświetlaczu sterowanym po rs232. Akurat ten wyświetlacz który wskazałem na a.... jest tak sterowany a funkcjonalnie zachowuje się tak jak opisany projekt i moim zdaniem parametry tego wyświetlacza co do jasności, wielkości znaków są zdecydowanie lepsze niż pierwszego z brzegu LCD pracującego w trybie tekstowym. Więc po co wywarzać otwarte drzwi skoro coś podobnego jest "pod ręką". W kwestii śmiechu zawsze możemy się wspólnie pośmiać :)
    Tyle że skoro autor kierując się oszczędnością (bo "miał coś pod ręką") wziął się za konstruowanie takiego a nie innego rozwiązania, wcale nie jest śmieszne rozważenie czy się to opłaca czy nie w skrajniej postaci takiego jak kolega (wyżej) prezentuje dojdziemy do chałupniczej produkcji scalaków :) PZDR
    A co do kas fiskalnych możliwe że tak jest w istocie że moduł z danymi można sobie przechowywać, kiedyś zaopatrywałem się w serwisie kas fiskalnych i za żadne skarby nie chcieli oddać modułów pamięci a mieli ich pełne kosze twierdząc że niszczą, zatem nie miał ich klient a serwis który demontował kasy. W dodatku pozalewane żywicą, Dla amatorów takich Epromów informacja że moczenie przez noc w chlorku metylu skutecznie degraduje ten sposób "zalewania" pamięci i układ jest gotowy do użycia:)
  • #14 11141162
    tehaceole

    Poziom 28  
    Posty: 1224
    Pomógł: 102
    Ocena: 212
    Swego czasu na wspomnianym artykule z Elektroniki Praktycznej wzorowałem ramkę danych używaną w moim urzadzeniu. Poczyniłem wtedy automat sekwencyjny dekodujący nadlatujace depesze "w locie" (ster dzieje, kod z masą warningów więc polecam go tylko jako przykład "że tak się da"). Z kolei w książce Mirka bardzo zbliżony mechanizm zrealizowany jest w uzyciem buforowania danych z uart i ich parsowania.
    Sugerowałbym Koledze skorzystanie z któregoś z tego typu rozwiązań i wprowadzenie chociażby możliwości adresowania urządzenia. Bo na razie ze wspomnianym przez Kolegę Modbusem ma to niewiele wspólnego.
    Stąd prosty wniosek - zamiast RS232 lepiej 485 i wtedy ma Kolega możliwość podłączenia kilku takich "rozproszonych" wyświetlaczy do swojego urządzenia.

    Co do samego kodu - czemu Kolega nie wykorzystał przerwań? Mam dziwne wrażenie, że funkcja getc zablokuje wykonywanie reszty programu w oczekiwaniu na nadejście jakiegoś znaku. Poza tym:
    - na ekran trafią wszystkie śmieci jakie mogą jeśli znajdą się przypadkowo w ramce pomiędzy znakami [ i ].
    - wspomniany brak możliwości ustawiania kursora na konkretnej pozycji.

    Polecę Koledze również zapoznanie się z tym artykułem opisującym prosty sposób komunikacji zdarzeniowej. Co prawda kody pisane pod AVR, ale to język C więc na PIC pójdzie bez zająknięcia. :)
    Konto firmowe:
    ST - SYSTEM
    Maszkowo 24 B, Maszkowo, 75-558 | Strona WWW: www.stsystem.pl

Podsumowanie tematu

✨ Dyskusja dotyczy projektu modułu USART do komunikacji z wyświetlaczem 16x1, zrealizowanego na mikrokontrolerze PIC16F84A. Uczestnicy podkreślają zalety użycia PIC16F84A w porównaniu do popularnych kontrolerów ATMEGA, wskazując na łatwość programowania w asemblerze. Sugerują również programowanie w językach wyższego poziomu, takich jak C lub Basic, dla lepszej przenośności kodu. Wskazano na możliwość dodania funkcji kursora, co pozwoliłoby na bardziej efektywne zarządzanie danymi na wyświetlaczu. Pojawiły się również sugestie dotyczące użycia interfejsu I2C zamiast USART oraz omówiono dostępność wyświetlaczy z komunikacją RS232. Uczestnicy dzielą się doświadczeniami z podobnymi projektami oraz poszukiwaniami komponentów, takich jak wyświetlacze VFD i LCD.
Wygenerowane przez model językowy.
REKLAMA