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

[AtMega32A][C] Brak reakcji LCD 2x16 na wprowadzony tekst

Siemson22 20 Maj 2020 23:31 1062 4
REKLAMA
  • #1 18707667
    Siemson22
    Poziom 2  
    Dzień dobry,
    Szanowni Państwo, po krótkiej przerwie od mikrokontrolerów postanowiłem wykonać kolejny projekt, tym razem padło na wyświetlacz LCD 2x16. Każdy mój poprzedni projekt polegał jedynie na konstrukcjach z wykorzystaniem diod, mimo to wybrałem wyświetlacz LCD ponieważ całą swoją przygodę z mikrokontrolerami opieram na książce Pana Mirosława Kardasia "BLUEBOOK", a taki projekt widnieje tam jako następstwo zabawy diodami. Wziąłem się zatem do działania. Stworzyłem urządzenie zaopatrzone w mikrokontroler oraz wyświetlacz, napisałem cały program do obsługi ów wyświetlacza i napotkałem mur. Otóż nie ważne co wpiszę w funkcję main programu wyświetlacz i tak na to nie reaguje. Oto jakie środki zastosowałem jako próba rozwiązania problemu (Dodam tylko, że wyświetlacz działa po podłączeniu baterii/programatora, mogę regulować kontrast itp).

    1. Sprawdziłem czy podłączenie jest prawidłowe oraz poprawiłem luty. Najwyraźniej nie w tym tkwił błąd.
    2. Sprawdziłem, czy nie błąd nie leży w mikroporcesorze. Do jednej z odnóg AtMegi podłączyłem diodę, napisałem następnie program który będzie nią migotał i zaprogramowałem procesor. Wszystkie działa. Nie mniej jednak jest pewna rzecz która przykuła moją uwagę, konkretnie chodzi o to, że kod do migania diodą wygląda następująco:

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    A w wyniku jego działania dioda powinna na początek się na 1s zaświecić, a następnie na 1s zgasnąć. Jest na odwrót, to znaczy na początku przez 1sekunde jest wygaszona a następnie dopiero na sekundę się zapala. Może w tym szukać problemu?
  • REKLAMA
  • #2 18710066
    Siemson22
    Poziom 2  
    Badając napięcie na poszczególnych pinach odkryłem, że na jednym z nich stale jest stan wysoki, a zatem w którymś miejscu źle zlutowałem i nastąpił przeciek. Po poprawieniu lutu na pinie wyświetlacz zacząłem reagować na komendy inicjujące go, niestety jest to jedyny rodzaj komend które respektuje. Dalej nie mogę wyświetlać tekstu. Jeżeli zacznę pocierać spód wyświetlacza na ekranie wyświetla się następujący "tekst": [AtMega32A][C] Brak reakcji LCD 2x16 na wprowadzony tekst

    treść funkcji main programu:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    EDIT: treść wyświetlająca się na ekranie jest zależna od pocierania, to znaczy nie jest stała.
  • REKLAMA
  • #3 18711313
    Siemson22
    Poziom 2  
    Dodatkowe uwagi, jeżeli zainicjuję tylko wyświetlacz, to na pinie D4 utrzymuje się stan wysoki (to znaczy z wyjątkiem pinu zasilania oraz pinu zasilania podświetlenia), natomiast po wywołaniu komendy pisania stan wysoki ustanawia się na pinach D4 oraz RS (plus wymienione wcześniej piny zasilające.
  • REKLAMA
  • #4 18724416
    piomar11
    Poziom 9  
    Cytat:
    A w wyniku jego działania dioda powinna na początek się na 1s zaświecić, a następnie na 1s zgasnąć. Jest na odwrót, to znaczy na początku przez 1sekunde jest wygaszona a następnie dopiero na sekundę się zapala. Może w tym szukać problemu?

    To dlatego, że masz odwrotnie (czyt. błędnie) zdefiniowane LED_ON i LED_OFF.

    Cytat:
    Jeżeli zacznę pocierać spód wyświetlacza na ekranie wyświetla się następujący "tekst"

    Pocieranie jest mało skutecznym sposobem programowania ;)
    Przede wszystkim sprawdź raz jeszcze, czy wszystko dobrze połączone.

    Na RS musi być '1' gdy wchodzisz w tryb programowania, bo ... wchodzi się w niego ustawiając '1' na RS.
    '1' na D4 niewiele mówi, bo to juz zależy od tego, co chcesz wysłać do HD44780
  • #5 18732551
    SylwekK
    Poziom 32  
    Czy fuse bity dobrze ustawione? Czy wyłączony jtag?
    I jeszcze jedno, jeśli korzystasz z BB to jakim cudem w swoim programie masz linię "#define F_CPU 1000000UL" ? :)
REKLAMA