Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

[Atmega8][C] - Programowanie wyswietlacza HD44780

Chey 30 Nov 2012 10:51 3540 10
  • #1
    Chey
    Level 9  
    Witam!

    Po raz milionowy poruszam temat wyświetlacza LED.

    Proszę o sprawdzenie, gdzie robię błąd (od razu zaznaczam, ze przeszukałem internet, forum itp, ale dalej nie wiem dlaczego nie działa)

    układ:
    -atmega8
    -wyświetlacz LED: 2x16 oparty na HD47780
    -biblioteki: 4bit z odczytem flagi zajętosci
    - Eclipse + avr plugin
    -wszystko podłączone do portu C

    RS -> PC2
    R/W -> PC0
    E -> PC1

    Szyna danych:
    DB4 -> PC3
    DB5 -> PC4
    DB6 -> PC5
    DB7 -> PC6

    Wyświetlacz po podłączeniu do programatora włącza podświetlenie i pierwszy wiersz kwadracików (po tym wnioskuje, że jest sprawny)

    Plik .h
    Code: c
    Log in, to see the code


    Mój program(może tutaj jest coś źle?):
    Code: c
    Log in, to see the code


    Program się kompiluje, bo zaprogramowaniu na wyświetlaczu nic się nie dzieje
    Podłączenia sprawdziłem - zgodne ze schematem.
  • #2
    akajarz
    Level 23  
    Wyświetlacz się nie inicjalizuje.
    Pracujesz na wewnętrznym zegarze? Masz gdzieś zdefiniowaną częstotliwość procka np
    #define F_CPU 1000000UL ?
  • #3
    Chey
    Level 9  
    Tak, wewnętrzny zegar, częstotliwość zdefiniowana jest przez Eclipsa (sprawdziłem wpisując"#define F_CPU 1000000UL" - nic się nie zmienia)
  • #5
    Chey
    Level 9  
    akajarz, Sprawdziłem tą bibliotekę

    Zmieniłem:
    (plik .h)
    Code: c
    Log in, to see the code


    Program:
    Code: c
    Log in, to see the code


    Znowu wszystko się kompiluje i znowu to samo (pierwszy wiersz prostokątów)
  • Helpful post
    #6
    akajarz
    Level 23  
    Zastanów się nad użyciem petli while, bo w pierwszym programie w petli cały czas czyścisz i wyświetlasz coś, więc może tego nawet nie zobaczysz tak szybko będzie się zmieniać. Natomiast w drugim programie nic ci się nie wyświetli bo program wpadnie w nieskończonę petlę i już z niej nie wyjdzie, instrukcje po while(1); już się nie wykonają.
    Zrób tak.
    1. inicjalizacja wyświetlacza
    2. clrscr i wyświetl coś
    3. while(1);

    Dodano po 15 [minuty]:

    W pliku lcd.h musisz jeszcze zdefiniowac kilka rzeczy, najważniejsze to ustawić wyswietlacz w tryb memory mapped mode.

    Code: c
    Log in, to see the code
  • #7
    Chey
    Level 9  
    Quote:
    W pliku lcd.h musisz jeszcze zdefiniowac kilka rzeczy, najważniejsze to ustawić wyswietlacz w tryb memory mapped mode.

    A nie w tryb IO port mode?

    Zrobiłem tak:
    Code: c
    Log in, to see the code


    lub tak:
    Code: c
    Log in, to see the code


    Powinien wyświetlić napisy, poczekać 2,5sec i ponownie wyczyścić itp

    Efekt dalej ten sam (żadnej reakcji wyświetlacza)
  • #8
    akajarz
    Level 23  
    Racja, IO port mode.
    Co do problemu już nie mam pomysłu, u mnie to działa wyśmienicie.
  • #9
    Chey
    Level 9  
    Problem rozwiązany.

    Odłączyłem wszystkie kabelki od avr żeby sprawdzić czy jest styk pomiędzy wyświetlaczem a kabelkiem (wszystko było OK), podłączyłem ale tym razem do PORT D. Na obu bibliotekach wszystko śmiga. Być może przeszkadzało to, że pin reset oraz PC6 to ten sam pin, a programator był cały czas podłączony (ale nie jestem pewien czy tak jest)

    akajarz, dzięki za pomoc
  • #11
    Chey
    Level 9  
    Czytałem artykuły na tej stronie (polecam). AVCC miałem podłączone do zasilania i zmasowane przez kondensator 100nF.