Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

ATmega 32 - LCD niedziała

squelch 21 Maj 2015 18:16 831 13
  • #1 21 Maj 2015 18:16
    squelch
    Poziom 11  

    Czesc mam taki kod ale nie działa czy wiecie co jest zle

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Kod: c
    Zaloguj się, aby zobaczyć kod


    Kod: c
    Zaloguj się, aby zobaczyć kod

    0 13
  • #2 21 Maj 2015 18:30
    szelus
    Specjalista - Mikrokontrolery

    Pewnie masz coś źle. :twisted:
    Pokaż:
    1. schemat
    2. zdjęcia
    A przynajmniej byś napisał, jaki to za LCD i co dokładnie oznacza "nie działa".

    0
  • #3 21 Maj 2015 20:12
    squelch
    Poziom 11  

    nie ma sensu pokazywać schematu bo robie to na zestwie uruchomieniowum i wszystko mam dobrze połączone ale wyświetla mi jedną linie i tyle czyli dobrze bo tak
    miałem w inicjalizacji ale nie wyświetla tekstu.

    Dodano po 1 [minuty]:

    LCD HD44780

    0
  • #4 21 Maj 2015 23:43
    dondu
    Moderator Mikrokontrolery Projektowanie

    Skoro w pierwszym poście nie podajesz żadnych objawów ani schematu podłączenia LCD do mikrokontrolera, to jak mamy szybko wskazać Ci gdzie może występować problem? Takie problemy rozwiązuje się krokami. Przetestuj po kolei funkcje biblioteki. Gdy znajdziesz tę która nie działa prawidłowo wskaż nam ją i wtedy się zastanowimy.

    Innymi słowy daj nam szansę Ci pomóc, ale nie oczekuj, że na sucho będziemy analizować całą bibliotekę.

    0
  • #5 22 Maj 2015 08:00
    excray
    Poziom 39  

    Na szybko: w funkcji "send_character" podnosisz linię E zamiast RS. W inicjalizacji wysyłasz na początku 0x03 zamiast 0x30. Później masz dziwne opisy nie adekwatne do komend: "Function Set" - włączasz tylko 1 wiersz, "Display On" - włączasz kursor, NIE włączasz wyświetlacza, "Display Off" - czyścisz ekran po czym powinieneś zachować czas min 1,64ms na wyczyszczenie - nie zachowałeś. De facto nigdzie nie włączyłeś wyświetlacza ani prawidłowo nie zainicjowałeś. Reszty nawet nie chce mi się analizować.

    0
  • #6 22 Maj 2015 13:13
    squelch
    Poziom 11  

    Poprawiłem kod ale moge korzystać z jednego wiersza czas jest odczekany spójrz do funkcji clean_LCD a podrugie i tak korzystam z busyflag

    Jednak nadal nie działa proszę o sprawdzenie tego kodu w uproszczonej wersji wyświetla mi wyś 1 linię pełnych znaków

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Kod: c
    Zaloguj się, aby zobaczyć kod

    0
  • #7 22 Maj 2015 13:45
    excray
    Poziom 39  

    squelch napisał:
    czas jest odczekany spójrz do funkcji clean_LCD a podrugie i tak korzystam z busyflag

    Przeczytaj jeszcze raz co napisałem uważnie i sprawdź swój kod. Nie piszę o funkcji "clean_LCD" tylko o "send_command(1<<0);" które właśnie czyści ekran i nigdzie po tej komendzie nie zachowałeś wymaganego czasu. Flaga busy nie załatwia tematu. Pozostałych błędów o któych pisałem też nie poprawiłeś. Po co w inicjalizacji ustawiasz stan wysoki na liniach RS, RW i E? W funkcjach "send_byte()" i "read_byte()" między "LOW_E" a "HIGH_E" powinieneś zachować odstęp czasowy zalecany w nocie katalogowej. Dlaczego nie aktywujesz komunikacji 4-ro bitowej prawidłowo? W ogóle chyba nie przeczytałeś noty katalogowej układu. Ściągnij działającego gotowca i go użyj jeśli nie potrafisz napisać sam poprawnej biblioteki ani nawet znaleźć błędu we własnym kodzie.

    0
  • #8 22 Maj 2015 14:16
    squelch
    Poziom 11  

    Czyli czekaj ja nie powinienem wysyłać 0x01 jeśli chodzi o komende Display on czy co wtedy powinienem wysłać bo jest to niestandardowa komenda

    0
  • #9 22 Maj 2015 14:29
    excray
    Poziom 39  

    ATmega 32 - LCD niedziała
    DIPSLAY SWITCH - 0b00001100 = "display on"

    Dodano po 8 [minuty]:

    Polecam tez ten diagram.
    ATmega 32 - LCD niedziała
    Zwróć uwagę na to że inicjalizacja trybu 4-ro bitowego jest wykonana w trybie przesyłania danych 8-bit i dopiero następna instrukcja jest oparta o wysyłanie połówek.

    0
  • #10 22 Maj 2015 16:00
    squelch
    Poziom 11  

    No dobra to zobacz to
    http://elportal.pl/pdf/k09/25_10.pdf
    tam pisze że to jest niestandardowa instrukcja w inicjalizacji

    Dodano po 1 [godziny] 28 [minuty]:

    W inicjalizacji wysyłasz na początku 0x03 zamiast 0x30.
    Spójrz dokładnie do funkcji.

    Wprowadziałem poprawki ale dziwne znaki wyświetla spróbuję to rozgryść

    0
  • #11 22 Maj 2015 17:28
    Wirnick
    Poziom 26  

    squelch napisał:
    No dobra to zobacz to
    http://elportal.pl/pdf/k09/25_10.pdf
    tam pisze że to jest niestandardowa instrukcja w inicjalizacji

    "Inicjalizacja – czyli co się
    dzieje po włączeniu
    zasilania" Przeczytaj ten akapit kilka razy. Tam opisany jest standard - twój program jest wtedy niepotrzebny. A i tak jest błędny.
    Ala poco Ci standard, gdzie na wyświetlaczu jest linia prostokątów?
    To Ty decydujesz, poprzez sterowanie programowe, co ma być na wyświetlaczu.

    0
  • #12 23 Maj 2015 09:14
    squelch
    Poziom 11  

    ok problem rozwiązany ale nie rozumiem czeemu mi niedziała przesuwanie zawartośći okna przecież w inicjalizacj mam przesuwanie zawartości okna w prawo bez przesuwania kursora

    Dodano po 21 [minuty]:

    ta cześć kodu mi niedziała

    Kod: c
    Zaloguj się, aby zobaczyć kod


    powinien kursor pozostawiać a okno powinno się przesuwać nie działa
    kursor pozostaje okno się nie przesuwa

    Dodano po 1 [godziny] 6 [minuty]:

    Jesszcze jak mam unieśćić napis np LCD TEST w 1 lini a w 2 LCD

    0
  • #14 23 Maj 2015 11:06
    squelch
    Poziom 11  

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Kod: c
    Zaloguj się, aby zobaczyć kod


    Kod: c
    Zaloguj się, aby zobaczyć kod


    ok wyświetla mi tekst w 1lini i w 2lini ale jak dam position(0,16) to wyświetla mi ostatni znak na ostatnim oknie ale jak dam żeby mi wyświetlił 2 linie to wtedy wyświetla od 10 kwadratu.Czemu???

    0