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

Wyświetlacz LCD i oscylator zewnętrzny nie działa

wartal10 01 Lis 2009 15:42 1619 8
  • #1 7202086
    wartal10
    Poziom 10  
    Jak uruchomić wyświetlacz LCD przy rezonatorze zewnętrznym 16 MHz w atmega32. Bo z generatorem zewnętrznym 1MHz działał dobrze natomiast z zewnętrznym nic nie wyświetla.
    Sterownik wyświetlacza HD44780 on chyba pracuje z częstotliwością 2 MHz ale czy to jest powód?
    Sam kod programu nie ma znaczenia, bo przy 1MHz działa niezawodnie a tutaj przy 16MHz pojawiają sie problemy.
    Proszę o pomoc.
    Efekt jest taki, że nic nie wyświetla.
  • #2 7202103
    Ture11
    Poziom 39  
    Coś może w fusebitach? Był taki jeden, którego się włączało dla wyższych częstotliwości. Poza tym zmieniłeś w programie wpis o częstotliwości zegara? Jak coś możesz spróbować napisać prosty program włączający/ wyłaczający diodę co 1 sekundę i zobaczysz o co się rozchodzi.
  • #3 7202197
    wartal10
    Poziom 10  
    Ture11 napisał:
    Coś może w fusebitach? Był taki jeden, którego się włączało dla wyższych częstotliwości. Poza tym zmieniłeś w programie wpis o częstotliwości zegara? Jak coś możesz spróbować napisać prosty program włączający/ wyłaczający diodę co 1 sekundę i zobaczysz o co się rozchodzi.
    A to nie ma tak ze LCD dział np do czestotliwości 2MHz a pozniej jest za szybko ??? Chyba nie ............. Dioda jak to dioda miga szybciej i tyle ( w sensie odstepmiedzy zapalaniem i zgaszaniem 30 ms) w ksiazce R.Baranowskiego raz ma właczony wewnetrzny oscylator a raz zewnetrzny i wedłu niego powinno działać
  • #4 7202204
    Tomasz.W
    Poziom 35  
    wartal10 napisał:
    ...Jak uruchomić wyświetlacz LCD przy rezonatorze zewnętrznym 16 MHz w atmega32. Bo z generatorem zewnętrznym 1MHz działał dobrze natomiast z zewnętrznym nic nie wyświetla....
    Pytanie podstawowe jaki to wyświetlacz.
    Robiłem układy z zegarami 8 MHz i więcej i problemów nigdy nie było. A czy jesteś pewien że procesor przy tym kwarcu (tej częstotliwości) pracuje poprawnie?
    wartal10 napisał:
    ...Sam kod programu nie ma znaczenia...
    Ma znaczenie, i to podstawowe. Jeżeli podmieniłeś kwarce a nie wprowadziłeś zmian w programie to wszystko się rozjedzie.
  • #5 7202205
    grysek
    Poziom 19  
    W jakim języku piszesz?
  • #6 7202342
    mirekk36
    Poziom 42  
    a co za różnica czy wewnętrzny oscylator czy zewnętrzny rezonator ??? ŻADNA różnica. Poprawnie napisany kod będzie działał przy każdej częstotliwości taktowania i obojętnie czy wewnętrznej czy zewnętrznej. ..... tym bardziej gdy noga RW wyświetlacza podpięta jest do GND

    twój problem leży zapewne albo w ustaiwaniu fusebitów - albo deklaracji częstotliwości taktowania procesora - choć ciężko dojść z twoich postów w czym programujesz - ale obstawiam, że Bascom - jeśli tak to zaprzyjaźnij się z dyrektywą $crystal
  • #7 7202401
    wartal10
    Poziom 10  
    mirekk36 napisał:
    a co za różnica czy wewnętrzny oscylator czy zewnętrzny rezonator ??? ŻADNA różnica. Poprawnie napisany kod będzie działał przy każdej częstotliwości taktowania i obojętnie czy wewnętrznej czy zewnętrznej. ..... tym bardziej gdy noga RW wyświetlacza podpięta jest do GND

    twój problem leży zapewne albo w ustaiwaniu fusebitów - albo deklaracji częstotliwości taktowania procesora - choć ciężko dojść z twoich postów w czym programujesz - ale obstawiam, że Bascom - jeśli tak to zaprzyjaźnij się z dyrektywą $crystal
    Nie . programuje w C.
  • #9 7203171
    wartal10
    Poziom 10  
    mirekk36 napisał:
    ok czyli problem na 1000% leży tylko i wyłącznie w kodzie (czasy opóźnień?) i/lub fuski
    ja korzystam z funkcji opóźnień z biblioteki " #include <util/delay.h> " i ustawiam
    
    #ifndef F_CPU
    /* prevent compiler error by supplying a default */
    # warning "F_CPU not defined for <util/delay.h>"
    #define F_CPU 16000000 //zegar na 16 MHz
    #endif
    

    wiec chyba nie powinno byc problemu a
    i wysyłanie instrukcji wyglada tak

    
    void instrukcja_LCD(unsigned char instrukcja)
    	{
    		OffRS;
    		OnE;
    		PortOut=(PortOut&0x0f)|(instrukcja&0xf0);
    		_delay_us(4);	
    		OffE;
    		_delay_us(48);
    		_delay_us(48);
    		
    		OnE;
    		PortOut=(PortOut&0x0f)|((instrukcja&0x0f)<<4);
    		_delay_us(4);	
    		OffE;
    		_delay_us(48);
    		_delay_us(48);
    	
    	}
REKLAMA