avr problem z lcd

To forum jest dla wszystkich pasjonatów mikrokontrolerów AVR Atmela. Wymiana doświadczeń i pomoc dla początkujących w pisaniu programów zarówno w C, Asemblerze jak i BASCOM. Zapraszam znawców tematu, aby pomogli wszystkim początkującym!
ODPOWIEDZ
piotrekb
-
Posty: 9
Rejestracja: 14 gru 2005, 21:49

avr problem z lcd

Post autor: piotrekb » 02 mar 2006, 0:18

witam jest późno i byc moze nie myslę ale mam problem z lcd na płytce testowej, mianowicie po podłączeniu wyświetlacza (w zasadzie nie wazne czy podłaczony do uP czy tylko wsadzony w podstawkę) swieci sie na nim na czarno gorna linijka
zastanawim sie gdzie jest błąd, płytka troche stała nieuzywana ale kidys wszystko bylo ok, dzisiaj mialem zamiar wziac sie za nowy projekt , łączówki sprawdzalem po 20 razy, różne konfiguracje portow i caly czas nic

$regfile = "m8def.dat"
$crystal = 8000000


Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portd.2 , Db5 = Portd.3 , Db6 = Portd.4 , Db7 = Portb.5 , E = Portd.1 , Rs = Portd.0


jakies pomysły moze ktos ma dlaczego tak sie dzieje
pozdrawiam piotrek

Wojtek
Moderator
Posty: 2606
Rejestracja: 04 sie 2002, 19:00
Lokalizacja: --
Kontakt:

Post autor: Wojtek » 02 mar 2006, 6:53

A jak masz podłaczoną faktycznie płytkę i LCD, nie wiemy jakiej płytki testowej uzywasz?

yakuza
-
Posty: 38
Rejestracja: 10 sty 2006, 12:59
Kontakt:

Post autor: yakuza » 07 mar 2006, 16:07

Po podłączeniu zasilania(i ustawienai kontrastu) w wyświetlaczach zgodnych z HD44780 wyświetla się górna linijka. Dopiero po zainicjowaniu wyświetlacza gaśnie ten pasek, i można wysyłac mu rozkazy. Właściwie to ja mam taki sam problem tylko że na Atmedze16.
Gdy podłącze wyświetlacz do innego proca (AT90s2313) to wszystko jest cacy. Jestem w 99,9% pweny że wszysko jest dobrze podłączone (R/W do masy). Dlaczego tak się dzieje?

Awatar użytkownika
Koppel
Użytkownik
Posty: 500
Rejestracja: 24 lip 2005, 18:05
Lokalizacja: Gliwice

Post autor: Koppel » 07 mar 2006, 19:06

Nie korzystasz przypadkiem z JTAG'a? Jeśli dobrze pamiętam - domyślnie jest włączony i blokuje część wyprowadzeń. Jeśli z nich korzystasz - układ nie będzie działał prawidłowo. Ustaw na "niezaprogramowane" bity JTAGEN oraz OCDEN. Nie wszystkie procesory mają ten interfejs i w tych w których go nie ma - nie ma też "pułapki".

yakuza
-
Posty: 38
Rejestracja: 10 sty 2006, 12:59
Kontakt:

Post autor: yakuza » 07 mar 2006, 22:26

No to ustawiłem i dalej nie działa :(

Awatar użytkownika
Koppel
Użytkownik
Posty: 500
Rejestracja: 24 lip 2005, 18:05
Lokalizacja: Gliwice

Post autor: Koppel » 08 mar 2006, 9:43

A sam procek chodzi na pewno? Masz możliwość zrobienia nim czegoś prostego? Pomigania jakąś diodą? Jeśli tak - sprawdź czy na pewno działa. Jeśli masz możliwość "migania" postaraj się skonfigurować ją tak aby miganie odbywało się na przykład co sekundę. Jeśli zauważysz, że odbywa się za szybko - będzie to oznaczało, że coś nie tak w ustawieniach generatora zegarowego (wtedy opóźnienia są za krótkie i sterownik LCD gubi część komend). Jeśli w ogóle nie zauważysz migania - oznaczałoby to, że procek nie działa.

yakuza
-
Posty: 38
Rejestracja: 10 sty 2006, 12:59
Kontakt:

Post autor: yakuza » 08 mar 2006, 13:35

No więc jest tak: Dioda gdy jest ustawiony $crystal = 8000000 (takie mam kwarc), prawie wogóle nie miga. Gdy jest ustawiony $crystal = 1000000 to miga tak jak trzeba co 1s(LCD dalej nic). Przypuszczam że jest włączony wewnętrzny generator. Wiec jak ustawić (w PonyProg bo w bascomie nie odczytuje mi fusów) aby działał na rezonatorze kwarcowym?

Awatar użytkownika
Koppel
Użytkownik
Posty: 500
Rejestracja: 24 lip 2005, 18:05
Lokalizacja: Gliwice

Post autor: Koppel » 08 mar 2006, 14:24

Prawdopodobnie jest tak jak piszesz. Nie znam ustawień bezpieczników na pamięć. Zajrzyj do manuala ATmega16 na stronie ATMEL. Jest tam rozdział o programowaniu oraz nastawy wszystkich bezpieczników.

Tylko, że jeśli skonfigurowałeś już rezonator na taki jaki masz w rzeczywistości - LCD powinien ruszyć. Spróbuj może (tylko to wymaga nieco cierpliwości) odłączyć LCD i program przełączający wyprowadzenie połączone z D0, następnie D1... i tak dalej aż sprawdzisz wszystkie. Podepnij w tym miejscu diodę. Ja zwykle takie pomiary przeprowadzałem miernikiem (ustawienie na pomiar częstotliwości) - możesz spróbować i tak. Wykluczysz w ten sposób ewentualność, że:
a/. Coś zostało źle podłączone
b/. Któreś z wyprowadzeń jest skonfigurowane w nietypowy sposób.

yakuza
-
Posty: 38
Rejestracja: 10 sty 2006, 12:59
Kontakt:

Post autor: yakuza » 08 mar 2006, 16:26

Koppel pisze:Spróbuj może (tylko to wymaga nieco cierpliwości) odłączyć LCD i program przełączający wyprowadzenie połączone z D0, następnie D1... i tak dalej aż sprawdzisz wszystkie. Podepnij w tym miejscu diodę. Ja zwykle takie pomiary przeprowadzałem miernikiem (ustawienie na pomiar częstotliwości) - możesz spróbować i tak. Wykluczysz w ten sposób ewentualność, że:
a/. Coś zostało źle podłączone
b/. Któreś z wyprowadzeń jest skonfigurowane w nietypowy sposób.
Możesz troche jaśniej wytłumaczyć? Bo nie bardzo rozumiem. I nie mam miernika z pomiarem częstotliwości :(

Awatar użytkownika
Koppel
Użytkownik
Posty: 500
Rejestracja: 24 lip 2005, 18:05
Lokalizacja: Gliwice

Post autor: Koppel » 08 mar 2006, 19:49

Więc dokładniej. Masz wyprowadzenie do którego podłączasz wejście RS wyświetlacza (nie wiem które to będzie w Twoim przypadku, ale mam nadzieję, że sprawa jest jasna). Wybierasz to wyprowadzenie i piszesz prosty programik który ma migać dołączoną do niego diodą. W jego miejscu podłącz diodę i zobacz czy prawidłowo miga (nie musisz jej lutować, przy odrobinie zręczoności wystarczy ją docisnąć; jeśli wyświetlacz jest na gniazdku, będzie jeszcze prościej - usówasz wyświetlacz i wkładasz diodę). Gdy to działa prawidłowo, przechodzisz do wyprowadzenia podłączonego pod wejście E, później kolejno wejścia danych. Wiem, że to nie wygląda zachęcająco, ale ja kiedyś w ten sposób właśnie odkryłem problem z wejściami JTAG'a (no - nie dokładnie tak, ponieważ generowałem szybszy sygnał i badałem go miernikiem częstotliwości a nie diodą, ale zasada jest ta sama). Jeśli natrafisz na wyprowadzenie które nie działa - wtedy trzeba sprawdzić jego alternatywne funkcje.

W ogóle - jakie masz przyporządkowanie wyprowadzeń - napisz który pin za co odpowiada. Może coś poradzimy po samej takiej informacji :wink:

yakuza
-
Posty: 38
Rejestracja: 10 sty 2006, 12:59
Kontakt:

Post autor: yakuza » 08 mar 2006, 20:23

wyprowadzenia:

Rs = Portb.2 , E = Portb.3 , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7

Dzięki wielkie za próbe pomocy :wink:

Awatar użytkownika
Koppel
Użytkownik
Posty: 500
Rejestracja: 24 lip 2005, 18:05
Lokalizacja: Gliwice

Post autor: Koppel » 08 mar 2006, 22:32

To moje idee się wyczerpały - nie widzę na tych portach jakiś sygnałów które mogą być domyślnie nadpisane. Jeśli nie korzystasz z innych układów (SPI, TIMER0) a próbujesz tylko coś wypisać na wyświetlaczu - nie mam ideii dla czego to się nie udaje. Może ktoś inny miał podobny problem.

Rozumiem, że piszesz w BASCOMie? Tam procedury wyświetlacza są napisane raczej dość "bezpiecznie" - opóźnienia są dużo większe niż to jest potrzebne.

yakuza
-
Posty: 38
Rejestracja: 10 sty 2006, 12:59
Kontakt:

Post autor: yakuza » 09 mar 2006, 10:26

Kolega zobaczył układ i zauważył że jeden pin LCD był połączony z Restem :oops:
Dlatego jak coś nie działa warto dzć komuś do zobaczenia czy wszystko jest dobrze połączone. Jeszcze nie sprawdzałem czy zadziała bo jestem w szkole, ale to jest pewne.

Wielkie dzięki za pomoc :D

EDIT:

Wyświetlacz już działa! :D Wielke dzięki za pomoc (Gdybym nie wyłączył JTAG napewno by dalej nie działał). Zawsze trzeba sprawdzać połączenia! Najlepiej dać komuś do sprawdzenia!

Awatar użytkownika
Koppel
Użytkownik
Posty: 500
Rejestracja: 24 lip 2005, 18:05
Lokalizacja: Gliwice

Post autor: Koppel » 09 mar 2006, 15:52

yakuza pisze:Gdybym nie wyłączył JTAG napewno by dalej nie działał
Działałby - JTAG zajmuje część wyprowadzeń portu C, a blokuje chyba tylko portC.4. Ale to fajnie, że się udało :)

ODPOWIEDZ