Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 14 mar 2025, o 19:37


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 21 ] 
Autor Wiadomość
PostNapisane: 1 wrz 2013, o 14:18 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 09 lip 2013
Posty: 106
Pomógł: 0

Cześć. Chcę uruchomić mój wyświetlacz na bibliotekach Mirka. Niby nic wielkiego ale jednak nie działa. Mój wyświetlacz to 4x16 Zgodny z HD44780.
Tutaj jest link do download'u datasheet'a tego lcd'ka :P
Problem w tym że proste przeróbki biblioteki Mirka czyli zmiana pinów w lcd44780.h nic nie dają... Wcześniej przewertowałem wszystkie możliwości z Antystatycznym, i doszliśmy do wniosku że to bez sensu przerabiać pół biblioteki na chacie więc piszę tutaj :)

Wracając, wszystko jest robione na stykówce i uprzedzając wszystkie pytania :

1. Sprawdzałem połączenia 5-krotnie i jestem na 100% pewny że wszystko jest dobrze podpięte.
2. Do wyświetlacza dałem potencjometr 10k do regulacji kontrastu, i również jestem pewien że jest dobrze wpięty bo wpinałem w szereg diodę i potencjometrem ładnie ją rozjaśniałem i zciemniałem ;)
3. Plik main.c jest dobrze napisany bo nie wywala żadnych błędów i Antystatyczny potwierdził że błąd leży gdzie indziej.
4. Mikrokontroler to ATmega 32 taktowana zewnętrznym kwarcem 11.0592 Mhz i pięknie się programuje oraz MkAvrCalculator ją widzi :) ( programowany przez USBasp )

Więc problem leży w złej przeróbce libsa. Próbowałem też na czysto odpalić program prosto z płyty nie zmieniając niczego, oczywiście nic się nie pokazało...
Co do samej biblioteki, razem z Antystatycznym, za co bardzo mu dziękuję, przewertowaliśmy pół datasheeta mojego wyświetlacza i wniosek okazał się jeden - błędna inicjalizacja lcd'ka.
I tu dochodzimy do sedna sprawy.

Czy pomożecie mi napisać inicjalizację do mojego wyświetlacza ?

Żeby nie prosić o gotowy projekt, napisałem coś takiego :

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Narysowałem też schemat "myślowy" całej inicjalizacji wg. datasheeta podanego wyżej.

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 wrz 2013, o 14:58 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 09 lip 2013
Posty: 106
Pomógł: 0

Ok,
Antystatyczny napisał(a):
zwróciłbym szczególną uwagę na komendy wydawane podczas inicjalizacji,

czyli te bity o których rozmawialiśmy ? Tzn gdzie w libsie było 1.1 a w pdfie 1.0 ?

Jeśli tak to własnie to przerabiam i napisałem coś takiego :
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


I wg mnie funkcja lcd_init już jest poprawna, ale kolejnym problemem może być ramka czasu ze str 204. I o ile wcześniej wystarczyło wpisać odpowiednie bity to teraz nie wiem gdzie i jak mógłbym zmienić czas z ramki...
W libsie jest to samo co na str 204 bluebooka a w moim pdfie jest to

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 wrz 2013, o 15:02 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 05 sie 2013
Posty: 1154
Lokalizacja: Lublin / Kraków
Pomógł: 72

A do jakich pinów masz podpięte ?

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Chyba w delay_ms nie można podać liczby typu float
raczej trzeba by dać _delay_us(1530);


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 wrz 2013, o 15:10 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 09 lip 2013
Posty: 106
Pomógł: 0

Antystatyczny,
Antystatyczny napisał(a):
A zerknij na stronę 17 datasheeta do lcd ;) Masz tam podane opóźnienia podczas inicjalizacji.
, właśnie wg tego rysunku przerabiałem lcd_init(), ale czy to znaczy że te ramki czasu ze str 15 i 16 mogę zignorować ?



@sq8dsr wszystko podpięte w ten sposób:
RS = PA0
RW = PA1
E = PA2

D7 = PA7
D6 = PA6
D5 = PA5
D4 =PA4

a tak przy okazji wrzucę main.c :)
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

_________________
sig off ;(



Ostatnio edytowano 1 wrz 2013, o 15:46 przez MrWeb123, łącznie edytowano 2 razy

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 wrz 2013, o 15:22 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 05 sie 2013
Posty: 1154
Lokalizacja: Lublin / Kraków
Pomógł: 72

W sekwencji inicjalizacji piszą, żeby oczekiwanie było większe niż xx ms, us. Może zamiast tych wartości 40, 39, 37, 1.53 daj nieco większe żeby nie było "na styk".



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 wrz 2013, o 15:36 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 09 lip 2013
Posty: 106
Pomógł: 0

Ok, czyli jeśli tamto mogę zignorować to zostaje tylko inicjalizacja i czynnik x w postaci stykówki...

@sq8dsr po poprawieniu, całość wygląda tak :
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 wrz 2013, o 15:46 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27363
Lokalizacja: Szczecin
Pomógł: 1043

W tym PDF'ie masz jak wspominał Anty ... kilka innych czasów ale też wartości więc spróbuj z nimi

chociaż i tak na końcu coś mi się zdaje że okaże się to winą połączeń - jakimś banalnym błędem.


Autor postu otrzymał pochwałę

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 wrz 2013, o 15:50 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 05 sie 2013
Posty: 1154
Lokalizacja: Lublin / Kraków
Pomógł: 72

No właśnie chodziło mi, żeby były większe np 50ms zamiast 40ms, 45us zamiast 39us itd.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 wrz 2013, o 15:58 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 09 lip 2013
Posty: 106
Pomógł: 0

@sq8dsr, do każdego _delay_ms() i _delay_us() dodałem po 5 więc całość wygląda tak :
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Antystatyczny, całość jest zasilana z portu usb przez programator więc skoki napięcia są możliwe.
Rozmontuję wszystko, posprawdzam blaszki i sprawdzę czy połączenia są poprawne. I teraz zostanę pewnie zwyzywany bo nie mam miernika... tzn miałem ale taki za 10zł się rozleciał i chciałem kupić coś lepszego i narazie nie mam gdzie kupić :|

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 wrz 2013, o 16:09 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 05 sie 2013
Posty: 1154
Lokalizacja: Lublin / Kraków
Pomógł: 72

Pewnie jakiś "czeski" błąd. Czasem są są takie pomyłki, że aż można się uśmiać. Przykładowo, ja kiedyś przez godzinę nie mogłem pojąć co się dzieje, czemu nie działa itd. I okazało się, że kompiluję jeden projekt, ale w eclipsie, w drzewie projektu kursor stoi na innym projekcie więc wsad HEX jest wgrywany z niego a nie z tego co kompilowałem :P



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 wrz 2013, o 16:36 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 09 lip 2013
Posty: 106
Pomógł: 0

Sprawdzałem połączenia brzęczykiem ( tylko to mi się zostało po mierniku :) ) i teraz tak...
Brzęczyk (1) był wpięty katodą do minusa a anodą do kabelka (2) którym dotykałem po kolei piny (4) wyświetlacza. Te piny były z kolei podłączone do nóżek ATmegi, do których z kolei dotykałem kabelkiem (3) wpiętym w "+". Dziwnie to opisałem więc wrzucę zdjęcie połączeń :
Obrazek

Po kolei dotykam jednym i drugim kabelkiem i słyszę pisk więc wszystko ok, jest połączenie. I tak było wszędzie oprócz pinu RW przy lcd'ku. Bo nawet nie musiałem zamykać obwodu przez drugi kabelek a brzęczyk już piszczał. Co to znaczy ? Wychodzi na to że na wszystkich liniach jest stan 0 ale na linii RW jest 1 bo brzęczyk piszczy. Testowałem to dalej i okazało się że po odpięciu pinu RW wyświetlacza od pinu PA1 mikroklocka, brzęczyk przestał piszczeć.
Czyli :
Na wszystkich liniach jest tak jak powinno być oprócz linii PA1 która ma ustawiony stan 1. Dlaczego ? nie wiem ale tak chyba nie powinno być. Inaczej mówiąc : PA0..7 jest ustawione na 0, ale PA1 jest ustawiony na 1.

Na zdjęciu widać również rezystor wpięty między + podświetlenia i ścieżką napięcia, dzięki czemu wystarczy że na nóżkę 16 lcdka podam 0 to podświetlenie się włączy :)

Potencjometr do kontrastu jest precyzyjny ( 10k )bo taki akurat miałem w moim składziku :P

Dodatkowo jak widać na zdjęciu wywaliłem kwarc zmieniając wcześniej fusebity. Nie zrobi to chyba większej różnicy :)

_________________
sig off ;(



Ostatnio edytowano 1 wrz 2013, o 17:10 przez MrWeb123, łącznie edytowano 2 razy

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 wrz 2013, o 16:59 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 09 lip 2013
Posty: 106
Pomógł: 0

main.c
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


wycinek z lcd44780.h
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 wrz 2013, o 17:21 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 09 lip 2013
Posty: 106
Pomógł: 0

AAAAA PRZEŁOMM!
Przepraszam za takie pisanie ale pokazały się napisy !! :D
Już tłumaczę...
W akcie desperacji zacząłem kręcić kontrastem jak szalony w jedną i drugą stronę i oczywiście nic. Ale wystarczyło dopchnąć jeden kabelek na kociej stykówce by ukazały się moje kochane linie :D

Jest tylko mały problem, bo wyświetla mi się tylko linia 1 i linia 3 a pod nimi kwadraciki. Ekran zachowuje się tak jakby miał tylko 2 linie... Niemniej, to działaaaaa ! :D a już myślałem że życie programisty amatora to tylko nerwy i małe sukcesy... a tu tyle radości z połowicznego sukcesu

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 wrz 2013, o 17:25 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 05 sie 2013
Posty: 1154
Lokalizacja: Lublin / Kraków
Pomógł: 72

I znowu Mirek miał rację :) Połączenia....

A z tymi liniami to pewnie są jakieś różnice w zakresach adresów.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 wrz 2013, o 17:40 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 09 lip 2013
Posty: 106
Pomógł: 0

Antystatyczny, nie rozumiem... ustawiając coś takiego:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

zostaje wyświetlony tekst lilinia3 na pierwsziej linii i tylko tyle...

a ustawiając tak
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

mam
Kod:
+----------------+
|linia1          |
|                |
|    linia3      |
|                |
+----------------+


Hehehe, zapamiętam :)

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 wrz 2013, o 17:57 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 09 lip 2013
Posty: 106
Pomógł: 0

1. Dziękuję wszystkim za pomoc, problem rozwiązany, za chwilę rozdam po jednym "pomógł" dla każdego ;)

2. Wyświetlacz działa na libsie od Mirka a ja już nie wiem jakie kary mogę sobie wymyślić więc pozwólcie że po prostu nacieszę się sukcesem :D

3. Obrazek Fajny ten gif, ustawię go sobie na avatar :P

4. Obrazek

5. Nie wiem co teraz zrobić z tą stykówką... jakieś podpowiedzi ?

6. Jeszcze raz dziękuję :)

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 wrz 2013, o 19:12 
Offline
Użytkownik

Dołączył(a): 27 lis 2012
Posty: 291
Pomógł: 6

Forum jest genialne!!!!



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 wrz 2013, o 19:50 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 05 sie 2013
Posty: 1154
Lokalizacja: Lublin / Kraków
Pomógł: 72

Antystatyczny napisał(a):
Dobra, masz nauczkę, że stykówka to ZUO


Może nie do końca ZUO, ale uważać trzeba. Ja się sporo nauczyłem dzięki stykówkom, przynajmniej na początku.

Na zestaw ATB na razie nie bardzo mogę sobie pozwolić, choć bym chciał i jeszcze ten czas przyjdzie :)
Na razie stosuję metodę polecaną przez Antystatycznego:

https://www.dropbox.com/s/ye1nth3ddk8e626/20130901_201459.jpg

Na dolnej płytce jest AT88, MAX232, 74594 z monitorowaniem bitów, dzielkin napięcia z wieloobrotowym potencjometrem dolnym, dobra filtracja (co widać przy pracy ADC), zrobione złącze KANDA, RS232 i wyświetlacz HD44780. Stopniowo coś tam dodaję jeszcze.
Na górnej jest AT32, kawałek klawiatury, 7805, TSOP do IR'a, regulowane podciąganie 1-wire, i oczywiście KANDA.
W górnym lewym roku wyświetlacz który ostatnio ćwiczyłem, piękne ledowe cudeńko :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 wrz 2013, o 05:25 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 15 lip 2012
Posty: 203
Lokalizacja: Sosnowiec
Pomógł: 2

Mamy rozumieć że już na wszystkich liniach wyświetla OK ?

Bo z tego co widzę to miałeś złe adresowanie.
Chodzi mi o fragment:
#if ( (LCD_Y == 4) && (LCD_X == 16) )
#define LCD_LINE1 0x00 // adres 1 znaku 1 wiersza
#define LCD_LINE2 0x28 // adres 1 znaku 2 wiersza
#define LCD_LINE3 0x14 // adres 1 znaku 3 wiersza
#define LCD_LINE4 0x54 // adres 1 znaku 4 wiersza
#else
#define LCD_LINE1 0x00 // adres 1 znaku 1 wiersza
#define LCD_LINE2 0x40 // adres 1 znaku 2 wiersza
#define LCD_LINE3 0x14 // adres 1 znaku 3 wiersza
#define LCD_LINE4 0x54 // adres 1 znaku 4 wiersza
#endif

U Ciebie adresy powinny wyglądać tak:
00
40
10
50
Przynajmniej to mówi datasheet który zapodałeś.

_________________
sig on ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 wrz 2013, o 06:44 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 09 lip 2013
Posty: 106
Pomógł: 0

@1bobik1, Tak, te adresy były zmienione i dwie dolne linie były przesunięte o kilka miejsc w prawo, ale już wszystko działa, bo wystarczyło adresy zmienić tak jak o tym pisał Antystatyczny. :)

@sq8dsr,
sq8dsr napisał(a):
Antystatyczny napisał(a):
Dobra, masz nauczkę, że stykówka to ZUO


Może nie do końca ZUO, ale uważać trzeba. Ja się sporo nauczyłem dzięki stykówkom, przynajmniej na początku.


Zuem nie jest bo ktoś jednak miał dobre zamiary wymyślając stykówkę, i faktycznie pomysł jest super ale przez pierwsze kilka dni/tygodni, a ja mam tą stykówkę od ponad roku, bo w sumie to na niej nauczyłem się podpinać diodę przez rezystor :P
więc jak najbardziej oczywiste że niektóre blaszki już są bardziej rozjechane od innych :) ale to właśnie przez tą stykówkę
cały dzień przerabiałem libsa a tu się okazało że nawet na stockowym wszystko działa...

...i tu pojawia się moje pytanie, zrobiłem tak jak Mirek pisał w bluebook'u, tj. otworzyłem datasheet'a mojego wyświetlacza, przeanalizowałem go z informacjami podanymi w ksiązce, nawet pokusiłem się o schemat logiczny inicjalizacji lcdka wg którego miałem napisać od nowa całą funkcję lcd_init()
ale po fakcie okazuje się że to wszystko było bez sensu bo nawet z tak wielkimi rozbierznościami (w libsie były przerwy co 100ms a ja miałem w pdfie 39us ) to wszystko działa jak by nigdy nic się nie stało.
Dlaczego ? Czy to znaczy że pdf nie ma aż takiego dużego znaczenia w życiu wyświetlaczy ?

Jak można się domyślić, całą funkcję którą pisałem z Antystatycznym i sq8dsr usunąłem, bo okazało się że oryginalna lcd_init() działa pięknie... Zmieniłem tylko adresy linijek bo tekst był lekko przesunięty.

Czyli podsumowując cały ten cyrk z porównywaniem bitów był niejako zbędny ?


Aha, co do tych płytek i zestawu uruchomieniowego, zapraszam kolegę na PW :)

@mg101, mała poprawka, Forum i Mirek* jest genialne!!!
*Antystatyczny pomagał cały dzień ( pół dnia na chacie a pół na forum ) a przyszedł sobie taki jeden Mirek :D i tak sobie pomyślał:

if(problem && stykówka) błąd_w_połączeniach();

else

if(problem && ( ! ( stykówka ) ) ) rozwiąż();

:lol: :lol:

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 wrz 2013, o 07:41 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27363
Lokalizacja: Szczecin
Pomógł: 1043

MrWeb123 napisał(a):
Czyli podsumowując cały ten cyrk z porównywaniem bitów był niejako zbędny ?


PDF jak widzisz się przydał bo masz w nim ślicznie opisane adresy pamięci RAM a rzadko który PDF to opisuje ;)

Co do czasów ... to musisz zrozumieć, że sterownik HD44780 jest stary jak świat, pewnie narodził się nawet wcześniej niż ty. Jest on po prostu powielany przez wiele firm i najczęściej działa typowo .... dlatego są to bardzo bardzo rzadkie przypadki gdy mamy na tym polu jakieś odstępstwa od standardu ;) ...

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 21 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 3 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO