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



Teraz jest 30 mar 2026, o 21:15


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 15 ] 
Autor Wiadomość
PostNapisane: 4 paź 2015, o 18:40 
Offline
Użytkownik

Dołączył(a): 18 lip 2014
Posty: 69
Pomógł: 0

Dobry wieczór,

Zabrałem się dzisiaj za pisanie sterownika LCD z pomocą niebieskiej książki. Niestety po wgraniu programu do mikrokontrolera, na wyświetlaczu widzę jedynie 2 wiersze czarnych kwadratów. Przeglądałem kod i nawet znalazłem kilka błędów, ale niestety ich eliminacja nic nie pomogła.

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

bardzo prosiłbym o pomoc w rozwiązaniu problemu. Sposób podłączenia do mikrokontrolera podany jest w pierwszym komentarzu. Całość podłączona jest do portu D.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 paź 2015, o 18:47 
Offline
Użytkownik

Dołączył(a): 26 lip 2015
Posty: 269
Pomógł: 34

O kurde. Wiesz co jak masz bluebooka i przerabiasz go po kolei to powinieneś umieć dzielić projekt na pliki. Kiedy tego nie robisz to ciężko będzie znaleźć babola nam i tobie.Spróbuj podzielić projekt na pliki a gwarantuje ci że lepiej będzie to wyglądać i szybciej my i ty znajdziemy błąd.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 paź 2015, o 18:55 
Offline
Użytkownik

Dołączył(a): 06 maja 2014
Posty: 415
Lokalizacja: Kraków
Pomógł: 26

2 czarne wiersze mówisz ?
Próbuj zmienić kontrast - może tak zaczerniłeś, że nic nie widać :D



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 paź 2015, o 19:39 
Offline
Użytkownik

Dołączył(a): 18 lip 2014
Posty: 69
Pomógł: 0

Nie wiem czy dzielenie na pliki coś pomoże, bo właściwie cały ten program jest do obsługi LCD i nie wiem za bardzo na jakiej zasadzie dzielić to na pliki. Cały program jest po kolei napisany wg niebieskiej książki. Mimo to usunąłem nieużywane funkcje i dodałem więcej komentarzy. Mam nadzieję, że program jest bardziej czytelny:

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


Jeśli chodzi o kontrast, to jest podłączony do masy. Uruchamiałem program Pana Mirka i ładnie widać litery.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 paź 2015, o 22:40 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 sty 2013
Posty: 1760
Pomógł: 196

Witam
To jeszcze nie wszystko, ale
Loreno napisał(a):
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

nie tak się ustawia wejście - brakuje tyldy.

Pozdr.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 paź 2015, o 06:01 
Offline
Użytkownik

Dołączył(a): 18 lip 2014
Posty: 69
Pomógł: 0

kicajek napisał(a):
Witam
To jeszcze nie wszystko, ale
Loreno napisał(a):
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

nie tak się ustawia wejście - brakuje tyldy.

Pozdr.


Kolego, mnie się wydaje, że ta linijka jest poprawna. Chcę ustawić 4 najmłodsze bity jako wejścia, więc robię iloczyn logiczny z 0xF0.
DDRD & 0xF0 = xxxx0000 (4 najstarsze bity zostają te takie same jak przed wykonaniem operacji iloczynu logicznego)



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

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

Tak ale zobacz co kolega wyżej napisał przed 0xF0 brakuje tyldy

Powinno być ~0xF0

Namazane ze smarta.

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 paź 2015, o 08:33 
Offline
Użytkownik

Dołączył(a): 22 sty 2014
Posty: 1806
Zbananowany użytkownik

Pomógł: 168

majster napisał(a):
Powinno być ~0xF0


Nie prawda. Rozpisz to sobie. Miało by to racje bytu gdyby kolega napisał coś takiego:

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


------------------------ [ Dodano po: 5 minutach ]

powiedzmy że chcemy ustawić PIN PD0 jako wejśce, dajemy więc taki zapis:

DDRD &= ~(1<<PD0)

co po rozpisaniu wygląda tak:

DDRD = DDRD & ~0b00000001;

Czyli:

DDRD = DDRD & 0b11111110;

czyli wyzeruje się tylko ostatni bit. jeżeli kolega zapisał

DDRD &= OxF0

to automatycznie oznacza to:

DDRD = DDRD & 0b11110000

czyli wyzerował 4 ostatnie bity a zatem ustawił je jako wejscia.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 paź 2015, o 08:42 
Offline
Użytkownik

Dołączył(a): 18 lip 2014
Posty: 69
Pomógł: 0

majster napisał(a):
Tak ale zobacz co kolega wyżej napisał przed 0xF0 brakuje tyldy

Powinno być ~0xF0

Namazane ze smarta.


Czy mógłby kolega podać poprawną postać funkcji data_dir_in()?

Nie do końca rozumiem w czym tkwi problem. W swojej funkcji zeruję 4 najmłodsze bity rejestru DDRD, czyli ustawiam 4 najmłodsze piny portu D jako wejścia.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 paź 2015, o 08:51 
Offline
Użytkownik

Dołączył(a): 22 sty 2014
Posty: 1806
Zbananowany użytkownik

Pomógł: 168

Loreno napisał(a):
zy mógłby kolega podać poprawną postać funkcji data_dir_in()?


o ile linie danych Twojego LCD są podłączone do pinów PD0 - PD3 to ta funkcja jest ok



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 paź 2015, o 09:03 
Offline
Użytkownik

Dołączył(a): 18 lip 2014
Posty: 69
Pomógł: 0

Nefarious19 napisał(a):
Loreno napisał(a):
zy mógłby kolega podać poprawną postać funkcji data_dir_in()?


o ile linie danych Twojego LCD są podłączone do pinów PD0 - PD3 to ta funkcja jest ok


Są tak podłączone (sposób podłączenia napisałem w pierwszym komentarzu programu).

Błąd ukryty jest więc gdzieś indziej. Mam nadzieję, że Koledzy pomożecie mi go znaleźć.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 paź 2015, o 16:20 
Offline
Użytkownik
Avatar użytkownika

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

Loreno napisał(a):
Błąd ukryty jest więc gdzieś indziej. Mam nadzieję, że Koledzy pomożecie mi go znaleźć.


Sprawdzałeś czy sam LCD działa ?? Masz BB wgraj Mirka biblioteki i zobacz czy coś się wyświetla na LCD bo może sam on jest ubity ?

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 paź 2015, o 16:59 
Offline
Użytkownik

Dołączył(a): 18 lip 2014
Posty: 69
Pomógł: 0

majster napisał(a):
Loreno napisał(a):
Błąd ukryty jest więc gdzieś indziej. Mam nadzieję, że Koledzy pomożecie mi go znaleźć.


Sprawdzałeś czy sam LCD działa ?? Masz BB wgraj Mirka biblioteki i zobacz czy coś się wyświetla na LCD bo może sam on jest ubity ?


Już tak robiłem i działa z programem Pana Mirka.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 paź 2015, o 17:39 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 09 gru 2014
Posty: 1540
Pomógł: 269

Cytuj:
Błąd ukryty jest więc gdzieś indziej. Mam nadzieję, że Koledzy pomożecie mi go znaleźć.


Po kilku poprawkach (postaraj się je znaleźć samemu - porównaj z Twoim kodem):

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


------------------------ [ Dodano po: 46 minutach ]

A niżej masz to samo, ale z podziałem na pliki ;) :
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.


lcd.c:

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


lcd.h:

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


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 paź 2015, o 19:05 
Offline
Użytkownik

Dołączył(a): 18 lip 2014
Posty: 69
Pomógł: 0

@anshar - Wielkie dzięki! Z Twoją pomocą program zaczął w końcu działać. Niestety jednak nie do końca rozumiem dlaczego. Wiem, że problemem okazała się być funkcja lcd_read_half(). Nie wiem jednak dlaczego moja wersja tej funkcji była niepoprawna.
Moja wersja:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


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


Różnica jest taka, że ja w swojej funkcji zeruję 4 najstarsze bity zmiennej _odczyt (gdyż tak na prawdę interesują nas tylko 4 najmłodsze bity, bo odczytujemy tu połowę bajtu), a @anshar zostawia te bity. Co to zmienia?

Oprócz tego nie rozumiem

dlaczego w funkcji lcd_init występuje ustawienie portu D z sumą logiczną.
Moja wersja:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


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



Dzięki za podział na pliki. Chciałem to zrobić na koniec kiedy już mój sterownik będzie kompletny. Dodam jeszcze kilka funkcji.



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