(4 głosujących) Układ jest uniwersalnym wyświetlaczem LCD sterowanym za pośrednictwem portu RS-232. Dzięki zastosowaniu mikrokontrolera ATTINY2313 oraz konwertera poziomow MAX232 układ może być bezpośrednio podłączony do komputera. Sterowanie wyświetlaczem odbywa się za pomocą programu przesyłającego kody ASCI oraz specjalne instrukcje sterujące położeniem kursora i włączaniem podświetlania, na port RS-232 (zamiast specjalnego programu może być dowolny terminal). Dodatkowo układ może wspołpracować z innym mikrokontrolerem i służyć mu jako wyświetlacz sterowany tylko za pomocą jednej linii sygnałowej. Jest to przydatne szczegolnie gdy chcemy zamontować wyświetlacz kilkanaście metrow od głownego systemu mikroprocesorowego. Ponieważ układ wyświetlacza posiada dwukierunkowy interfejs szeregowy, istnieje możliwość podłączenia klawiatury i przesyłanie rozkazow sterujących pracą urządzenia (od wyświetlacza do urządzenia) za pomocą dodatkowego przewodu.
Działanie:Schemat ideowy układu został przedstawiony na rysunku poniżej: Sercem układu jest mikrokontroler U1 (ATTINY2313) wraz z rezonatorem kwarcowym X1 (16MHz) i dwoma kondensatorami C1 (22pF) i C2 (22pF). Potencjomatr P1 (10k) umożliwia regulację kontrastu wyświetlacza LCD W1 (16x2). Tranzystor T1 (BC556) wraz z rezystorami R1 (3,3k) i R2 (3,3k) umożliwia sterowanie podświetlaniem LCD. Rezystor R3 (47R) ogranicza prąd obwodow podświetlania wyświetlacza W1. Kondensatory C7 (100uF) i C8 (100nF) filtrują napięcie zasilania mikrokontrolera. Układ U2 (MAX232) jest konwerterem napięć, dostosowuje on stany logiczne występujące na porcie RS-232 do standardow obsługiwanych przez mikrokontroler. Kondensatory elektrolityczne C3 - C6 (1uF) są konieczne do poprawnej pracy układu U2. Złącza RxD_G oraz TxD_Vcc umożliwiają podłączenie zasilania i przewodow sygnałowych portu RS-232. Ponieważ port szeregowy jest dwukierunkowy istnieje możliwość podłączenie klawiatury i sterowania drugim mikrokontrolerem lub programem komputerowym. Do tego celu służy złącze GP1(wymaga modyfikacji programu). Do zaprogramowania mikrokontrolera służy złącze Prog a dodatkowo jego dwa piny (nie podłączone do wyświetlacza W1) mogą być wykorzystane w dowolny sposob (po zaprogramowaniu mikrokontrolera) Budowa:Wyświetlacz można zbudować w oparciu u płytkę drukowaną dostępną tutaj. Rysunek w odbiciu lustrzanym można pobrać tutaj. Montaż należy rozpocząć od wlutowania trzech zworek. Kondensatory elektrolityczne C3- C7 należy zamontować w pozycji leżącej, tak aby zmieściły się pod wyświetlaczem LCD, znajdującym się nad całą płytką drukowaną. Złącza Prog i GP1 mogą być w wersji "kątowej", ułatwi to podłączenie po zamontowaniu wyświetlacza. Rezonator kwarcowy musi być w wersji niskiej z tego samego powodu co leżące kondensatory. Pod mikrokontroler i układ U2 należy zastosować podstawki. Pomocą w konstrukcji może okazać się schemat montażowy dostępny tutaj Wykaz Elementów:2x Złącze Śrubowe ARK2(podwójne) 2x 3,3k 2x 22pF 1x Rezonator Kwarcowy 16MHz Programowanie:Mikrokontroler został zaprogramowany w wersji demo programu BASCOM AVR firmy MCS Electronics (http://www.mcselec.com/). Program przedstawiony jest poniżej: '************* Konfiguracja uC ***************** '*********************************************** $regfile = "attiny2313.dat" $crystal = 16000000 $baud = 9600 Config Portb = &B11111111 : Portb = &B11111111 Config Portd = &B11111111 : Portd = &B10111111 Config Lcdpin = Pin , Db4 = Portb.3 , Db5 = Portb.2 , Db6 = Portb.1 , Db7 = Portb.0 , E = Portb.4 , Rs = Portb.5 'mirley test board Config Lcd = 16 * 2 Cls Cursor On Blink 'Typ wyswietlacza LCD Kmax*Wmax Const Kmax = 16 Const Wmax = 2 '********** Konfiguracja uC Koniec ************ '****************** Zmienne ******************* '*********************************************** Dim Znak As Byte Dim S As String * 1 Dim K As Byte , W As Byte '************* Zmienne Koniec **************** '************ Warunki Poczatkowe *************** '*********************************************** K = 1 W = 1 '******* Warunki Poczatkowe Koniec *********** '************** Petla glowna ****************** '*********************************************** Do Inputbin Znak If Znak <> 0 Then Select Case Znak Case 1: '**************************** podswietlanie Toggle Portd.6 '**************************** 'Case 2....7 Case 8: '**************************** kasowanie ostatniego (backspace) Decr K If K = 0 Then K = Kmax Decr W If W = 0 Then W = Wmax End If Locate W , K Lcd " " Locate W , K '**************************** kasowanie ostatniego (backspace) 'Case 9....12 Case 13: '**************************** enter Incr W If W > Wmax Then W = 1 K = 1 Locate W , K '**************************** enter 'Case 14....26 Case 27: '**************************** kasowanie calosci(ESC) Cls K = 1 W = 1 Locate W , K '**************************** kasowanie calosci 'Case 28....31 Case 32 To 126: '**************************** znaki standardowe S = String(1 , Znak) Locate W , K Lcd S Incr K If K > Kmax Then K = 1 Incr W If W > Wmax Then W = 1 End If '**************************** znaki standardowe 'Case 127....160 Case 161 To 244: '**************************** locate K = Znak And &B00011111 W = Znak And &B01100000 Shift W , Right , 5 If K <= Kmax And W <= Wmax Then Locate W , K End If '**************************** locate 'locate -> Wysylamy wartosc 1kkwwwww (kk-numer kolumny, wwwww-numer wiersza) 'gdzie kk = (01....11) wwwww = (00001.....10100) 'Case 245....255 End Select End If Loop End '************ Petla glowna Koniec ************** Obsługa:Do osługi wyświetlacza konieczny jest komputer z programem typu terminal, lub własnym programem sterującym. Można także wykorzystać drugi mikrokontroler i wysyłać odpowiednie informacje za jego pomocą. Kody sterujące (wysyłane wartości liczbowe): Zdjęcia Projektu:
|
|||||||||||||||||||||
Wyświetlacz 20 x 2
Witam.
Mam problem z wyświetlaczem 20 x 2.
Po zmianie kodu w dwóch miejscach, nie mam napisu w dolnej linii po włączeniu.
Mam tylko jedną górną linię w takiej postaci : TESTER PORTU RS232BA
Druga linia próbuje połączyć się z pierwszą, ale brakuje jej miejsca.
Mój wyświetlacz to : WH2002L-YYK-ET.
Przy wyświetlaczu 16 x 2 było wszystko OK.
ps. Jak wgram kod od wyświetlacza 16 x 2 do obsługi tego 20 x 2 to też nie wyświetlają się dwie linie.
Czy on potrzebuje jakąś inną konfigurację ?.
Dzięki za pomoc
Re: LCD
Daodaj na początku jeszcze dwie dodatkowe linie do wyswietlenia aby zobaczyc czy przypadkiem pamięć dla tego LCD nie jest zoorganizowana inaczej niż zwykle:
UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.
Odp.Wyświetlacz 20 x 2
Sprawdź jaką masz wersję Bascom.
W nowej, zamiast gwiazdki powinno się wpisywać iks.
Producent mógł tez użyć innego chipsetu i trzeba dopisać wtedy jeden parametr.
Można o tym poczytać tutaj.
Co do kodu...to chyba względem oryginału dodano bufor Serialin..to oznacza przerwania. Sprawdź czy Hwstack potrafi pomieścić wypychane rejestry ;)
Teraz nawet w helpie piszą żeby zawsze umieszczać wartości dla Hwstack, Swstack i Framesize w kodzie programu.
Miłego dnia
BARTek
Moja strona
Wyświetlacz 20 x 2
Wersję Bascoma mam 2.0.5.0.
Nie przyjmuje iks-ów w konfiguracji LCD [ wywala błąd ].
Po wpisaniu CHIPSET=KS077 nic się nie dzieje.
Nie mam pojęcia jaki tam jest chipset.
Po wpisaniu tego co podał mirley mam to co na zdjęciu;
Wcześniej przy wpisanych dwóch liniach pierwsza łączyła się z drugą :
TESTER PORTU RS232BA
Teraz druga jest OK, tylko do nich " włażą " 3 i 4.
Jakiś postęp jest :)
Jest to wyświetlacz ze starej kasy fiskalnej Posnet, może ktoś miał z nim styczność ?.
Odp.Wyświetlacz 20 x 2
Spróbuj wpisać 16*4 w Configu ale te Const Kmax = 20 ,Const Wmax = 2 zostaw.
Jak ja za dużo wpiszę do takiego 20 * 4 to z pierwszej linii przeskakuje do trzeciej, wiec tutaj po 16 znakach powinno pisac dalej w górnej linii.
BARTek
Moja strona
Re: LCD
Spróbuj tez polecenia Locate y, x i ustaw odpowiedni znak i kolumne przed wpisaniem tekstu. Trzeba wyczaic jakie adresy tam są....
Aha spróbuj nie używać polecenia lowerline bo ono może zły adres ustawiac.... Wpisz loacate 1,1 a potem poprostu wypisz tekst o długości 20 znaków
UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.
Wysłanie słowa
Trochę mnie nie było ale :
Najpierw po wpisaniu
wszystko zagrało jak należy, potem wpisałem tylko pierwsze dwie linie i też wszystko było w porządku.
Krótko mówiąc wróciłem do pierwotnej wersji i wszystko jest OK [ może to wina mojego Bascoma, że coś źle kompiluje ? ].
Mam pytanie, czy dużo roboty jest z dopisaniem kodu do wysłania słowa np. HELLO z tego układu po naciśnięciu guzika ? przy parametrach :
M6 M5 M4 M3 M2 M1 CR LF
gdzie:
M6 ... M1 - napis np HELLO
CR - Carriage Return (powrót karetki)
LF - Line Feed (nowa linia)
ps. nie wytrzymałem i musiałem sprawdzić to co podał mirley.
i jest super. Dzięki.
Odp. Wysyłanie słowa
Jeśli transmisja ma się w obydwie strony odbywać z dwoma bitami stopu to możesz to ustawić w IDE.
Lepiej jest konfigurację zawsze umieszczać w kodzie.
Potem to juz nieskomplikowane. W najprostszej wersji tworzysz zmienną tekstową. Wpisujesz do niej Hello i wysyłasz zmienną. Każda zmienna tekstowa typu string ma w sobie znak końca (terminator NULL) wiec wysyłana będzie do momentu aż się skończy :) Nie całe 10 znaków, tylko HELLO lub co tam wpiszesz
CR i LF jest nadawany za stringiem automatycznie chyba że sobie tego nie życzysz.
BARTek
Moja strona
Wysyłanie słowa
Dzięki BARTek, ale muszę się przyznać, że w Bascomie jestem jeszcze w pieluchach :-).
Trzeba by tu też gdzieś dopisać jakiś przycisk do wywoływania tego napisu, żeby to wszystko ze sobą zagrało, możesz też pomóc.
Zakładając, że przycisk podłączę od masy do nóżki 6 attiny.
Przy zwarciu go, kod taki jak niżej zadziała ?:
[ no i gdzie to umieścić w kodzie ? ]
Odp. Wysyłanie słowa
No więc tak.. pisanie od nowa a przerabianie to zawsze coś innego. Trzeba patrzeć co już jest zrobione. W tym kodzie na początku są określane funkcje poszczególnych pinów. Po wyrażeniu Config Port jedynkami albo zerami ustalasz czy dany pin jest wejściem czy wyjściem. Musisz więc zmienić funkcję na wejście.
Po wyrażeniu Config Port i ustaleniu funkcji masz wyrażenie Portx= Tam jedynka albo zero oznacza w zalezności od tego czy pin jest wejściem czy wyjściem, albo ustalenie stanu wysokiego albo niskiego dla wyjścia albo właczenie podciągania dla przycisku.
Chodzi o to że jak pin jest wejściem i zwierasz go do masy to żeby odróżnić te stany coś musi ustawiac na nim stan wysoki. I robi to jedynka czyli właczenie rezystora podciągajacego dla pinu.
Czyli tutaj:
Musisz zamienić funkcję na wejście czyli z jeden na zero
Na podciąganiu jedynka była wiec nic się nie zmienia.(mam nadzieję że wiesz że piny w porcie, tak jak w zapisie binarnym liczymy od prawej strony i liczymy od zera. Czyli zero w Config Portd znajduje się na drugim miejscu)
Dodajesz też przyjazną nazwę dla Pind.2
Teraz dodaj gdzieś w pętli taki zapis
..a całkiem na końcu, już po wyrażeniu Loop i End i Koniec programu dopisz taki Sub
Debounce nie pozwoli na ciągłe nadawanie. Będzie można nadać tylko raz przy jednym naciśnięciu nawet jeśli przytrzymasz przycisk
BARTek
Moja strona
Wysyłanie słowa
A gdzie to ma być w kodzie ?:
rozumiem,że teraz port z przyciskiem musi być podciągnięty do zasilania przez rezystor
Odp. Wysyłanie słowa
Proszę, wersja "DeLux" Wysyła trzy różne słowa.
Dzięki podciąganiu wewnetrznym rezystorem w który wyposażone sa mikrokontrolery Tiny nie potrzeba tego zewnętrznego.
BARTek
Moja strona
Odp. Wysyłanie słowa
Dzięki BARTek za kod.
Czyli teraz po zwarciu 6 nogi attiny bezpośrednio z masą powinienem odebrać te napisy np. w Hyper Terminalu.
---------------------------------------------------
Edit:
Próbuję na różne sposoby i nie jestem w stanie odebrać tego. Nie wiem gdzie jest błąd :-(
Odp. Wysyłanie słowa
Nie napisałeś czy w ogóle potrafisz coś wysłać na ten wyświetlacz z portu komputera. Masz w ogóle komunikację w tamtą stronę?
Żeby komunikacja przebiegała pomyślnie wszędzie po drodze musżą być tak samo ustawione parametry. Na dodatek jeśli w kodzie programu nie umieścisz innych dyrektyw to komunikacja odbywa się na zasadach i parametrach wpisanych w ustawieniach Bascom. Czyli tutaj
Zauważ że u mnie jakieś dzikie Baudrate ale to co masz wpisane w kodzie jest ważniejsze. Za to bity stopu jeśli nie wpiszesz w kodzie to na pewno sa brane stąd. Więc ustaw wszedzie tak samo.
Czyli w ustawieniach Bascom i w komputerze musisz mieć tak samo. Jeśli chcesz dwa bity stopu to musisz to mieć też ustawione w komputerze. Jeśli korzystasz z przejściówki na FTDI to znajdziesz właściwości portu w Managerze Urządzeń.
Potem w terminalu też musi być tak samo. Wszędzie musi być tak samo.
Terminal Putty, mimo że nie lubiłem, też da się polubić. Klikasz Serial, wybierasz opcje i klikasz Open. Można zapisac konfiguracje żeby za każdym razem nie musieć wybierać.
Dopiero jak bedziesz miał otwarty terminal to naciskaj przycisk. Na wszelki wypadek sprawdź miernikiem czy masz tam 5v przy niewciśniętym przycisku, bo jak pisałem, wciśniety ciągle też nie będzie nadawał.
EDIT. ..a tak się to robi w kodzie
...jeśli te dwa bity są Ci potrzebne
BARTek
Moja strona
Odp. Wysyłanie słowa
W tej chwili jak piszę na komputerze to także jest to wyświetlane na LCD.
Przy włączonym ECHO w terminalu to co piszę mam na LCD i wraca także na monitor.
Poustawiałem wszystko co pokazałeś w Bascom-ie.
Przy wyjętym attiny przy zwarciu nogi 2 i 3 wysłane dane wracają na komputer.
Komunikacja do i od procesora sprawna [ błąd kabla i MAX-a wyeliminowany ].
Na 6 nodze attiny mam 5V.
Po zwarciu jej do masy martwa cisza.
Sprawdzałem kilka programów RS, ostatnio tego
Odp. Wysyłanie słowa
Skoro Tiny chce z Tobą wojowac to wgraj mu to :D
Powinien nadawać sam co sekundę
..a tu wersja TURBO ponieważ instrukcja Inputbin może zajmuje mikrokontroler to teraz tylko jesli będa znaki w buforze się te wprowadzanie uruchomi.
BARTek
Moja strona
Odp. Wysyłanie słowa
No i gra gitara :-)
Tylko czemu przy tamtym kodzie milczy ?.
-----------------------------------------------
EDIT:
Mistrzu jesteś wielki.
DZIAŁA.
PODZIĘKOWANIA WIELKIE !!!
Pozdrowienia
WESOŁYCH ŚWIĄT DLA WSZYSTKICH.
Odp. Wysyłanie słowa
Zobacz zedytowaną poprzednią wiadomośc.
Jakby co dopisz jeszcze u góry
BARTek
Moja strona
Odp. Wysyłanie słowa
Widziałem
Ja swoją też zedytowałem.
Jeszcze raz wielkie dzięki !!!
czy to bedzie wysylac kod sterujacy ?
Witaj trochę przerobiłem ten program dodałem to i tamto bo chciałem żeby wolne piny wyposażyć w przyciski przez które
dałoby się wysyłać jakiś kod sterowania do jakiegoś urządzenia. Obawiam się tylko czy trochę się nie napowtarzałem
przy konfigu wejść. program sie kompiluje ale na razie nie mam jak sprawdzić czy wysyła co trzeba.Jak byś mógł spoglądnąć okiem speca.... A no i jeszcze dodalem kody 2,3,4 sterujace miganiem kursora.czy to bedzie ok ew co bys zmienił.
Ja programowalem USB ISP programatorem i tam averdudka nie chula. wiec kombinacje z 2Mhz . ale tylko tak mam 16Mhz faktycznego taktu.... po to mam te napisy na poczatku zeby mi 1 sekunda grała na oko.
Re: Wysw rs232
1. Konfiguracja pinów ma byc tylko w tych dwóch liniach:
Jeżeli chcesz zrobić wejścia na porcie d na pinach 2-7 wpisz:
Linijki te załatwiaja też ustawianie linii w odpowiedni stan.
Co do obsługi przycisków w kodzie, używając Debounce wstawiasz dodatkowe waity do pętli głównej, pomijając już że obsługa przycisku ma waity i to aż po 200ms.... Do taktowania przycisków wypadało by użyć np timera z przerwaniem co 4-20ms i zmiennej licznika. W obecnym kodzie jeśli przyciski będą trzymane to układ może gubić znaki odbierane po rs232. Chyba że założymy że w momencie wciśnięcia przycisku nic się nie bedzie z kompa wysyłać do ukłądu.
UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.
Prędkość transmisji od 2400 do 9600
Witam.
Czy da się tutaj zrobić, żeby układ działał na prędkościach od 2400 do 9600 [ nie tak jak teraz tylko 9600 ]
Ewentualnie żeby odczytać prędkość 2400 wystarczy zmienić tylko to : $baud = 9600, czy coś innego odpowiada w programie za prędkość transmisji.
Re: Wysw RS
Zmień $baud = 9600 na 2400 i powinno być ok... zmiana prędkości w czasie działania programu wymagała by grzebania w rejestrach od rs232. Pewnie da się to zrobić ale przeważnie nie jest to do niczego potrzebne
UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.