Skocz do zawartości

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


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!) .

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.

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 🙂

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 🙂

  • 3 miesiące później...

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.

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 😉

  • 2 tygodnie później...

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.

Skoro działa inaczej, to widocznie nie jest identyczny. Wygląd zewnętrzny o niczym nie świadczy. Nie chcesz zakładać nowego wątku, to trudno, w końcu to nie my chcemy od ciebie pomocy.

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ą).

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.

  • 1 rok później...

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. 🙂

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

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...