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

[atmega16][c] LCD w zestawie uruchomieniowym nie działa

finger6 24 Mar 2011 01:13 1493 4
REKLAMA
  • #1 9315416
    finger6
    Poziom 11  
    Mój problem wygląda następująco;
    Nie potrafię uruchomić wyświetlacza w płytce startowej EVBavr05 firmy propox. Wyświetlacz albo nie wyświetla nic, albo gubi znaki ewentualnie dodaje do tekstu jakieś własne. Czasami po kilku kolejnych wgrywaniach pliku .hex dopiero zacznie coś wyświetlać, ale są to tylko fragmenty tekstu który był zapisany w programie.
    Próbowałem już chyba wszystkiego :
    -testowałem program na 3 wyświetlaczach - wszystkie zgodne z HD44780 - wszystkie zachowywały się tak samo
    -testowałem program na 2 atmegach16 - bez efektu
    -korzystałem z 3 różnych bibliotek
    -próbowałem podłączyć wyświetlacz do portów C i D
    -nawet zmierzyłem napięcia na wyświetlaczu - Vcc, GND, Vo - wydają się być prawidłowe
    -kontrast dobrze wyregulowany

    Wyświetlacz sterowany 4 bitowo, bez sprawdzania flagi zajętości.
    Po podłączeniu zasilania świeci jedna linia prostokątów, a po resecie procesora gaśnie.
    Wcześniej wszystko działało, teraz nawet jak wgrywam oryginalny program propoxa do testowania lcd, nie działa.

    Poniżej kod programu a w załączniku biblioteki.

    
    
    #define F_CPU 8000000L
    #include <avr/io.h>
    #include <util/delay.h>
    #include <avr/interrupt.h>
    #include "HD44780.h"
    
    
    
    int main()
    {
    	LCD_Initalize();
    	LCD_Clear();
    	while (1)
    		{	
    		
    	
    		LCD_WriteText("abcde");
    		_delay_ms(1000);
    		
    	
    		}
    }
    
    
    


    Tutaj schemat mojej płytki : http://www.propox.com/download/docs/EVBavr05_pl.pdf


    Bardzo proszę o pomoc, bo siedze nad tym już cały dzień i nic.
  • REKLAMA
  • #2 9316038
    Karol966
    Poziom 31  
    Jedna sprawa - jak podłączasz LCD pod port C to wyłączasz JTAG'a?

    W załącznikach sprawdzone biblioteki, których używam na co dzień. Pamiętaj o zmianie pinów wg własnych ustawień.

    Ja zwykle mam te ustawienia w innym pliku, który zawiera cały opis połączeń procesora z peryferiami. Możesz to wkleić zmodyfikowane dla własnych potrzeb np w pliku HD44780.h

    #define LCD_RS_DIR		DDRC 
    #define LCD_RS_PORT 	PORTC
    #define LCD_RS			(1 << PC7)
    
    #define LCD_E_DIR		DDRC
    #define LCD_E_PORT		PORTC
    #define LCD_E			(1 << PC6)
    
    #define LCD_DB4_DIR		DDRC
    #define LCD_DB4_PORT	PORTC
    #define LCD_DB4			(1 << PC5)
    
    #define LCD_DB5_DIR		DDRC
    #define LCD_DB5_PORT	PORTC
    #define LCD_DB5			(1 << PC4)
    
    #define LCD_DB6_DIR		DDRC
    #define LCD_DB6_PORT	PORTC
    #define LCD_DB6			(1 << PC3)
    
    #define LCD_DB7_DIR		DDRC
    #define LCD_DB7_PORT	PORTC
    #define LCD_DB7			(1 << PC2)


    Do tego linia R/W do masy rzecz jasna.
  • REKLAMA
  • #3 9316087
    finger6
    Poziom 11  
    Faktycznie, nie wyłączam JTAGA, bo mam programator JTAG. Ale standardowo wyświetlacz mam podłączony do portu D. Do C podłączyłem tylko raz.

    Dołączyłem Twoją biblioteke i dokleiłem te definicje, ale dalej nie działa. R/W jest do masy.
  • REKLAMA
  • #4 9316102
    Karol966
    Poziom 31  
    To napisz prosty program, który będzie mrugał diodą i sprawdź czy w ogólne programujesz poprawnie procesor. Wykorzystaj nawet cały port, którym później sterujesz LCD i zobacz czy coś się na nim dzieje. Możesz też tak jak teraz na programie dla LCD podłączyć diody do tych linii i zobaczyć czy cokolwiek się tam zmienia.
  • #5 9316207
    finger6
    Poziom 11  
    Po podłączeniu LEDów do portu D zamiast wyświetlacza mam coś takiego :
    LED0 czyli RS nie świeci
    LED1 - E - świeci stale
    LED2 - DB4 miga z częstotliwością 1Hz
    LED3 - DB5 świeci stale
    LED4 - DB6 miga tak samo jak LED2
    LED5 - DB7 świeci stale

    Przy resecie procesora LED0 też mignie.

    Napisałem prosty program PORTD = PINB; i działa.


    Edit :
    Pojawił się przełom. Wszystko zaczęło działać jak zmieniłem kwarc 8Mhz na wewnętrzny rezonator 1Mhz, powyżej 1 Mhz dalej nie działa.
REKLAMA