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

LCD nie działająca biblioteka do "radzia"

kazelot1 29 Cze 2011 17:03 2659 16
  • #1 9662626
    kazelot1
    Poziom 10  
    Witam,
    Ostatnio zacząłem się bawić sterownikiem HD44780 i nie wiem czemu nie mogłem nawet zainicjować wyświetlacza. Zdesperowany :d znalazłem biblioteke Link Jednak nawet ona nie działa, Co robię źle ? Prosze o pomoc z góry dzięki. Zaznaczam że jestem początkującym:
    fragment zmienionego prze ze mnie headera:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod



    kod z main.c
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    korzystam z zestawu uruchomieniowego avt3505 schemat
  • #3 9663708
    kazelot1
    Poziom 10  
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • #5 9664921
    kazelot1
    Poziom 10  
    ok więc
    main.c
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

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

    HD44780.c
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
    [/code]
  • #7 9664983
    kazelot1
    Poziom 10  
    tak to atmega 162 nie zmieniałem fusebitów takie jakie były ustawione przy zakupie takie zostały. Co ciekawe razem z układem miałem płytę z jakimś kursem avr- były tam 4-6 przykładów obsługi wyświetlacza (4bitowe 8 bitowe, z sprawdzaniem BF i bez BF) ale tylko ten ostatni działa( ale jest dla za skomplikowany(jest tam jakiś wskaznik do typu FILE i odczyt z niego ale nie wiem co to ma do avr) więc chciałem napisać swój albo użyć tej przejrzstej biblioteki) reszta tak jak moje nie inicjują nawet LCD
  • #8 9665012
    snnaap
    Poziom 25  
    Pierwsze co rzuca się w oczy to to, że standardowo Atmega162 ma ustawiony zegar wewnętrzny 8MHz z podziałem przez 8

    Cytat:
    Default Clock
    Source
    The device is shipped with CKSEL = “0010”, SUT = “10” and CKDIV8 programmed. The default
    clock source setting is therefore the Internal RC Oscillator with longest startup time and an initial
    system clock prescaling of 8. This default setting ensures that all users can make their desired
    clock source setting using an In-System or Parallel programmer.


    co daje nam 1MHz.

    W bibliotece Radzia szybkość oscylatora ustawiona jest na 8MHz


    Cytat:
    //-------------------------------------------------------------------------------------------------
    // Wyświetlacz alfanumeryczny ze sterownikiem HD44780
    // Sterowanie w trybie 8-bitowym z odczytem flagi zajętości
    // Plik : HD44780.h
    // Mikrokontroler : Atmel AVR
    // Kompilator : avr-gcc
    // Autor : Radosław Kwiecień
    // Źródło : http://radzio.dxp.pl/hd44780/
    // Data : 24.03.2007
    //-------------------------------------------------------------------------------------------------
    #define F_CPU 8000000L
    #include <avr/io.h>
    #include <util/delay.h>



    Rozwiązaniem jest zmiana prędkości taktowania procesora za pomocą Fuse bits poprzez odznaczenie CKDIV8 tak aby procesor pracował z prędkością 8MHz.

    Drugim sposobem (mniej inwazyjnym) jest zmiana biblioteki Radzia poprzez zmianę
    #define F_CPU 8000000L na
    #define F_CPU 1000000L. Tak też powinno zadziałać.

    Dla sprawdzenia napisz sobie krótki programik z migającą co sekundę diodą gdzie zobaczysz czy aby na pewno masz prawidłowo ustawiony zegar.
  • #9 9665042
    kazelot1
    Poziom 10  
    Tyle że w tym układzie mam zewnetrzny oscylator 8Mhz i fusy z tego co pamietam z opisu płytki są ustawione na ten zewnetrzny oscylator(bez dzielenia).
    Sprawdziłem ani z 8000000L ani z 1000000L nie działa. Jak kiedyś robiłem sobie para stoper na LEDach to też przyjmowałem 8Mhz i działał więc to chyba nie to. Naprawdę nie wiem co tu jest nie tak
  • #11 9665061
    kazelot1
    Poziom 10  
    Właśnie z tej biblioteki korzystam tylko z wersji z odczytem flagi BF. Tą którą podałeś też testowałem wcześniej w taki sam sposób jak tą o której dyskutujemy.
    Ta którą podałeś jest bez badania flagi zajętości i nie działa mi więc uznałem że jest coś nie tak z opóźnieniami i zacząłem testować ta z badaniem flagi zajętości ale i ta i ta tak samo nie inicjuje sie
  • #13 9665102
    kazelot1
    Poziom 10  
    pisze w gcc avr w avr studio 4.18. Tworząc projekt deklaruję z czego korzystam to się chyba z tego co pamietam w makefileu zapisuje
  • #14 9665124
    dondu
    Moderator na urlopie...
    snnaap napisał:
    Drugim sposobem (mniej inwazyjnym) jest zmiana biblioteki Radzia poprzez zmianę
    #define F_CPU 8000000L na
    #define F_CPU 1000000L. Tak też powinno zadziałać.

    UL a nie L - drobna różnica ale jednak ....


    kazelot1 napisał:
    pisze w gcc avr w avr studio 4.18. Tworząc projekt deklaruję z czego korzystam to się chyba z tego co pamietam w makefileu zapisuje

    Po to używasz AVR Studio, by się makefile nie interesować (w tak prostym przypadku jak Twój). Od deklaracji są opcje projektu, a makefile tworzony jest automatycznie przez AVR Studio. Zegar także definiuje się w opcjach.

    Menu > Project > Configuration options

    Oczywiście możesz go tworzyć ręcznie tylko, że to w Twoim przypadku niepotrzebne, ale gdyby to było niezbędne, to w tym samym menu opcji projektu.
  • #15 9667319
    kazelot1
    Poziom 10  
    wiem wiem , chodziło mi o to że gdy w konfiguracji ustawie np taktowanie uK to w makefile u mi sie to zapisze osobiscie tam nie grzebałem .
    Ani z UL ani z L nie działa
  • #16 9667477
    august_a
    Poziom 21  
    Jak na moje to nie masz ustawionyh Fuse Bitów. To, że masz podpięty zewnętrzny kwarc to nie oznacza że taktujesz z tą prędkością procka. Podaj jak masz ustawione fusy.
REKLAMA