Skocz do zawartości

Kurs STM32 - #10 - SPI w praktyce, wyświetlacz graficzny


Komentator

Pomocna odpowiedź

Hej.

Czy wiecie może jak naprawić by wszystkie dane jakie wpisuje do np. funkcji lcd_draw_text() nie były poprzesuwane w prawo? Nie mam pojecia dlaczego ale wszystko to co tutaj robilem z tym kursem było przesuwane (Poczynając od obrazka forbot do napisów forbot!) .

Link do komentarza
Share on other sites

RexJoker, czy to jest dokładnie ten sam moduł, który używany był w kursie? Wygląda jakbyś miał źle skonfigurowany moduł np. wybrany wyświetlacz o innej rozdzielczości.

Link do komentarza
Share on other sites

RexJoker, jeśli kupiłeś zestaw, to wyświetlacz na pewno jest odpowiedni. Hmm, do tej pory nikt nie zgłaszał tego problemu, więc gotowego przepisu nie mam, jak to rozwiązać. Sprawdzałem wszystkie kody i u mnie działały poprawnie. Podeślę zaraz temat do autora kursu - może będzie miał pomysł, w czym jest problem 🙂

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

RexJoker, ok - wracam po krótkiej naradzie 🙂 Wklej proszę swój program, który wgrywasz (dokładnie taki sam) + wypisz połączenia między wyświetlaczem, a płytką. Zrobię identycznie u siebie (bazując na Twoim opisie). Jeśli u mnie zadziała poprawnie, to będziemy wiedzieć, że winny jest LCD i go wtedy wymienimy 🙂

Link do komentarza
Share on other sites

Czy ktoś napotkał problem, w którym wyświetlacz pokazywał wszystko tj odwrócone ? Gdy próbuję wyświetlić obrazek, to wygląda tak jakby lewa strona zamieniła się z prawą. W przypadku obracającej się linii dzieje się już kompletny syf.

Link do komentarza
Share on other sites

B1LLy, witam na forum 🙂 Do tej pory nikt nie zgłaszał takich problemów. Czy korzystasz na pewno z tego samego wyświetlacza? Pytam, ponieważ nie widzę, aby na Twój adres email był zarejestrowany zestaw do tego kursu - stąd nie wiemy na czym dokładnie uruchamiasz przykłady 😉

Link do komentarza
Share on other sites

Nie chcę zakładać nowego tematu, bo problem dotyczy tego samego odcinka kursu i takiego samego sprzętu. Poza samym wyświetlaczem, który jest identyczny z tym z kursu (akurat jego nie kupowałem razem z STM, bo już taki miałem), cały sprzęt mam ze sklepu Botland, a i problem jest identyczny, jak w kilku przykładach wcześniej (np. napisy od połowy wyświetlacza). Jeśli ktoś już się uporał z problemem, zapewne i mnie mógłby pomóc.

Link do komentarza
Share on other sites

Oczywiście mogę założyć nowy temat, to nie jest problem.

Pisałem tutaj dlatego, że RexJoker i B1LLy w tym artykule wspominali o takim samym problemie, a zastosowany kod to wprost kopia z kursu "Kurs STM32 - #10 - SPI w praktyce, wyświetlacz graficzny". Obrazek, który dołączyłem, to oczywiście logo Forbot (zamienione stronami lewą i prawą).

Link do komentarza
Share on other sites

Problem z przesunięciem poziomym wyświetlacza rozwiązało ustawienie innego kontrastu. Nie mam pojęcia, dlaczego, ale zmiana kontrastu z 0x2f na np. 0x6f lub 0x7f rozwiązuje problem. Mniejsza wartość - przesunięcie w lewo; większa - w prawo.

Link do komentarza
Share on other sites

Cześć.

Czy moglibyście wyjaśnić mi jak działa funkcja lcd_draw_text?

void lcd_draw_text(int row, int col, const char* text)
{
 int i;
 uint8_t* pbuf = &lcd_buffer[row * 84 + col];
 while ((*text) && (pbuf < &lcd_buffer[LCD_BUFFER_SIZE - 6]))
	 {
		 int ch = *text++;
		 const uint8_t* font = &font_ASCII[ch - ' '][0];

		 for (i = 0; i < 5; i++)
			 {
				 *pbuf++ = *font++;
			 }
		 *pbuf++ = 0;
	 }
}

Podczas wywołania funkcji w następujący sposób lcd_draw_text(0, 0, "c"); na wyświetlaczu pojawia się litera c w pożądanym miejscu. Natomiast jeżeli chcę "wrzucić" w miejsce "c" jakąkolwiek zmienną char w rezultacie dostaje szlaczki. Przykładowo:

char x = "c";
lcd_draw_text(0, 0, x);

Trochę się tutaj zagubiłem i owszem, robię właśnie zadanie 10.2. 🙂

Link do komentarza
Share on other sites

Stała "c" w wywołaniu funkcji lcd_draw_text() nie jest typu char - użyłeś przecież cudzysłowu zamiast apostrofów a to nie to samo. Funkcja nie drukuje pojedynczych liter tylko ich ciągi (stringi) więc oczekuje wskaźnika na string. Te w języku C zakończone są bajtem 0. Powołując zmienną typu char i próbując wpisać do niej 2-bajtowy string zawierający literę c i bajt 0 już popełniasz błąd. A przekazując wartość zmiennej do funkcji robisz błąd już kolosalny. Oj, przydałoby się powtórzenie kursu C bo nie wygląda jakbyś rozumiał co się dzieje w Twoim programie.

To powinno być jakoś tak:

char x[] = "A kuku!";
lcd_draw_text(0, 0, x);

Tutaj masz tablicę znaków przechowującą string a tablice przekazywane są do funkcji (w C) właśnie poprzez wskaźnik, więc teraz samo x w argumencie wywołania oznacza wskazanie miejsca w pamięci a nie ten ciąg literek.

  • Pomogłeś! 2
Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.