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

[atmega128] + lcd , problem

lthomasl 08 Sie 2010 20:17 2517 13
REKLAMA
  • #1 8378347
    lthomasl
    Poziom 10  
    Witam,
    Mam problem z zaprogramowaniem atmegi128 wraz z wyswietlaczem lcd oznaczenia (WC1604a0-sfylync06) . Prosze o pomoc


    Kod programu:
    
    #include <avr/io.h>
    #ifndef _UTIL_DELAY_H_
    #define F_CPU 6000000UL
    #include <util\delay.h>
    #endif
    
    int main(void)
    {
    	//USTAWIENIE PORTOW E I B JAKO WYJSCIA
    
    	
    	DDRE = 0B11111111;
    	DDRB = 0B11111111;
    	DDRC = 0B11111111;
    	
    	
    	//FUNCTION SET, ODPALAM WYSWIETLACZ
    	
    	PORTC = 0B11111111;
    	
    	//CLEAN DISPLAY
    	PORTB = 0B00000100;
    	PORTE = 0B00110000;
    	
    	_delay_ms(100);
    
    	//ustawienie wyswietlacza ilosc lini i slowa danych
    	PORTB = 0B00000000;
    	PORTE = 0B00110011;
    	
    	
    	_delay_ms(100);
    	
    	//POWROT KURSORA NA PIERWOTNA POZYCJE
    	PORTB = 0B00000100;
    	PORTE = 0B00000011;
    
    
    	_delay_ms(100);
    	
    	//WLACZENIE WYSWEITLACZ Z KURSOREM I FUNKCJA MIGANIA KURSORA
    	PORTB = 0B00000100;
    	PORTE = 0B00001111;
    	
    	
    	_delay_ms(100);
    	
    	//WCZYTANIE DANEJ DO WYSWIETLACZA
    	PORTB = 0B00000101;
    	PORTE = 0B01000100;
    	
    	PORTB = 0B00000101;
    	PORTE = 0B01010101;
    	
    	
    	while(1)
    	{
    		
    	
    	}
    	
    }
    


    Caly PORTE WPINAM w lcd nr. styku(7-14) i jest to moja "szyna danych".
    Młodsze bity PORTB uzywam do ustawienia RS,R/W, E.

    V0 poprzedzam potencjonometrem.

    Po wrzuceniu tego programu na atmege i podlaczeniu lcd niestety nic sie nie dzieje. Domyslam sie ze spowodowane jest to bledami w programie. Ten program ma wyswietlic 2 znaki w pierwszej lini od lewej strony - czyli od poczatkowej pozycji kursora.


    Dodaje rowniez zdjecia wyswietlacza

    [atmega128] + lcd , problem

    [atmega128] + lcd , problem

    Dodano po 3 [godziny] 30 [minuty]:

    ma ktos moze jakis pomysl?
  • REKLAMA
  • #2 8379338
    wesol
    Poziom 15  
    Jak kolega ustawił fuse bits?
  • #3 8379363
    lthomasl
    Poziom 10  
    podczas programowania w zaden sposob nie ustawiam fuse bitow
  • REKLAMA
  • REKLAMA
  • #5 8379410
    lthomasl
    Poziom 10  
    Niestety nie wiem, nie widze rozwiazania tutaj....
  • #6 8379583
    arturt134
    Poziom 27  
    Mam kilka pomysłów:
    1. Sprawdź czy wyświetlacz potrzebuje jakiejś inicjalizacji (zwykle trzeba coś ustawić żeby wyświetlanie działało dobrze)
    2. Sprawdź w datasheet wyświetlacza jak jest sekwencja pinów sterujących podczas zapisu danej / komendy. Często trzeba mieć jakieś opóźnienie między wystawieniem E a pozostałych pinów.
    3. Spróbuj napisać ten program bardziej dla ludzi, a nie dla maszyn. Używanie zapisu:
    PORTE = 0b00000101 

    jest dla ludzi bardzo nieczytelne.
    O ileż lepszy jest zapis:
    #define pin_lcd_rw 0
    #define pin_lcd_e  1
    PORTE = (1<<pin_lcd_rw) | (1<<pin_lcd_e)

    Myślę, że dpóki nie zapiszesz tak swego programu, to raczej nikt ci nie pomoże. Mi osobiście nie chce się zgadywać do którego pinu masz podłączony który sygnał sterujący i rozgryzać twoje zapisy binarne.
  • REKLAMA
  • #7 8379671
    lthomasl
    Poziom 10  
    ok postaram sie poprawic jak usiade popoludniu
    rozpiska bitow w portach .
    Wiec tak
    PORTE = cala szyna danych: 0B D7-> 00000101 <- D0
    PORTB - najmlodsze 3 bity sa odpowiednikiem E,R/W,RS. wyglada to w ten sposob: PORTB = 0B00000E -> 1, R/W -> 0 RS -> 0.
    Możliwe ze to problem wlasnie z opoznieniem przed E bo jeżeli zapisuje cokolwiek na lcd to zawsze wcześniej ustawiam stan wysoki. A chyba wyzwalalo narastajace zbocze E

    Popoludniu zaraz sprawdze czy to coś pomoze. Najgorsze jest to ze siedze juz trzeci dzien nad samym odpaleniem wyswietlacza a on nawet nie ma ochoty pokazac zadnego znaku...


    Wrzucam jeszcze datasheeta od wyswietlacza:

    http://www.btc.pl/pdf/wc1604a.pdf
  • #8 8379698
    arturt134
    Poziom 27  
    To nie jest datasheet, to tylko charakterystyki elektryczne.
    Brakuje opisu komend sterujących, tablicy znaków, procedury inicjalizacji lub choćby nazwy kontrolera.... Potrzebny jest opis typu "programming guide", w którym będzie to wszystko.
    Możesz rzucić okiem na moduł, odczytać nazwę kontrolera i podać.
  • #9 8379790
    Konto nie istnieje
    Konto nie istnieje  
  • #10 8379798
    arturt134
    Poziom 27  
    No właśnie na stronie producenta wyświetlacza nie ma ani słowa o kontrolerze. Pozostaje tylko lupa i odczytanie nazwy ze scalaka na module.
  • #12 8379874
    Konto nie istnieje
    Konto nie istnieje  
  • Pomocny post
    #13 8380007
    arturt134
    Poziom 27  
    No to teraz masz wszystkie dane.
    Masz opisaną inicjalizację, timingi, sposób sprawdzania zajętości kontrolera, tablicę znaków, czyli nic tylko pisać sterownik.
    Powodzenia.

    Zajrzyj na stronę:
    Link
    Jest tam biblioteka dla wyświetlaczy znakowych, możesz ją trochę przerobić.
  • #14 8380183
    lthomasl
    Poziom 10  
    dzieki wielkie, dzisiaj zabieram sie do pracy :)
REKLAMA