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



Teraz jest 29 mar 2024, o 15:13


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 15 ] 
Autor Wiadomość
PostNapisane: 29 paź 2017, o 10:34 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 04 lut 2013
Posty: 257
Lokalizacja: Racibórz
Pomógł: 0

Napisałem nowy wątek ponieważ chciałbym zrozumieć zasadę działania funkcji zmiany kierunku scrollowania fontów na moim panelu czterech wyświetlaczy LED 8X8 z układami MAX7219.
Od razu zacznę od tego że nie chodzi mi o podanie gotowców ani o odsyłenie do przeczytania książek i do google ale o pomoc w zrozumieniu działania pewnych funkcji nie mojego autorstwa które przerobiłem sobie z Arduino-dostosowałem w c avr.
Tyle na wstępie teraz zacznę od konkretów.
Obecnie mój połączony kaskadowo wyświetlacz pokazuje tekst scrollowany od dołu w górę a ja chciałbym to zmienić tak abym mógł przesuwać np. w lewo lub prawo.
Podam kilka funkcji z mojego programu i proszę o pomoc w zrozumieniu co odpowiada za kierunek przesuwania tekstu.
Na razie nie będę to przedstawiał całego kodu ale tylko funkcję które jak mi się wydaje mogą mieć związek z moim problemem.
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 jak potrzeba o dodatkowe pytania oraz oczywiście o pomoc w zrozumieniu co i w której funkcji odpowiedzialne jest za kierunek scrollowania bo tylko o sposób zmiany kierunku mi chodzi.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 paź 2017, o 12:23 
Offline
Użytkownik

Dołączył(a): 25 lip 2013
Posty: 2561
Pomógł: 126

Zacznij od narysowania sobie mapy pamięci ekranu czyli w jakim bajcie bufora znajduje się każdy piksel. Bez tego nie ma co iść dalej.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 paź 2017, o 12:54 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 04 lut 2013
Posty: 257
Lokalizacja: Racibórz
Pomógł: 0

Zastosowałem się do Twojej uwagi. Wstawiam screena z mapą bitowa mojego LED.

Obrazek

Proszę o dalszą pomoc co robimy dalej:-)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 paź 2017, o 13:09 
Offline
Użytkownik

Dołączył(a): 25 lip 2013
Posty: 2561
Pomógł: 126

Rozpisz pozostałe rzędy. Dopóki nie będzie wiadomo jak ułożone bajty w stosunku do wyświetlacza oraz bity (również to gdzie najmłodszy a gdzie najstarszy) w tych bajtach to nic dalej nie zrobimy.
Obejrzyj filmik Mirka nt. Magic Matrixa - tam też były tego typu informacje - dotyczące organizacji.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 paź 2017, o 14:05 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 04 lut 2013
Posty: 257
Lokalizacja: Racibórz
Pomógł: 0

Pozostałe rzędy to dokładnie tak jak na tym zdjęciu pojedyńczego led 8X8.
Jak znajdę troszkę czasu to obejrzę filmik.MK.

Obrazek

Wyświetlacz składa się z takich czterech LED każdy ma w sobie układ MAX7219.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 paź 2017, o 15:06 
Offline
Użytkownik

Dołączył(a): 18 kwi 2013
Posty: 181
Lokalizacja: Kraków
Pomógł: 30

Koledze micky nie chodziło o schemat matrycy LED tylko o sposób podłączenia do sterownika MAX7219 i dokładniej o ułożenie bajtów i bitów przesyłanych do wyświetlacza. Powiedzmy, że wysyłasz bajt 0b01100001 do drugiego rejestru układu MAX7219. To które piksele zapalają się w Twojej matrycy?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 paź 2017, o 18:18 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 04 lut 2013
Posty: 257
Lokalizacja: Racibórz
Pomógł: 0

Proszę jeszcze o sprecyzowanie co znaczy drugi rejestr układu MAX7219??,abym mógł tam przesłać poprzez SPI tej przykładowy bajt 0b01100001 i dowiedzieć się co się zapali na wyświetlaczu LED.
Tu mam opisane wszystkie rejestry które wykorzystuję,czy chodzi o rejestr #define OP_DIGIT0 1 o wartości 1?

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


A jeśli nie o to chodzi to proszę o sprostowanie.

Myślę że jak podam więcej szczegółów i kod programu będzie wszystkim łatwiej się porozumieć.
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.


max7219_8x8.c

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


max7219_8x8.h

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


Powiedzmy ze jak wyślę bajt 0b01100001 do rejestru funkcją displayMessage to na wyświetlaczu LED zaświecą się diody.
Obrazek
i będą się przesuwać z dołu do góry a następnie znowu od dołu do góry na następnym wyświetlaczu.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 paź 2017, o 08:37 
Offline
Użytkownik

Dołączył(a): 18 kwi 2013
Posty: 181
Lokalizacja: Kraków
Pomógł: 30

Cytuj:
Proszę jeszcze o sprecyzowanie co znaczy drugi rejestr układu MAX7219?

Chyba powinieneś zaglądnąć do noty pdf układu MAX7219, żeby zobaczyć jak on działa.
Podpowiem tylko, że w tym trybie jaki jest zastosowany w Twoim projekcie, aby cokolwiek wyświetlić, trzeba przesłać najpierw nr rejestru do którego będziemy zapisywali dane, a następnie tą daną do wyświetlenia. Masz tam nawet napisaną funkcję do tego:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Rejestry są numerowane od 1 do 8 i właśnie chodziło o to, jak one mają się do podłączenia samego wyświetlacza.
Jak widać z obrazka, który zamieściłeś, u Ciebie przesyłanie danych ułożone jest rzędami od dołu do góry. Na samym dole jest rząd, który odpowiada danej z rejestru 1 układu MAX7219. Widać też , że orientacja bajtu jest taka: najstarszy bit po lewej stronie , najmłodszy po prawej. I to jest odpowiedź na pytanie o mapę pamięci obrazu.
Teraz trzeba by stworzyć funkcję, która wyświetli pojedynczy piksel na określonych współrzędnych ekranu. Jeśli uda Ci się to zrobić, to będzie otwarta droga do wyświetlania znaków alfanumerycznych i innych np. jakichś figur geometrycznych.
Scrolowanie zostawimy na koniec.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 paź 2017, o 19:10 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 04 lut 2013
Posty: 257
Lokalizacja: Racibórz
Pomógł: 0

Myślę że stworzyłem taką funkcje dla wyświetlania pojedynczego piksela na współrzędnych ale od 0 do 7.
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


i wpisująć np: do tej funkcji w pętli while
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


zapala mi się dioda na każdym wyświetlaczu taka sama czyli w wierszu zerowym (czyli pierwszym) w kolumnie 7 (czyli w szóstej) tak jak na fotce.
Obrazek

Proszę o pomoc co dalej robimy:-)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 31 paź 2017, o 16:06 
Offline
Użytkownik

Dołączył(a): 18 kwi 2013
Posty: 181
Lokalizacja: Kraków
Pomógł: 30

Widzę, że adaptujesz wciąż funkcje z arduino. Ale niestety przy Twoim układzie matryc one nie zadziałają poprawnie. Są na rynku dwa rodzaje modułów z matrycami LED 8x8 sterowane przez układ MAX7219. Różnią się one ustawieniem samej matrycy (przestawione są one o 90 stopni). W związku z tym jeśli łączysz kilka modułów i chcesz stworzyć z nich jeden większy wyświetlacz musisz zastosować odpowiednie oprogramowanie niestety różne dla każdego rodzaju modułu wyświetlacza. W pierwszym poście prosisz, żeby Cię nie odsyłać do książek ale nie oczekujesz też gotowca. I to są chyba prośby nie do pogodzenia. Bez zapoznania się ze sposobami tworzenia obrazów w buforze, tworzenia wzorów fontów w pamięci mikrokontrolera i na koniec przesyłaniem całego bufora obrazu na wyświetlacz, ciężko będzie do czegoś dojść. Właściwie to we wszystkich Mirkowych książkach jest to w jakimś zakresie opisywane, choć nie ma konkretnie mowy o układach MAX7219. Ale to tylko kwestia jednej funkcji, która wyśle bufor wyświetlacza do układów matryc, reszta pozostaje aktualna dla praktycznie wszystkich rodzajów wyświetlaczy matrycowych. Tak więc książki , to jednak podstawa dalszych działań.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 31 paź 2017, o 17:08 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 04 lut 2013
Posty: 257
Lokalizacja: Racibórz
Pomógł: 0

Muszę Ci przyznać rację, zauważyłem że muszę rozpocząć pisanie swojego kodu w C-AVR od podstaw a nie męczyć się i zgadywać co autor miał na myśli w kodzie adoptowanym z arduino.
Już rozpocząłem nowy projekt w Eclipse od podstaw zaczynając od dateshita Max 7219.
Jak poczytam więcej i obejrzę poradniki to może poradzę sobie sam z tym kodem.
Szkoda że niema nigdzie w sieci porządnego poradnika dotyczącego tego układu i scrollowania wyświetlaczy LED 8X8 tak od podstaw,łopatologicznie dla mniej zaawansowanych czyli takich ja a:-)
Pomimo tego zachęcam Wszystkich forumowiczów do kolejnych wpisów na moim wątku,każda nawet drobna porada będzie mile widziana.:-)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 31 paź 2017, o 18:29 
Offline
Użytkownik

Dołączył(a): 25 lip 2013
Posty: 2561
Pomógł: 126

Scrollowanie nie jest takie trudne,ale musisz koniecznie zrozumieć jak jest zorganizowany bufor pamięci obrazu. Jaki bajt i bit odpowiada jakiemu pixelowi obrazu. Bez tego sie nie obejdzie. Zresztą pisałem o tym wcześniej.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 31 paź 2017, o 19:17 
Offline
Użytkownik

Dołączył(a): 18 kwi 2013
Posty: 181
Lokalizacja: Kraków
Pomógł: 30

No to na początek jeszcze raz musisz pomyśleć nad funkcją, która zapala/gasi pojedynczy piksel. Ale nie w ten sposób , że na wszystkich wyświetlaczach się on powtarza. Masz cztery matryce 8x8 pikseli. Cały wyświetlacz ma zatem 32x8 pikseli. W układzie współrzędnych x, y, lewy dolny piksel ma współrzędne
(0, 0), lewy górny (0, 7), prawy dolny całego wyświetlacza (31,0), prawy górny (31, 7). Jakiś piksel w środku np. (15, 4). Jak zapalić poszczególne piksele, jak zgasić?
Powinieneś zadeklarować taką tablicę, która będzie odpowiadała wielkością Twojemu wyświetlaczowi, a więc coś w rodzaju
uint8_t LED_display[liczba_matryc * 8]
I to w tym buforze funkcja odpowiedzialna za włączenie/wyłączenie piksela powinna w odpowiednim miejscu wstawiać jedynkę lub zero.
Następnie druga podstawowa funkcja powinna cały ten bufor przesyłać do układów MAX7219.
Układy MAX7219 masz połączone kaskadowo, jeden za drugim. Zatem przesyłane do nich dane przekazywane są kolejno od pierwszego do ostatniego wyświetlacza. Czyli jednym ze sposobów jest zapisywanie kolejno całych wierszy wyświetlacza od najniższego do najwyższego.
Pomyśl jak zorganizować dane w buforze i jak je potem wysłać. To jest podstawa.
Acha i w tej funkcji ustawiającej jakiś piksel wstaw zabezpieczenie, gdyby ktoś chciał zapalić/zgasić piksel gdzieś poza rozmiarami bufora wyświetlacza.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 lis 2017, o 23:01 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 04 lut 2013
Posty: 257
Lokalizacja: Racibórz
Pomógł: 0

Muszę nad tymi funkcjami głębiej pomyśleć.
Na razie u mnie jest wszystko odwrócone o 90 stopni według tego co pisałeś powyżej no i niewiem jak wyświetlić led tylko na danym wyświetlaczu.
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 lis 2017, o 22:27 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 04 lut 2013
Posty: 257
Lokalizacja: Racibórz
Pomógł: 0

Mam problem w jaki sposób zapalić diodę tylko na jednym wyświetlaczu w tej funkcji .
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


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


Wyświetla mi się dioda o współrzędnych 0,0 (prawy górny róg) na wszystkich czterech wyświetlaczach,w jaki sposób zmienić to żeby wyświetlała tylko na pierwszym?



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: 15 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

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