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.

Mega8 - HD44780 się nie inicjalizuje

afterparty 07 Sie 2014 18:20 1101 2
  • #1 07 Sie 2014 18:20
    afterparty
    Poziom 12  

    Witam.

    Chciałem rozgryźć wyświetlacze z HD44780. Po nieskutecznych próbach z interfejsem 4-o bitowym, wszystko skasowałem, i napisałem zupełnie od nowa, tym razem pod interfejs 8mio bitowy. OK, poczytałem datasheety, diagramy itp. Według mnie wszystko raczej się zgadza, ale wyświetlacz się nie chce zainicjalizować (a raczej dwa wyświetlacze, bo próbowałem też na drugim) - po prostu pojawia się na nim jeden rząd prostokątów.

    Tutaj kod (tak wiem, niezbyt to efektywne, ale chciałem sprawdzić z delayami czy w ogóle mi się to uda uruchomić:

    main.c - nie ma tu dużo - inicjalizacja, potem komenda włączająca kursor, jego migotanie i w ogóle włączanie wyświetlacza:

    Kod: cpp
    Zaloguj się, aby zobaczyć kod


    Następnie mamy LCD_HD44780.c:
    Kod: cpp
    Zaloguj się, aby zobaczyć kod


    Oraz nagłówkowy - LCD_HD44780.h:
    Kod: cpp
    Zaloguj się, aby zobaczyć kod


    Schematu nie załączam, bo wiem, że wszystko jest dobrze.

    Ja poprostu wymiękam. Pewnie błąd czai się gdzieś w timingach? Pomoże ktoś?

    0 2
  • #2 07 Sie 2014 21:17
    pawel_konin
    Poziom 20  

    Na jakim kwarcu pracujesz bo to może być powód braku inicjalizacji wyświetlacza.

    Moderowany przez piotrva:

    Nie umieszczamy w wiadomościach niekoniecznych i długich cytatów.

    0
  • #3 08 Sie 2014 16:17
    afterparty
    Poziom 12  

    Kolego kwarc mam 12MHz. Fuski oczywiście dobrze ustawione.

    Sprawdziłem też na wewnętrznym 1MHz i 8MHz - też nie działa. (Oczywiście we właściwościach projektu też zmieniłem)

    Hehe, dopiero teraz zauważyłem, że sprawdzam flagę zajętości we funkcji do jej sprawdzania ;) To też poprawiłem, ale dalej nie działa.

    EDIT. OK, wiem już co było nie tak. Dodanie delaya po ustawieniu danych na porcie D pomogło. Teraz mogę wyświetlać tekst na wyświetlaczu, i działa.

    Kod po poprawkach wygląda tak:

    main.c:

    Kod: cpp
    Zaloguj się, aby zobaczyć kod


    LCD_HD44780.c
    Kod: cpp
    Zaloguj się, aby zobaczyć kod


    oraz LCD_HD44780.h
    Kod: cpp
    Zaloguj się, aby zobaczyć kod


    Teraz sprawa ma się tak. Każde wywołanie funkcji cursor_position zacina mi Busy Flag. Także instrukcje po tej funkcji się nie wykonują bo mikrokontroler stoi z Busy Flag = 1. O co biega? Ja nie widzę problemu.

    0