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

[ATMEGA8A / L] - oraz HD44780 i Atmel Studio 6, brak wyświetlanych znaków

Adamo'90 13 Gru 2013 20:34 4092 21
REKLAMA
  • #1 13057351
    Adamo'90
    Poziom 11  
    Witam,
    od paru dni męczę się z aktywacją wyświetlacza HD44780. Procesor jakiego używam to ATMEGA8L (posiadam także ATMEGA8A i na nią także wgrałem program opisany poniżej - efekty takie same). Używam także środowiska Atmel Studio 6.
    Problem polega na tym iż wyświetlacz podłączyłem, sprawdzałem już kilka razy połączenia, zwarcia itp. i nie znalazłem tam problemów. Wyświetlacz podłączyłem i konfigurowałem według schematu ze strony:
    http://mikrokontrolery.blogspot.com/2011/03/adc-prezentacja-wyniku-na-lcd.html
    Z powyższej strony także zaczerpnąłem program. Dokładnie - utworzyłem w Atmel Studio 6 nowy projekt, dodałem do niego pliki HD44780.h oraz HD44780.c, dodałem je do projektu w solution explorer za pomocą add -> existing item. W głównym programie zawarłem jedynie:

    
    #include <avr/io.h>
    #include <util/delay.h>
    #include "HD44780.h"
    
    int main(void)
    {
    	LCD_Initalize();   //inicjalizacja LCD
    	LCD_GoTo(0, 0);      //Ustawienie kursora w pozycji (0,0)
    	LCD_WriteText("ADC");
    	return 0;
    }
    


    Ponieważ więcej nie potrzebuję (nie przetwarzam żadnych sygnałów analogowych itp. jak w przykładzie ze strony powyższej).
    Procesor jest skonfigurowany, tak samo programator (AVR Dragon). Prędkość procesora ustawiam w preferencjach projektu za pomocą zakładki Toolchain. Ustawiłem ją na 1 MHz.
    Sposób podłączenia przedstawiam na poniższym filmie, mam nadzieje że jest dość jasno (w filmie mówię iż piny E i RS podłączone są do portu C, oczywiście chodziło mi o port B co widać):
    http://www.youtube.com/watch?v=Lc87BevXM9I

    Atmel Studio nie zwraca żadnych błędów ani ostrzeżeń.

    Czy ktoś widzi tutaj jakiś błąd lub też jest w stanie mi pomóc?
  • REKLAMA
  • #3 13057698
    Adamo'90
    Poziom 11  
    Rzeczywiście, bez return 0 program się kompiluje... Dodałem także pętlę, aczkolwiek nie wiedziałem że jest potrzebna. Mimo to efekt jest ten sam.

    Program wgrywa się prawidłowo, projekty przykładowe z diodami jak najbardziej działają. Wgrywanie nie zwraca błędów ani żadnych komunikatów, przechodzi chip erase i potem program jest wgrywany, pojawia się ready i wszystko jest na uC.

    W załączniku cały projekt. Zdjęcia poniżej:

    EDIT: Prawidłowo umieszczone obrazki.
    [ATMEGA8A / L] - oraz HD44780 i Atmel Studio 6, brak wyświetlanych znaków [ATMEGA8A / L] - oraz HD44780 i Atmel Studio 6, brak wyświetlanych znaków [ATMEGA8A / L] - oraz HD44780 i Atmel Studio 6, brak wyświetlanych znaków [ATMEGA8A / L] - oraz HD44780 i Atmel Studio 6, brak wyświetlanych znaków [ATMEGA8A / L] - oraz HD44780 i Atmel Studio 6, brak wyświetlanych znaków [ATMEGA8A / L] - oraz HD44780 i Atmel Studio 6, brak wyświetlanych znaków [ATMEGA8A / L] - oraz HD44780 i Atmel Studio 6, brak wyświetlanych znaków [ATMEGA8A / L] - oraz HD44780 i Atmel Studio 6, brak wyświetlanych znaków [ATMEGA8A / L] - oraz HD44780 i Atmel Studio 6, brak wyświetlanych znaków
    Swoją drogą obrazki z innego hostingu w kodzie IMG nie wyświetlały się poprawnie, dopiero po umieszczeniu ich poprzez "dodaj obrazek" się pojawiły. Trochę uciążliwa forma dodawania obrazków...
  • #4 13059390
    Konto nie istnieje
    Konto nie istnieje  
  • REKLAMA
  • #5 13059867
    Adamo'90
    Poziom 11  
    Witam,
    tak, wcześniej robiłem projekty typu włączanie diody na poszczególnych pinach portów i wszystko działało prawidłowo. Teraz też działa.
    Co do linii reset, jest konieczne jej podłączenie do prawidłowej pracy? Czy nie wystarcza że wszystko jest podłączone a ja włączam napięcie na uC?

    EDIT: Mimo wszystko, podłączenie lini reset do VCC poprzez rezystor 9k nic nie zmieniło.
  • REKLAMA
  • #6 13061087
    Konto nie istnieje
    Konto nie istnieje  
  • #7 13061994
    dondu
    Moderator na urlopie...
    Adamo'90 napisał:
    tak, wcześniej robiłem projekty typu włączanie diody na poszczególnych pinach portów i wszystko działało prawidłowo. Teraz też działa.

    Adamie. Porzuć tę drogę, a stanie się jasność :)
    To, że 1000 razy działało przez przypadek nie znaczy, że za 1001 razem ponownie zadziała.
    Zacznij więc od podstaw i lektury działu Zasilanie i zakłócenia: http://mikrokontrolery.blogspot.com/p/spis-tresci.html#dzial_zasilanie_zaklocenia

    Dopiero później będzie można kombinować, co jest nie tak z Twoim projektem, bo na razie nie masz smaru w silniku i dziwisz się, czemu ten pojazd nie ma takich osiągów jak powinien.
  • #8 13062312
    Mateusz_Łukasik
    Poziom 10  
    Oczywiście zasilanie zrób jak należy, ale spróbuj podłączyć zasilanie do samego LCD, bez uC, wyświetla się coś? same kwadraty w 1 linii? może kontrast trzeba ustawić? jak będą kwadraty to wyreguluj kontrast i przynajmniej będzie pewność że to nie w tym problem i że LCD coś wyświetla :)
  • REKLAMA
  • #9 13063282
    Adamo'90
    Poziom 11  
    Tak, kontrast jest ustawiony w taki sposób jak napisałeś.
    Na razie za poradą bardziej doświadczonych kolegów podłączam (staram się podłączyć) uC jak powinienem. Zobaczymy co z tego wyjdzie, chociaż dziś już nie mam zbyt dużych możliwości - wszystkie sklepy pozamykane a jako początkujący nie mam zbyt wielu komponentów ;)

    Iras_L - oczywiście, ale takie podłączenia były w przykładowym projekcie oraz jasne że sprawdzałem to z plikiem .h i wszystko się zgadza. Linia danych do portu D a E i RS do portu B.

    EDIT:
    witam,
    zrobiłem co mogłem dzisiaj, czyli podłączyłem linię reset poprzez rezystor 10K oraz podłączyłem VCC i AVCC do +5V i każde GND do uziemienia. Nadal nic to nie zmieniło. Na wyświetlaczu widzę tak jakby tylko spacje.
    Jutro mogę nabyć kolejne komponenty elektroniczne takie jak kondensatory 100nF, ale patrząc na np. ten projekt:
    http://www.youtube.com/watch?v=AyyUWLGMDd4
    zastanawiam się czy to coś pomoże. Czy podłączenie jest problemem czy szukać go gdzie indziej? Czy błąd nie jest zawarty gdzieś w kodzie lub nie prawidłowo skonfigurowałem środowisko / procesor, albo o czymś jeszcze zapomniałem?
  • #10 13154691
    Adamo'90
    Poziom 11  
    Witam ponownie po długiej przerwie. Zastosowałem się do porad i podłączyłem wszystko jak potrzeba (tak sądzę). Oto jak wyglądają aktualnie połączenia:
    [ATMEGA8A / L] - oraz HD44780 i Atmel Studio 6, brak wyświetlanych znaków [ATMEGA8A / L] - oraz HD44780 i Atmel Studio 6, brak wyświetlanych znaków [ATMEGA8A / L] - oraz HD44780 i Atmel Studio 6, brak wyświetlanych znaków [ATMEGA8A / L] - oraz HD44780 i Atmel Studio 6, brak wyświetlanych znaków
    Niestety, zachowanie układu wciąż jest takie samo.
    Dodam iż program został wgrany na Atmegę8A oraz 8L oraz posiadam dwa wyświetlacze HD44780 które zastosowałem zamiennie - efekt jest ten sam. Wciąż widać tak jakby dwie linijki zapełnione "spacjami".
    Czy ktoś zauważa tutaj jakieś błędy (może jednak są to błędy code-related)?
  • #11 13155765
    Mateusz_Łukasik
    Poziom 10  
    Zaiste dziwna sprawa :)
    Zobacz na Fuse Bity... może jest przestawiona fuse bitami częstotliwość pracy?

    Spróbuj użyć biblioteki z odczytem flagi zajętości i podłącz linie RW, ja używam tych samych bibliotek i nie mam żadnych problemów.
    Czy te LCD działały wcześniej? pisałeś że sprawdzałeś na 2 rożnych ale może oba są walnięte? kupne czy z odzysku? ;)
  • #12 13157297
    Wojtek75
    Poziom 24  
    Cytat:
    Czy ktoś zauważa tutaj jakieś błędy (może jednak są to błędy code-related)?

    Program masz ok. Sprawdzone na żywym układzie. Szukaj przerw lub zwarć w układzie. Dlaczego nie zastosujesz sobie do podłączenia lcd najzwyklejszej listwy kołkowej:

    [ATMEGA8A / L] - oraz HD44780 i Atmel Studio 6, brak wyświetlanych znaków

    Przy lutowaniu używaj większej ilości topnika, później się go po prostu zmywa a jakość lutów jest zdecydowanie lepsza.
  • #13 13159316
    Adamo'90
    Poziom 11  
    Dzięki za sprawdzenie programu. Czyli wszystko podłączyłeś dokładnie pod te porty jak na schemacie/konfiguracji w *.h i działało tak?
    Co do listwy kołkowej, tutaj jest zastosowana chociaż w bardzo słaby sposób (zagiąłem listwę bo była za długa oraz luty są bardzo słabe). Drugi wyświetlacz jest już lepiej zrobiony:
    [ATMEGA8A / L] - oraz HD44780 i Atmel Studio 6, brak wyświetlanych znaków [ATMEGA8A / L] - oraz HD44780 i Atmel Studio 6, brak wyświetlanych znaków [ATMEGA8A / L] - oraz HD44780 i Atmel Studio 6, brak wyświetlanych znaków
    Mateusz - oba kupione nowe. Jeden w poznaniu centrum, drugi jakiś czas temu we Włocławku.
    Posprawdzam jeszcze kilka razy czy wszystko jest ok, nie ma zwarć itp.
    Może coś z programatorem jest nie tak? Mam jeszcze USBAsp, nie próbowałem przez niego to może nim spróbuję.
    Oraz może podłączenie ISP jest nieprawidłowe lub daję zbyt małe napięcie podczas programowania - 3.7V, podłączenie dokładnie tak jak w Datasheet Atmegi czyli napięcie tylko na VCC, na AVCC nic. Może to jest problemem?
  • #14 13159608
    pimpuk
    Poziom 23  
    Czy obydwa wyświetlacze to WC1602A ? Bo one są "baaardzo kompatybilne" z HD44780, szczególnie inicjalizacja. A jeszcze swoją drogą, to czy ten delay po zerowaniu linii E nie powinien być przed zerowaniem? I daj R/W do masy jak nie używasz.
  • #15 13160200
    Wojtek75
    Poziom 24  
    Adamo'90 napisał:
    Dzięki za sprawdzenie programu. Czyli wszystko podłączyłeś dokładnie pod te porty jak na schemacie/konfiguracji w *.h i działało tak?

    Tak.
    Adamo'90 napisał:
    podłączenie dokładnie tak jak w Datasheet Atmegi czyli napięcie tylko na VCC, na AVCC nic. Może to jest problemem?

    Daj linka do tej noty z której korzystasz bo w mojej to AVCC jednak zalecają podłączyć:
    [ATMEGA8A / L] - oraz HD44780 i Atmel Studio 6, brak wyświetlanych znaków

    Wrzuć może jakiś ekran z programu którym wgrywasz wsad do uC najlepiej po komunikatach o poprawnym programowaniu i weryfikacji.
  • #16 13160352
    Mateusz_Łukasik
    Poziom 10  
    Ja bym stawiał, że coś nie tak jest z tymi LCD
    program się wgrywa, Atmel Studio programuje bez zgłaszania błędów, więc myślę że jest ok w tej kwestii i nie ma potrzeby zmieniać programator. Jak zasugerował kolega pimpuk - podłącz RW wyświetlacza do masy jeśli tak nie masz, i podaj co to za model LCD, może faktycznie coś nie tak jest z kompatybilnością.
  • #17 13160406
    pimpuk
    Poziom 23  
    Żeby sprawdzić, czy program został prawidłowo załadowany, oraz czy układ działa, wystarczy podpiąć pod któryś wolny pin diodę led. Musisz dopisać w pętli głównej kawałek kodu, żeby po załadowaniu mignął. Wtedy będziesz miał pewność, gdzie szukać przyczyny.
  • #18 13160875
    pawel_konin
    Poziom 20  
    pimpuk napisał:
    Żeby sprawdzić, czy program został prawidłowo załadowany, oraz czy układ działa, wystarczy podpiąć pod któryś wolny pin diodę led. Musisz dopisać w pętli głównej kawałek kodu, żeby po załadowaniu mignął. Wtedy będziesz miał pewność, gdzie szukać przyczyny.

    Skoro wszystko już tu koledzy powiedzieli to może akurat masz taki wyświetlacz który wymaga opóźnienia przed inicjalizacją gdzieś tu na forum czytałem kiedyś że niektóre wyświetlacze potrzebują tego opóźnienia żeby poprawnie się zainicjować. Chyba to było 50ms choć nie jestem pewny ile wtedy tam było. Ale to przy założeniach że, masz wszystko podłączone jak w bibliotece i jesteś tego pewny i sprawdziłeś co autor biblioteki pisze na swojej stronie tam też jest dokładnie pokazane jak podłączyć. Jedynie co w twoim programie brakuje to wyczyszczenia ekranu po inicjalizacji ale myślę że, to nie ma wpływu akurat na to. Może kolega zobaczyć też do tych fusów czy przypadkiem nie działa na innej częstotliwości niż wpisana w opcjach projektu bo wtedy wyświetlacz też się nie zainicjuje.
  • #19 13161082
    pimpuk
    Poziom 23  
    pawel_konin napisał:
    może akurat masz taki wyświetlacz który wymaga opróżnienia przed inicjalizacją
    Chyba opóźnienia :) Dla HD44780 byłoby 15ms, ale już dla WC1602A jest to 30ms i to takie na słowo honoru (zwykle ludziska dają 50ms)

    Pozdrawiam.

    P.S. Autorowi wątku proponuję zapoznać się z notą katalogową WC1602A Link

    P.S.2 Ten wyświetlacz się nie wyrabia w czasie, dla tego trzeba poczekać z zerowaniem linii E, a dla większych częstotliwości taktowania to udaje martwego.
    Dla tego lepiej sprawdzić te fusy, bo może tu jest pies pogrzebany.
  • #20 13162315
    dondu
    Moderator na urlopie...
    Biblioteka wyświetlacza, którą stosujesz (Radosława Kwietnia) ma opóźnienie w funkcji inicjującej:

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


    Możesz tam zmienić ilość ms.

    Czy masz jakieś warningi w czasie kompilacji?
  • #21 13165651
    pimpuk
    Poziom 23  
    Dondu, oczywiście masz rację. Ja piszę też o 15ms w przypadku HD44780 i 30ms dla WC1602A. Proszę jednak spojrzeć w kod autora wątku Adamo'90, u niego jest _delay_us(50);. A to jak by nie liczył, jest ponad 3000 razy krótsze opóźnienie, więc LCD się nie wyrabia. (Powtarzam się)

    Mateusz_Łukasik napisał:
    Jak zasugerował kolega pimpuk - podłącz RW wyświetlacza do masy jeśli tak nie masz

    No nie jest to sugestia, tylko tak ma być. Tabela Instruction Code, strona 10.
  • #22 13167235
    Adamo'90
    Poziom 11  
    Problem... rozwiązany. Najpierw odpowiem na pytania:

    Wojtek75 napisał:

    Daj linka do tej noty z której korzystasz bo w mojej to AVCC jednak zalecają podłączyć:
    [ATMEGA8A / L] - oraz HD44780 i Atmel Studio 6, brak wyświetlanych znaków


    Nota katalogowa do Dragona, strona 17:
    http://www.jm.pl/karty/avrdragon_v1.pdf
    Dokładnie tak samo jest w angielskiej wersji.

    pimpuk napisał:
    I daj R/W do masy jak nie używasz.

    Jest, ten biały kabel, ledwo widoczny idący do góry płytki stykowej - tam jest masa.


    A teraz... nie mam pojęcia, jakim cudem oraz byłem przekonany że to sprawdziłem już na samym początku i ustawiłem. Sprawdzałem multum razy kable, połączenia, robiłem programy z diodami, sprawdzałem kod i prędkość procesora, nawet ustawienia programu i prędkości procesora, a nigdy chyba nie powróciłem do... fuse bitów. Nie wiem jakim cudem, ale zegar był ustawiony na 8 MHz. Aż wstyd przyznawać. Po przestawieniu na 1, oczywiście wszystko działa, program dokładnie z powyższego linku. Dowód:

    [ATMEGA8A / L] - oraz HD44780 i Atmel Studio 6, brak wyświetlanych znaków
REKLAMA