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

[Rozwiązano] Kwestia wyświetlacza 2x8 na Atmega88: czarne pola, testy różnych programatorów i kabli

erektryk 27 Sie 2023 14:58 363 5
REKLAMA
  • #1 20710304
    erektryk
    Poziom 9  
    Witam. Mam problem z wyświetlaczem 2x8 na Atmedze88. PD0 jest podłączony do RS, PD1 jest podłączony do E, PD2 procesora jest podłączony do DB4, PD3 jest podłączony do DB5, PD4 jest podłączony do DB6, PD5 jest podłączony do DB7. Na ekranie pojawiają się tylko czarne pola. Przetestowałem różne programatory oraz kable. Wgrywa wszystko na układ żadnych błędów nie wyświetla i nic. Sprawdziłem też połączenia z wyświetlaczem, kontrast, większe opóźnienia, sterowniki, różne procesory i ekrany. Brak mi już pomysłów co to może być
    L 0x62
    H 0xDF
    E 0xF9
    LB 0xFF




    #include <avr/io.h>
    #include <util/delay.h>
    
    // Definicje dla portów i pinów
    #define LCD_PORT PORTD
    #define RS PD0
    #define E PD1
    #define DB4 PD2
    #define DB5 PD3
    #define DB6 PD4
    #define DB7 PD5
    
    // Funkcje pomocnicze
    void LCD_command(unsigned char cmd) {
        LCD_PORT = (LCD_PORT & 0x3F) | (cmd & 0xC0); // Wysłanie starszych 4 bitów
        LCD_PORT |= (1 << E); // Włączenie linii E
        _delay_us(1); // Krótkie opóźnienie
        LCD_PORT &= ~(1 << E); // Wyłączenie linii E
    
        _delay_us(100); // Czekanie na stabilizację wyświetlacza
    
        LCD_PORT = (LCD_PORT & 0x3F) | ((cmd << 4) & 0xC0); // Wysłanie młodszych 4 bitów
        LCD_PORT |= (1 << E); // Włączenie linii E
        _delay_us(1); // Krótkie opóźnienie
        LCD_PORT &= ~(1 << E); // Wyłączenie linii E
    
        _delay_us(200); // Czekanie na stabilizację wyświetlacza
    }
    
    void LCD_init() {
        // Inicjalizacja wyświetlacza
        LCD_PORT &= ~((1 << RS) | (1 << E) | (1 << DB4) | (1 << DB5) | (1 << DB6) | (1 << DB7));
        _delay_ms(20);
    
        // Ustawienie trybu 4-bitowego
        LCD_PORT = (LCD_PORT & 0x3F) | (0x20 & 0xC0); // Wysłanie starszych 4 bitów
        LCD_PORT |= (1 << E); // Włączenie linii E
        _delay_us(1); // Krótkie opóźnienie
        LCD_PORT &= ~(1 << E); // Wyłączenie linii E
        _delay_us(100); // Czekanie na stabilizację wyświetlacza
    
        // Kontynuacja inicjalizacji
        LCD_command(0x28); // Tryb 4-bitowy, 2 linie, 5x8 pikseli
        LCD_command(0x0C); // Wyłączenie kursora
        LCD_command(0x06); // Przesunięcie kursora w prawo
        LCD_command(0x01); // Wyczyść ekran
        _delay_ms(2);
    }
    
    void LCD_sendChar(unsigned char data) {
        LCD_PORT = (LCD_PORT & 0x3F) | (data & 0xC0); // Wysłanie starszych 4 bitów
        LCD_PORT |= (1 << RS); // Ustawienie bitu RS na 1 (przesyłamy dane)
        LCD_PORT |= (1 << E); // Włączenie linii E
        _delay_us(1); // Krótkie opóźnienie
        LCD_PORT &= ~(1 << E); // Wyłączenie linii E
    
        _delay_us(100); // Czekanie na stabilizację wyświetlacza
    
        LCD_PORT = (LCD_PORT & 0x3F) | ((data << 4) & 0xC0); // Wysłanie młodszych 4 bitów
        LCD_PORT |= (1 << RS); // Ustawienie bitu RS na 1 (przesyłamy dane)
        LCD_PORT |= (1 << E); // Włączenie linii E
        _delay_us(1); // Krótkie opóźnienie
        LCD_PORT &= ~(1 << E); // Wyłączenie linii E
    
        _delay_us(200); // Czekanie na stabilizację wyświetlacza
    }
    
    void LCD_sendString(char *str) {
        int i = 0;
        while (str[i] != '\0') {
            LCD_sendChar(str[i]);
            i++;
        }
    }
    
    int main(void) {
        // Inicjalizacja
        DDRD = 0xFF; // Ustawienie portu D jako wyjście
        LCD_init();
    
        // Wysłanie przykładowego napisu
        LCD_sendString("Hello, LCD!");
    
        while (1) {
            // Główna pętla programu
        }
    
        return 0;
    }[/i][/i]
  • REKLAMA
  • REKLAMA
  • #3 20710335
    erektryk
    Poziom 9  
    Pola są czarne tylko w górnej linijce dolna jest pusta.
  • REKLAMA
  • REKLAMA
  • #5 20711656
    erektryk
    Poziom 9  
    A więc tak, kod z biblioteki którą podałeś zadziałał. Nie obyło się bez problemów ale udało się. Dziękuje bardzo "live long and prosper" :)
  • #6 20714000
    erektryk
    Poziom 9  

    Edytowałem bibliotekę z podesłanego linku, dostosowując ją do swojego wyświetlacza.
REKLAMA