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



Teraz jest 16 lut 2025, o 16:55


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 10 ] 
Autor Wiadomość
PostNapisane: 20 wrz 2016, o 17:51 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 04 cze 2014
Posty: 855
Lokalizacja: pod Warszawą
Pomógł: 58

cześć Koledzy

Jakiś czas temu zrobiłem sobie wyświetlacz z 12 matryc led 8x8.
Matryca działa , wyświetla płynący napis - problem pojawił się w momencie gdy chciałem podmienić wyświetlany tekst

Obrazek

Obrazek

na załączonych zdjęciach widać przed literą "D" dodatkowe piksele i nie mam pojęcia skąd się biorą.

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


i jest to wyświetlanie prawidłowe
Natomiast w drugim powołuję sobie zmienną "Napis" i przed funkcją "put String" przypisuję Napis=Napis2
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



funkcje wyświetlające

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


W zakładce console nie mam błędów natomiast w liniach 27 i 28 są żółte wykrzykniki z komunikatami
27 - assignment makes integer from pointer without a cast
28 - passing argument 2 of 'putStringP' makes pointer from integer without a cast
czyli coś mu nie pasuje z adresami wskaźnika, ale nie mogę tego zrozumieć.

Napisy chciałbym podmieniać po np.naciśnięciu przycisku i zastanawiam się czy użycie słynnego " if (! (PIND..." w pętli głównej załatwi sprawę i jak wtedy te napisy podmienić bo wyrażenie "Napis=Napis2" w pętli głównej nie zadziała.

pozdrawiam Marek

_________________
Pomóżcie mi stanąć na nogi



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

Dołączył(a): 17 sie 2013
Posty: 3797
Lokalizacja: Grudziądz
Pomógł: 143

Przed wyswietleniem nowego napisu wygac matryce i wyczysc bufor. Dopiero po tych czynnosciach wyswietl nowy napis.

Wysłane z mojego LIVE przy użyciu Tapatalka


Autor postu otrzymał pochwałę

_________________
Usługi druku przestrzennego - www.drumik.pl



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 wrz 2016, o 20:54 
Offline
Nowy

Dołączył(a): 16 maja 2016
Posty: 24
Pomógł: 3

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

napis jest wskaźnikem, a napis2 liczbą.


Autor postu otrzymał pochwałę


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

Dołączył(a): 29 lip 2014
Posty: 195
Pomógł: 44

Witam,

1.Po pierwsze zdefiniuj Napis jako wskaźnik na element typu char:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


2. Do elementów umieszczonych we flash-u możesz "się dobrać" za pomocą funkcji pgm_read_word(...) itd., ale one zwracają wartość elementu spod danego adresu, więc nie możesz tak po prostu pozyskać adresu Twojej tablicy Napis2. Musisz więc stworzyć dodatkową tablicę wskaźników do tablic ze stringami do wyświetlania. Czyli mamy tak:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


i teraz tworzymy wspomnianą tablicę wskaźników na te tablice:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


i teraz już jest "z górki" wystarczy, za pomocą pgm_read_word pozyskać element: Napis2, ew Napis3 itd:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


I teraz, kompilator, w swej niezmierzonej mądrości napisze nam przy kompilacji: warning: assignment makes pointer from integer without a cast [enabled by default] :-(((((.

Ale przecież, my jesteśmy mądrzejsi od kompilatora ;-), wiemy, że to co pozyskaliśmy, to na pewno wskaźnik do tablicy Napis2, więc wystarczy rzutowanie:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

i wreszcie mamy spokój. Ufff... dlatego, między innymi wolę ARM ;-).

Pozdrawiam serdecznie, QuadMan.

P.S. Sorry za formatowanie, coś się rozjechało.


Autor postu otrzymał pochwałę


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

Dołączył(a): 07 cze 2016
Posty: 563
Pomógł: 143

QuadMan napisał(a):
2. Do elementów umieszczonych we flash-u możesz "się dobrać" za pomocą funkcji pgm_read_word(...) itd., ale one zwracają wartość elementu spod danego adresu, więc nie możesz tak po prostu pozyskać adresu Twojej tablicy Napis2. Musisz więc stworzyć dodatkową tablicę wskaźników do tablic ze stringami do wyświetlania. Czyli mamy tak:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

i teraz już jest "z górki" wystarczy, za pomocą pgm_read_word pozyskać element: Napis2, ew Napis3 itd:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
I teraz, kompilator, w swej niezmierzonej mądrości napisze nam przy kompilacji: warning: assignment makes pointer from integer without a cast [enabled by default] :-(((((.

Ale przecież, my jesteśmy mądrzejsi od kompilatora ;-), wiemy, że to co pozyskaliśmy, to na pewno wskaźnik do tablicy Napis2, więc wystarczy rzutowanie:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


i wreszcie mamy spokój. Ufff... dlatego, między innymi wolę ARM


A nie prościej byłoby tak?
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Bez pgm_read_xxx(), pobierania adresu i rzutowania...
Po co się tak męczyć? ;)


Autor postu otrzymał pochwałę


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

Dołączył(a): 29 lip 2014
Posty: 195
Pomógł: 44

Witam,

Kolego andrews, pewnie że lepiej, ale już kiedyś ( dawno temu ) natknąłem się na problem opisany tu: http://forum.atnel.pl/topic15543.html i jakoś tak się złożyło, że wtedy nie miałem czasu się tym zajmować, więc odpuściłem sobie kwalifikator __flash na jakiś czas. Teraz w końcu do tego wróciłem i dzięki Tobie będę wreszcie miał bardziej "po ludzku" wyglądające kody na AVR.

Jeszcze raz, Serdeczne Dzięki !

Pozdrawiam, QuadMan.

P.S. Kurde, projekt miałem dalej robić..., a nie siedzieć na Forum ;-(.



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

Dołączył(a): 04 cze 2014
Posty: 855
Lokalizacja: pod Warszawą
Pomógł: 58

Dzięki Koledzy
powiedzcie mi jeszcze jak wyczyścić ten nieszczęsny bufor bo ja mam chyba jakieś zaćmienie. :oops:

_________________
Pomóżcie mi stanąć na nogi



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

Dołączył(a): 22 mar 2014
Posty: 32
Pomógł: 1

witam,
przejedź w pętli przez wszystkie komórki bufora i ustaw stan 0x00 lub 0xFF w zależności od tego jakim stanem wygaszasz diody na wyświetlaczu.

marcin_c



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

Dołączył(a): 10 lip 2015
Posty: 334
Pomógł: 32

Zainteresuj się funkcją memset().


Autor postu otrzymał pochwałę


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

Dołączył(a): 04 cze 2014
Posty: 855
Lokalizacja: pod Warszawą
Pomógł: 58

HomoChemicus napisał(a):
Zainteresuj się funkcją memset().


No właśnie przecież to takie oczywiste :D
dzięki

_________________
Pomóżcie mi stanąć na nogi



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

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 2 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:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO