logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[ATmega8][C] Problem ze startem LCD.

boohoo 20 Wrz 2010 16:52 2692 16
  • #1 8531322
    boohoo
    Poziom 12  
    Witam

    Mam problem z wyświetlaczem LCD pracującym na sterowniku HD44780 podłączanym przez taśmę do układu mikroprocesorowego. Polega on na tym, że po podłączeniu zasilania do układu mikroprocesorowego, na ekranie pojawiają się prostokąty w pierwszej linii i wyświetlacz nie reaguje na wysyłane komendy. Dopiero po kilkukrotnym przyciśnięciu klawisza odpowiedzialnego za reset ATmegi LCD zaczyna działać jak należy. Wykorzystuję 4 bitowy tryb pracy, niewykorzystywane piny są sprowadzone do masy w następujący sposób:
    [ATmega8][C] Problem ze startem LCD.
    Moduł LCD podłączany do układu mikroprocesorowego wygląda tak:
    [ATmega8][C] Problem ze startem LCD.
    Ten sam moduł podłączałem kiedyś do innego układu mikroprocesorowego, tyle że tryb pracy był 8 bitowy. Wszystko działało wtedy poprawnie.

    Z góry dziękuję za pomoc.
    Pozdrawiam.
  • #3 8531533
    gaskoin
    Poziom 38  
    Nie muszą wisieć w powietrzu. Mogą być ściągnięte do masy, albo nawet podciągnięte do zasilania (to akurat bezsens :P). To z ilu wejść korzysta wyświetlacz jest konfigurowane w inicjalizacji wyświetlacza. Wg datasheeta wartości bitów 3-0 są nieważne przy inicjalizacji 4 bit
  • #4 8531592
    janbernat
    Poziom 38  
    Ciekawe jak wygląda układ resetu.
    No i taka głupia sprawa jak mikroswitcz-e.
    Właśnie skończyłem wymianę kompletu na płytce eval.
    Z orginalnych na też tanie- ale nie aż tak tanie.
    Też musiałem reset naciskać kilkanaście razy.
    A sprawdzanie debouncingu- takiego przełączniczka to żadnym programem nie da się obsłużyć.
  • #5 8531771
    boohoo
    Poziom 12  
    Dzięki za odpowiedzi.
    Układ resetu wygląda następująco:
    [ATmega8][C] Problem ze startem LCD. [ATmega8][C] Problem ze startem LCD.
    Jest więc bardzo blisko stabilizatora napięcia, ale nie wiem czy to może mieć jakiś wpływ. Generalnie przycisk resetu zawsze działał, tylko z tym lcd jest problem, że startuje od razu i trzeba kilka razy resetować układ... Czy filtr RC na ten przycisk może coś pomóc?
    Z góry dzięki za wszystkie sugestie :)
  • #6 8531813
    janbernat
    Poziom 38  
    Niesamowite.
    Zasilacz ma zabezpieczenie pewnie- ale ten biedny mikroswicz.
    No chyba że to Vcc dotyczy dławika.
    A ściezka idzie do programatora?
    No i z zasilaniem części analogowej przez kondensator to jeszcze się nie spotkałem.
  • #7 8531995
    Andrzej__S
    Poziom 28  
    Dławik L1 podłącz bezpośrednio do AVCC.
    Kondensator C8 między AVCC i masę (GND).
    Kondensator C9 między AREF i masę.

    Proponuję, żebyś przedstawił cały schemat, bo być może jest tam więcej takich niespodzianek.
  • #8 8532294
    boohoo
    Poziom 12  
    O kurczę... Na marne usprawiedliwienie mam to, że to nie ja jestem autorem schematu.... No ale nic, poprawiłem schemat, wprowadziłem zmiany na płytce, ale problem niestety nie zniknął. Zachowuje się dokładnie tak, jak wcześniej. Zamieszczam schemat całego układu:
    [ATmega8][C] Problem ze startem LCD.
  • #9 8532430
    rpal
    Poziom 27  
    Teraz to ci reset wisi w powietrzu kolego i ma ze ścieżki zrobiony rodzaj anteny aby sciągać wszelki syf z otoczenia. Reset ma być podpięty do zasilania przez opornik np.10-15 k a tak podciagnieta do zasilania linia wyprowadzona do złacza ISP.
    Te oporniki na liniach SCK,MOSI,MISO też będą przyczyną niespodzianek powinny mieć coś koło 1,2k i skierowane do ew. ukladów SPI a nie do programatora jak podepniesz pod to np. jakąś pamięć albo przetwornik to programowanie uP będzie pełne niespodzianek i błędów weryfikacji zapisu. :)
  • #10 8532626
    boohoo
    Poziom 12  
    Wyrzuciłem przycisk i opornik R9, tak że sygnał reset z uC idzie bezpośrednio do programatora. Dodatkowo podciągnąłem reset do VCC przez rezystor 15 k. Niestety dalej układ zachowuje się bez zmian.
  • #11 8533017
    Electix
    Poziom 21  
    A czy mógłbyś przedstawić nam ten klucz tranzystorowy i jego sposób podłączenia do mikrokontrolera? Bo na schemacie on nie widnieje, a jestem ciekaw jak to rozwiązałeś. Poza tym trochę jest nieścisłości w tym schemacie bo opisujesz że OC1A steruje kluczem od podświetlenia, a na schemacie podpięte jest do pinu 14 złącza wyświetlacza... Coś tu kręcisz nam. :)
  • #12 8533034
    boohoo
    Poziom 12  
    He he, faktycznie, nieco niezręcznie użyłem nazwy OC1A... Napisałem tak sugerując się opisem modułu LCD. Jest to sygnał podawany na bazę BC558B, którego kolektor połączony jest z pinem 15 wyświetlacza. Jeśli chodzi o klucz od podświetlenia, to raczej jest dobrze zrealizowany, bo cały moduł pochodzi z zestawu AVT 3505, z którym współpracował bez zarzutu. Podobnie było z jeszcze jedną płytką, którą kiedyś zrobiłem. Nie mam teraz jak, jak dam radę, to jutro zrobię zdjęcie tego całego schematu z LCD. Spróbuję też odpalić wyświetlacz na innej płytce.
    Pozdrawiam :)
  • #13 8533335
    szelus
    Poziom 34  
    Błędy w schemacie to jedno, ale jak wygląda u Ciebie procedura inicjalizacji LCD? Zgodnie ze wszystkimi zasadami (opisanymi w DS kontrolera), np. wysłanie komend ustawiających tryb pracy 3 razy?
  • #14 8534256
    dar1231
    Poziom 12  
    Ustaw sobie większe czasy przy inicjalizacji wyświetlacza. Może być tak, że nie są spełnione zależności czasowe wymagane dla wyświetlacza. Miałem też kiedyś taki problem ale trochę pracy przy zależnościach czasowych i problem zniknął.
  • #15 8534580
    boohoo
    Poziom 12  
    LCD startuje już normalnie. Pomogło kilkukrotne wywoływanie procedury inicjalizacyjnej. Próbowałem zmieniać opóźnienia, ale bez powodzenia. Mniej elegancko, ale na szczęście skutecznie :)
    Dzięki wszystkim za pomoc.
  • #16 8537473
    dar1231
    Poziom 12  
    Już wiem co to może być z tym Twoim programem... W programach widzę często taki zapis:
    LCD |= 0x20;
    ale nikt się nie zastanowił, że 5-ty bit mógł być ustawiony wcześniejszymi instrukcjami i dlatego nie chce się wyświetlacz uruchomić.
    Dla przykładu podam LCD = 00010101
    przy zastosowaniu powyższej instrukcji LCD = 00110101 a nie jak chcieliśmy LCD = 00100101
    Przejrzyj swój program ponieważ sekwencja powinna być na przykład taka:
    LCD &= 0x2F;
    LCD |= 0x20;
    żeby wyznaczyć bity na których nam nie zależy a wyzerować te które powinny być zerami - w tym przypadku nie zależy nam na 4 mniej znaczących.
  • #17 8538434
    boohoo
    Poziom 12  
    Heh, niestety (stety?) obsługę LCD mam zrealizowaną w podobny sposób jak poleciłeś :) No nic, problem po części rozwiązany, więc zamykam temat, muszę się teraz zająć czymś innym... Dzięki wszystkim za odpowiedzi :)
    Pozdrawiam.
REKLAMA