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



Teraz jest 27 kwi 2024, o 22:50


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 105 ]  Przejdź na stronę Poprzednia strona  1, 2, 3, 4
Autor Wiadomość
PostNapisane: 6 wrz 2014, o 15:32 
Offline
Moderator
Avatar użytkownika

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

no i bomba ;)

_________________
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: 19 sie 2016, o 14:37 
Offline
Użytkownik

Dołączył(a): 24 lip 2013
Posty: 60
Lokalizacja: Okolice Gliwic
Pomógł: 3

Cześć, na samym początku przepraszam za srogi odkop - prawie dwa lata :)
Ale właśnie bawię się tym wyświetlaczem, aczkolwiek nieco inny jest niż omawiany w tutorialowych filmikach - ma piny: VCC, GND, NC, DIN, CLK, CS, DC, RES. Taki niestety otrzymałem od kumpla wraz z wieloma innymi układami w zamian za pomoc z jednym z wcześniejszych jego projektów.
Postanowiłem wykorzystać komunikację poprzez I2C, w związku z tym na jego odwrocie przelutowałem zworkę BS1 na 1 (z 0).
Potem podpatrując filmiki tutorialowe odnośnie oleda zrobiłem bibliotekę do tego wyświetlacza, ale jako, iż mój wyświetlacz jest kombinacją wszystkich trzech wspomnianych w filmiku (jest RST, CS, 4-wire SPI, 3-WIRE SPI oraz I2c w jednym module), to musiałem się nieźle napocić, żeby zrobić bibliotekę - postanowiłem jednakże pominąć część SPI, tym samym wpisując tylko część odpowiedzialną za I2C. Obsługę I2C zaczerpnąłem z książki MK, jest ona zresztą dobra, bo obsługuje DS1307 bezproblemowo...
Nie ukrywam, że mogłem coś pominąć podczas przepisywania biblioteki z "jutuba", aczkolwiek sprawdziłem kod dwukrotnie, i wydaje mi się, że niczego nie pominąłem...
W każdym razie jak ktoś ma czas, by zerknąć na kod, to będę wdzięczny. Wrzucam go poniżej, wraz z fragmentem schematu i zdjęciami wyświetlacza, którego mam.
Obrazek
Obrazek
Obrazek
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.


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

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

Proszę o pomoc, jeżeli to możliwe :)

EDIT: Czemu najlepsze pomysły przychodzą po wrzuceniu posta na forum?... W każdym razie okazało się, że trzeba dać zarówno "controle" w write data i command, jak i korzystać z DC. Wk odzie powyżej, jak możecie zauważyć, jest obsługa tylko DC, a controle są zakomentowane. Odkomentowanie controli poprawnie inicjalizuje ekran, aczkolwiek chwilowo nie działa mi wypisywanie zawartości ramu na ekran, ale to już inny problem..



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 wrz 2016, o 09:27 
Offline
Użytkownik

Dołączył(a): 05 lis 2013
Posty: 353
Lokalizacja: Kraków
Pomógł: 6

Witajcie.

Przerabiam jeszcze raz filmiki z biblioteką SSD1306 (wcześniej podłączałem Atnelowski OLED pod I2C) i chce dodać bibliotekę SSD1309 oraz RS0010 po SPI.
Ale mam pytanie u podstaw.
Jeśli przesyłamy do kontrolera liczbę hex np 0x81 to skąd kontroler wie że to dotyczy kontrastu (przecież kontrast się reguluje w zakresie od 0x00 do 0xFF) i dalej jeśli przesyłamy 0xAE to skąd ma wiedzieć że ma wyłączyć wyświetlacz czy 0xAF włączyć.
Czyżby ważna jest kolejność przesyłania bajtów (w bibliotece co pokazano wyżej jest inna kolejność niż na rysunku z datasheetu). Dla SSD1306 w datasheet jest Figure 2 : Software Initialization Flow Chart i pokazana kolejność
1. SET Mux Ratio 0xA8, 0x3F
2. SET Display Offset 0xD3, 0x00
3. Set Display Start Line 0x40
4. Set Segment re-map 0xA0 lub 0xA1
5. Set COM Output Scan Direction 0xC0 lub 0xC8
6. Set COM Pins hardware configuration 0xDA , 02 ????
7. Set Contrast Control 0x81, 0x7F
8. Disable Entire Display On 0xA4
9. Set Normal Display 0xA6
10. Set Osc Frequency 0xD5, 0x80
11. Enable charge pump regulator 0x8D, 0x14
12. Display On 0xAF



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

Dołączył(a): 11 mar 2014
Posty: 1475
Pomógł: 167

Przesyłasz komendy, które są dokładnie zdefiniowane. Jest to opisane w DS do wyświetlacza. Niektóre komendy wymagają dodatkowego argumentu (lub kilku).
Część komend musi być wysłana w odpowiedniej kolejności by zainicjalizować wyświetlacz. Wysłanie w innej kolejności może powodować brak poprawnego ustawienia odpowiedniego trybu pracy. Jednak ten wyświetlacz nie jest tak ortodoksyjny i dopuszcza możliwości inicjowania różną kolejnością komend o ile zachowane zostaną przy niektórych komendach kolejności.

--
Pozdrawiam,
Robert

PS. Ja w swojej bibliotece mam też trochę inną kolejność a nawet inny zestaw komend do inicjalizacji niż w wersji Mirkowej. Ale obie wersje działają :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 wrz 2016, o 10:16 
Offline
Użytkownik

Dołączył(a): 05 lis 2013
Posty: 353
Lokalizacja: Kraków
Pomógł: 6

Dziękuję za odpowiedź, ale nie rozumiem tego.
Przykładowe komendy z SSD1309
Obrazek
i przykładowa funkcja z postu kolegi wyżej
Kod:
void ssd1306_init(uint8_t vcc, uint8_t refresh){
       ...
        ssd1306_cmd(SSD1306_DISPLAYOFF);
        ssd1306_cmd(SSD1306_SETDISPLAYCLOCKDIV);


przecież wysłanie
ssd1306_cmd(SSD1306_DISPLAYOFF) jest równoznaczne z ssd1306_cmd(0xAE)
i odpowiednio
ssd1306_cmd(SSD1306_SETDISPLAYCLOCKDIV) to ssd1306_cmd(0xD5);

gdzie tutaj jest podany adres pamięci gdzie ma być zapisane 0xAE oraz 0xD5?
tak samo w tabeli - gdzie jest zapisany adres pod który mamy wpisać przykładowe 0x81 czy 0xA4?

------------------------ [ Dodano po: 24 minutach ]

Chyba zaczynam coś łapać
jak wyślę komendę A4/A5 to bity D1-D7 są jakby rejestrem, a D0 jest wartością i tutaj może przybrać 0 lub 1 czyli w hex A4 i A5

pozostaje ta nieszczęsna komenda do kontrastu. Skoro wyślę 0x81 to kontroler nic nie ustawi tylko przygotuje się do następnej komendy która tutaj będzie wartością oraz która może być od 1 do 256
więc
wysyłając 0x81 (co odpowiada jako rejestr) a potem A4 jako wartość to wtedy będzie działać.
Ale jak po komendzie 0x81 nie wyślemy wartości to następną komendę przyjmie jako wartość - czy dobrze rozumuję?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 wrz 2016, o 10:46 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 26 sty 2016
Posty: 1148
Lokalizacja: Kraków
Pomógł: 93

A to nie jest tak, że wysyłasz 0x81, co jest równoznaczne z poleceniem "set contrast", a następnie wysyłasz wartość kontrastu (od 0 do 255).
Wysłanie (samego) A4 lub A5 to polecenie "Entire Display" (0xA5 oznacza ON, 0xA4 oznacza OFF)
Dobrze myślę?



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

Dołączył(a): 11 mar 2014
Posty: 1475
Pomógł: 167

Marhef napisał(a):
Dobrze myślę?
Dobrze myślisz :)

--
Pozdrawiam,
Robert



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 wrz 2016, o 13:21 
Offline
Użytkownik

Dołączył(a): 05 lis 2013
Posty: 353
Lokalizacja: Kraków
Pomógł: 6

OK - to teraz żeby wysłać wartość drugiego bajtu w celu ustalenia kontrastu to tak można?
Kod:
ssd1306_cmd(0x81);
ssd1306_data(wartość);



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 wrz 2016, o 14:19 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 mar 2014
Posty: 1475
Pomógł: 167

Oba elementy wysyłasz jako komendę (ssd1306_cmd()):
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


--
Pozdrawiam,
Robert



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 wrz 2016, o 14:34 
Offline
Użytkownik

Dołączył(a): 05 lis 2013
Posty: 353
Lokalizacja: Kraków
Pomógł: 6

Dzięki za odpowiedź.
To się 2 rzeczy wyjaśniły
w inicjalizacji było
6. Set COM Pins hardware configuration 0xDA , 02 ????
czyli to 02 to wartość do rejestru DA



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 31 sty 2017, o 18:59 
Offline
Użytkownik

Dołączył(a): 19 gru 2012
Posty: 712
Lokalizacja: Opole
Pomógł: 23

A że tak odkopię temat i zapytam sie czy ktoś napisał obsługę menu wielopoziomowego na ssd1306?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 31 sty 2017, o 20:06 
Offline
Moderator
Avatar użytkownika

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

Wilu88 napisał(a):
A że tak odkopię temat i zapytam sie czy ktoś napisał obsługę menu wielopoziomowego na ssd1306?


A kolega na prawdę sądzi, że jest w ogóle coś takiego jak:

"menu wielopoziomowe na ssd1306"

albo w ogóle jakiekolwiek

"menu na ssd1306"

albo np:

"menu na LCD NOKIA"

albo

"menu na LCD TFT3,5"

albo

"menu na wyświetlacz VFD"


... absolutnie tu się nie przekomarzam ani nie mam zamiaru ironizować czy coś w tym stylu ... tylko poważnie pytam - czy kolega sobie wyobraża że może być coś takiego ?

Ja już pomijam fakt, że sprawa MENU to przede wszystkim CO PROGRAMISTA to inny wygląd, ale też kompletnie inna zasada działania ... i nie jest to przypadkiem, bo zdecydowanie zależy np od potrzeb KONKRETNEGO projektu a poza tym od mikrokontrolera, ilości pamięci - no mnóstwa jeszcze czynników

Toż to nie jest napisanie jakiegoś np MENU jak to się kiedyś pisało do programów pod MS DOS, albo pod Windows - gdzie KAŻDY ma ten sam system i monitor i kwestia tylko skoncentrowania się na wyglądzie ... no bo sprzęt ten sam

Tymczasem tutaj KAŻDY ma inny sprzęt - więc NAWET - nawet jeśli ktoś pokaże ci jak on zorganizował swoje MENU do swojego projektu to zwykle się okaże że tobie nie będzie to zupełnie pasować ... i tak można chodzić po necie i przeglądać tysiące projektów ... Ja jestem gotów się założyć o skrzynkę zacnego trunku - że nie ma czegoś takiego jak UNIWERSALNE menu dla obojętnie jakiego mikrokontrolera ... no nie ma i być nie może - chyba że się wszyscy umówią że działają na IDENTYCZNYM sprzęcie i podobnych zasobach a nawet projekcie

CAŁKIEM inną sprawą może być poszukiwanie sposobu na poszukiwanie np mechanizmu na tzw listy jedno- albo dwu-kierunkowe tworzone za pomocą struktur w C, gdzie pola struktury opisują np pozycje MENU zaś wskaźniki (jeśli dwa) to wskazują na punkt wejścia i wyjścia ze struktury do kolejnej wyższej albo niższej żeby zapewnić samo poruszanie się .... ale co z tego ... to jest tylko kropla

a weź to teraz ubierz w jakąś grafikę zależną od wyświetlacza np czy menu poziome czy pionowe, czy w stylu listy plików czy może jeszcze inne

no są tu mega tysiące możliwości rozwiązań ....


ale też jest tak - że może ja się mylę - bo często to powtarzam dziwiąc się gdy ktoś pyta o menu na mikrokontroler a zadaje takie pytanie nawet w oderwaniu od rodzaju wyświetlacza albo tak jak kolega - pyta o menu nawet pod konkretny wyświetlacz (sterownik) jakby to miało jakieś znaczenie albo miałoby to wpływ na to, że można zrobić jedno uniwersalne MENU dla wszystkich posiadaczy tego sterownika na świecie ... Mi wydaje się że tak się nie da .. ale jak mówię wydaje mi się - i może ktoś będzie miał inny pomysł w tym zakresie

już nie wspomnę, że jeśli chodzi o wygląd to na wyświetlaczach graficznych można robić to graficznie a nie tekstowo a wtedy jeszcze większa maniana jeśli chodzi o pomysł na własną organizację UI (User Interface) ....

-----------------------------------------

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


to taki na szybko z ręki i być może bez sensu przykład podstawowej struktury dla rozpoczęcia realizacji w ogóle poruszania się po Menu a nie samego menu ... Teraz tylko trzeba stworzyć pozycje MENU i odpowiednio przygotować wskaźniki dla poruszania się do przodu i do tyłu ...

no ale to też trzeba byłoby sobie porozpisywać sporo i nadal nie miałbyś pewnie odpowiedzi - JAK ZROBIĆ MENU pod ssd1306 bo to nie ma na tym etapie NIC wspólnego ze sprzętem - ja mówię tylko o tzw warstwie abstrakcyjnej - którą najpierw trzeba solidnie przygotować, a DOPIERO potem ew zabrać się za całą KOBYŁĘ jaką jest np zabawa w wymyślenie UI dla takiego MENU na LCD które tobie akurat by odpowiadało

_________________
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: 31 sty 2017, o 20:11 
Offline
Użytkownik

Dołączył(a): 19 gru 2012
Posty: 712
Lokalizacja: Opole
Pomógł: 23

Mirku doskonale zdaje sobie sprawę że czy to taki wyświetlacz czy inny to mechanizm jest ten sam. Chodziło mi bardziej o podpatrzenie gotowego projektu na wyświetlaczu wielolinijkowym bo do tej pory bawiłem się tylko wyświetlaczami 2 wierszowymi. Ale masz pewnie racje że zbyt wiele czynników wpływać będzie na to że dany projekt nie będzie się nadawał w innym wypadku.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 31 sty 2017, o 21:03 
Offline
Moderator
Avatar użytkownika

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

Tzn nie - no podpatrywanie projektów to jak najbardziej jest zawsze wskazane - sam tak robię gdy mogę coś znaleźć w sieci ... i podpatrzeć - bo też zwykle lubię coś po swojemu zrobić - a zaczerpnąć tylko pomysły. Czasem też wpadnie się w ogóle na fajne techniki programowania które później warto wykorzystać u siebie

_________________
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: 31 sty 2017, o 22:12 
Offline
Użytkownik

Dołączył(a): 19 gru 2012
Posty: 712
Lokalizacja: Opole
Pomógł: 23

dambo napisał(a):
Są przecież na forum ciekawe projekty odnośnie menu na wyświetlaczach:
- tutaj mamy aplikację do generowania: topic12164.html
- a tu mój przykład do menu na OLEDzie: topic8573.html - kilka osób z tego co wiem z tego korzystało z powodzeniem


Dziękuję koledze właśnie o taki temat mi chodziło ;) Z ogromną chęcią przetestuje :)



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: 105 ]  Przejdź na stronę Poprzednia strona  1, 2, 3, 4

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 0 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