Zrobiłem obsługe LCD z NOKII 5110(niektóre inne modele mają taki sam).
W zasadzie to nie nowość, ale może te informacje siękomuś przydadzą.
Jest to LCD 84x48px, mono. Sam LCD razem z oryginalną ramką zamontowałem na wykonanej przeze mnie metodą termotransferu płytce.
Do połączenia uC z LCD zastosowałem 74HC245-konwerter napięć jest potrzebny, ponieważ uC zasilam z 5V, a LCD wymaga ok 3,3V. UC i 74HC245 są na uniwersalnej płytce. Połączenia wykonane są wg schematu z EP(5-7/2003r)+podświetlenie. Zastosowany uC to AVR ATmega 32 z kwarcem 16 MHz. Program nie realizuje żadnego konkretnego zadania(nie wiem czy umieściłem to w dobrym dziale), moim celem było jedynie zrobienie samej obsługi, być może w przyszłości wykorzystam ten LCD do jakiegoś urządzenia. Program umożliwia:
-zapalenie, zgaszenie, odwrócenie dowolnego pixela(funkcja pixel(x,y,tryb))
-wyświetlanie znaków w dowolnym miejscu na ekranie w wielkości 1-6(write_char(znak,rozmiar))
-wyświetlanie grafiki: po przekonwertowaniu czarnobiałej bitmapy programem "Asystentlcd" obcinam odpowiednią liczbe zer i tablica z grafiką gotowa(Asestent LCD może przekonwertować obrazek o rozmiarze np128x64, więc otrzymana tablica jest za duża, dlatego trzeba usuwać zera z otrzymanej tablicy)
-rysownie wykresu bierzącej temperatury od czasu(od 60 sek na filmiku)
uC temperature dostaje z innego układu(Płytka uruchomieniowa AVT-992 z DS1820). Na wyświetlaczu nie ma skali, ale najniższy wiersz to 15° C, najwyższy to 38,5°C (1px-0,5°C)
-możnaby dodać wiele innych, zotaje około 90% wolnej pamięci ATmegi.
Poniżej zamieszczam kilka zdjęć, kod, wzór płytki do LCD i film na którym od 60 sekundy jest rysowanie wykresu temperatury mierzonej w palcach.
Witam.
Bardzo dobry kontrast - czy zastosowany wyswietlacz jest orginalny? Uruchomiłem podobny układ z nieorginalnym wyswietlaczem od 3310 i kontrast jest bardzo mizerny.
pzdr
Witam, bardzo fajna konstrukcja a te animacje tych cyfr to mnie dobiły gratuluję pomysłowości oraz cierpliwości przy składaniu tego urządzenia jesli mówisz że masz jeszcze miejsce w procku to na twoim miejscu wrzuciłbym programik który by kontrolował uruchomieniem poszczególnych urządzeń w odpowiednim czasie który byłby wyswietlany na LCD-ku za całokształt daje 10/10 jeszcze jakaś obudowa do tego i bedzie dobrze
Możecie mnie oświecić jak to właściwie jest. Często spotykam projekty gdzie jako konwertera używa się układy z rodziny HC/HCT a w notach aplikacyjnych podawane jest dopuszczalne napięcie wejściowe 0 - Vcc. Jeśli układ zasili się z 3.3V to 5V na wejściu to chyba za dużo. Jakie jest rzeczywiste napięcie na wyjściu?
Ile znaków mieści się na jednej stronie wyświetlacza (najmniejszą czytelną czcionką ) ?
84 znaki - 6 wierszy po 14 znaków, znak 5x7 px, odstępy 1 px.
(foto: 3 rząd, 3 kolumna przedstawia taką sytuacje. Planuje pobawić sie czcionką o zmiennej szerokości.)
i co z tego że masz 17 lat?? ile według Ciebie trzeba miec lat zeby zrobić coś ciekawego? skoro 14-latek potrafi złamać zabezpieczenia w najnowszym sprzęcie..
Konstrukcja poprawna. nie mam praktycznie zadnych zastrzeżeń. Rozbawiła mnie szóstka :D . Termometr też jest bardzo ciekawy. Gratuluję cierpliwości.
możesz dorobić skalę po prawej stronie do termometru. ewentualnie można też zapisywać temperaturę do jakiegoś eepromu żeby móc przeanalizować zmiany dobowe. np...
gratuluje ciekawego pomysłu - taki wyświetlacz może być fajną alternatywą dla alfanumeryków, zwłaszcza jeżeli mamy taki na stanie;
konstrukcja fajnie się prezentuje i jest schludnie wykonana
Możecie mnie oświecić jak to właściwie jest. Często spotykam projekty gdzie jako konwertera używa się układy z rodziny HC/HCT a w notach aplikacyjnych podawane jest dopuszczalne napięcie wejściowe 0 - Vcc. Jeśli układ zasili się z 3.3V to 5V na wejściu to chyba za dużo. Jakie jest rzeczywiste napięcie na wyjściu?
Do konwersji z 5 na 3V3 stosuje sie rodzine LVC
Natomiast aby wysterowac uklad 5V wystarczy HC zasilany z 3V3 poniewaz 1 dla HC przy 3V3 obejmuje zakres 1 dla 5V.
Gdy na wejscie ukladu podamy napiecie wyzsze niz zasilajace+0,6V to odparuje. Wyjatkiem sa LVC (akceptuja napiecia do 5V), 4049, 4050 (akceptuja 15V), i inne nieliczne (np 89C51, GAL, Eprom akceptuja 12V na niektorych wyprowadzeniach)
Dla mnie - bomba. Gratuluję pomysłu! 10/10.
Nie wiem, czy pamiętacie, ale jakiś czas temu była w którymś z czasopism dla elektroników (chyba EP) konstrukcja odtwarzacza MP3 z wykorzystaniem podobnego wyświetlacza od starszej Nokia.
No Majki szczerze gratuluje projektu. Czekam na jakąś praktyczną implementację (może jakiś kalkulator graficzny?). A powiedz jak pisałeś program. Od podstaw, czy wzorowałeś się na czymś?
Możecie mnie oświecić jak to właściwie jest. Często spotykam projekty gdzie jako konwertera używa się układy z rodziny HC/HCT a w notach aplikacyjnych podawane jest dopuszczalne napięcie wejściowe 0 - Vcc. Jeśli układ zasili się z 3.3V to 5V na wejściu to chyba za dużo. Jakie jest rzeczywiste napięcie na wyjściu?
Do konwersji z 5 na 3V3 stosuje sie rodzine LVC
Natomiast aby wysterowac uklad 5V wystarczy HC zasilany z 3V3 poniewaz 1 dla HC przy 3V3 obejmuje zakres 1 dla 5V.
Gdy na wejscie ukladu podamy napiecie wyzsze niz zasilajace+0,6V to odparuje. Wyjatkiem sa LVC (akceptuja napiecia do 5V), 4049, 4050 (akceptuja 15V), i inne nieliczne (np 89C51, GAL, Eprom akceptuja 12V na niektorych wyprowadzeniach)
Też tak rozumuje. Dlatego ciekawi mnie jaką rolę w tym układzie spełnia zastosowany 74HC245 bo chyba nie konwertera napięć uC->LCD. Jeśli uC jest zasilany z 5V, 74HC245 z 3.3 to co jest na wyjściu tego układu i dlaczego jeszcze żyje jeżeli wejściowe napięcie jest większe od Vcc+0x6V. Na cytowanym przez autora schemacie też użyto układ LVC. Może wszystko działa prawidłowo tylko dlatego, że ten wyświetlacz toleruje wyższe napięcia niż 3.3V.
hej, mxmxmxmxmxxmxmxm w jaki sposób realizowana jest w Twoim programie zmiana czcionki?
w jakim środowisku C piszesz (jaki kompilator, symulator i programator)? rzuciłem okiem na kod i mi się wydał kompilator przystępniejszy niż WinAVR(programmers notepad)...
hej, mxmxmxmxmxxmxmxm w jaki sposób realizowana jest w Twoim programie zmiana czcionki?
w jakim środowisku C piszesz (jaki kompilator, symulator i programator)? rzuciłem okiem na kod i mi się wydał kompilator przystępniejszy niż WinAVR(programmers notepad)...
Używam AVRStudio i WinAvr 20070525.
Zmiana czcionki jest realizowana następującą funkcją:
Code:
void write_char(data,size)//size 1-6
{
short int i,j,k,l;
for(i=0;i<5;i++)//"rozdzielczość" 5 px szer
{
for(j=0;j<size;j++)//tyle kolumn, o szer 1px, jaki rozmiar
{
for(k=0;k<7;k++)//"rozdzielczość" 5 px wys
{
for(l=0;l<size;l++)//zaswiecenie/zgaszenie tylu pixeli w kolumnie o szer 1px, jaki rozmiar
{
if(font[data][i]&1<<k)//jezeli w czcionce jest 1
{
pixel(x,y,1);//zaswiec
}
else
{
pixel(x,y,0);//zgać jezeli 0
}
y++;
}
}
pixel(x,y,0);//odstep
x++;
y=y-7*size;
}
}
for(i=0;i<size;i++)
{
for(j=0;j<size*7;j++)//odstep
{
pixel(x,y,0);
y++;
}
pixel(x,y,0);
x++;
y=y-7*size;
}
if(x+6*size>84)//przejście do nowej linii, jezeli nastepny znak wyszedłby poza ekranem
{
x=0;
y+=8*size;
}
jak masz chwilę możesz parę słów tytułem bardziej rozbudowanego komentarza?:) ogólnie to wcześniej zadeklarowałeś macierz z wyglądem wszystkich znaków w podstawowej wielkości, jak je później powiększasz? nie bardzo się orientuję:/ czy nie chodzi o to że jeżeli chcesz powiększyć znak o jeden stopień to rysujesz na ekranie zamiast jednego piksela "większy piksel" czyli 4 piksele? i tak dalej????
czy nie chodzi o to że jeżeli chcesz powiększyć znak o jeden stopień to rysujesz na ekranie zamiast jednego piksela "większy piksel" czyli 4 piksele? i tak dalej????
Dokłacznie tak. znak ma 5 "punktów" * 7 "punktów"
rozmiar 1: "punkt"=1 pixel(1pix*1pix), rozmiar znaku 5 pixeli x 7 pixeli
rozmiar 2: "punkt"=4 pixele(2pix*2pix), rozmiar znaku 10 pixeli x 14 pixeli
rozmiar 3: "punkt"=9 pixeli(3pix*3pix), rozmiar znaku 15 pixeli x 21 pixeli
rozmiar 4: "punkt"=16 pixel(4pix*4pix), rozmiar znaku 5 pixeli x 7 pixeli
itd do 6
rozmiar bez odstępów, tylko ja wysyłam to nie "punktami", tylko kolumnami o szerokości 1 pixela
Witam. Gratuluje pomysłu, fajne urządzenie z b szerokim zastosowaniem. Mam kilka pytań do autora;
1 - jak się zapala pojedynczy piksel? To jest LCD 84pixle*84pixle? tzn jest 7056 wszystkich pixli? Jeżeli tak to jak to jest realizowane?
2 - na laborkach uczę się C++ w Visual studio 2005 i patrząc na Twój program większość była dla mnie zrozumiała, pytanie brzmi; czy mogę pisać programy w w/w przeze mnie środowisku? Jeśli tak to czym to później kompilować? Ponadto piszemy na tych laborkach aplikacje konsolowe win32(uruchamiane w wierszu poleceń); jak coś tam napisać pod uC (AT89s51/52), jakieś biblioteki należy dołączy?
Jak w takim środowisku np ustawić/wyzerować daną linię portu? PS.Umiem pisać w asemblerze, dodaje to by ułatwić odpowiedź, może będzie łatwiej mi to wytłumaczyć
pisanie w c dla mikrokontrolerow wyglada troche inaczej choc skladnia jest praktycznie taka sama, inny jest tylko "wstep" do programu i dochodza takie rzeczy jak np przerwania. podstawy jezyka juz masz wiec opanowanie pisania dla uK nie bedzie dla Ciebie problemem.
jak znasz C to z powodzeniem możesz zacząć pisać programy dla mikrokontrolerów PIC. Jak sie na nie zdecydujesz to mogę pomóc przy podstawach. A polecam PICe bo jako sample do nauki mozesz je zamowic za darmo od producenta.
TUTAJ możesz zobaczyć moje programatory do PICów :)
Z praktyki: Pisanie w jakimkolwiek języku dla mikrokontrolera, a komputera "trochę sie różni". To trochę to:
nie 1GB pamięci, a 256 bajtów (w najlepszym przypadku 64kB, ostatecznie 2-4MB)
Flash (na program) to nie 50MB, "tylko" 4KB czasem 20, bywa, że 64, 128, 512 w skrajnych przypadkach 8MB.
Można by jeszcze pisać i pisać....
microchip.com dalej wybierasz sample -> product line np PIC microcontrolers-> device family np PIC16F84A -> wybierasz opcje sample obok uK -> checkout jak już sie zarejestrowałeś -> dalej uzupełniasz do czego będziesz uzywał uK i czekasz na sample :)
jest tylko jeden problem: mail podany do rejestracji nie może być na wp ani na onecie ani na innym ogolnodostepnym serwisie..