dnorus pisze:Czołem miałem ostatnio laborkę - mieliśmy się na niej (sami:)) nauczyć obsługiwać LCD wykorzystując avr atmega128L i płytkę uruchomieniową EVBnet03 firmy Propox.
Oczywiście laborka zdana:) ale... LCD potrafiliśmy jedynie uruchomić wypinając go z płytki i podłączając go kabelkami do niej do konkretnych portów... zadaniem było żeby wykorzystać szynę do której był podpięty LCD (przynajmniej tak to zrozumiałem). Siedząc bite 1,5 h i widząc takie urządzenie pierwszy raz w życiu próbowałem to zmajstrować:d
Wiem jak działa ten LCD (bo na kabelkach go uruchomic potrafilem) jedyny problem z ta szyna i napisaniem do niej kodu.. w instrukcji plytki jest cos takiego:
Kod: Zaznacz cały
Wyświetlacz LCD podłaczono do magistrali danych mikrokontrolera. Sposób podłaczenia umozliwia
wykonywanie jedynie operacji zapisu do wyswietlacza, co jednak jest wystarczajace do jego obsługi. Wyjscie
SEL1 powinno by skonfigurowane jako strob zapisu. Wyswietlacz widziany jest w przestrzeni adresowej od
0xFF04 do 0xFF05, wybór pomiedzy rejestrem instrukcji a rejestrem danych wyswietlacza dokonywany jest
przy pomocy linii adresowej A0:
0xFF04 – rejestr instrukcji
0xFF05 – rejestr danych
Kwestia tego ze chyba nie potrafilem sie odwolac do tych rejestrow, wejsc i linni danych w samym kodzie C. Na kabelkach było to proste bo pisałem sobie np. #define PORTLCD PORTB i już mogłem odwołać się do portu B.. ale inaczej ani rusz:]
Dzieki z gory za pomoc..
W sumie, to nie napisałeś, czego oczekujesz, ale sądzę, że:
- masz napisane, że zapis pod adres 0xFF05 jest zapisem do modułu LCD do rejestru danych,
- zapis pod adres 0xFF04 jest zapisem do rejestru instrukcji.
Więc w swoim programie instrukcje sterujące odpowiednimi portami musisz zamienić na instrukcje zapisu do pamięci pod określone adresy. Najprościej można zrobić to tak:
Kod: Zaznacz cały
unsigned char * PortLCD ;
.....
PortLCD = ( unsigned char * ) 0xFF04 ;
* PortLCD = <cos tam> ;
Zapisałeś w ten sposób <coś tam> pod adres 0xFF04. Oczywiście należy pamiętać, by włączyć obsługę zewnętrznej pamięci RAM. Zakładam, że z punktu widzenia sprzętowego wszystko jest OK, ale być może konieczne okaże się włączenie dla tej pamięci dodatkowych taktów oczekiwania (nie piszesz z jakim kwarcem działa ten ATM128). Wg dokumentacji do modułów LCD minimalny czas trwania impulsu strobu wynosi 250 ns (piszę z pamięci, więc ewentualnie do zweryfikowania).
Można przeanalizować rozwiązanie
https://elportal.pl/index.php?module=Co ... y&ceid=358
Nie jest to identyczny wariant, ale ma trochę wspólnych cech.