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

[atmega8][bascom] LCD 4x40 Optrex DMC40401 na m50530-001FP

Vampir8 10 Sie 2008 08:48 5987 6
REKLAMA
  • #1 5425488
    Vampir8
    Poziom 16  
    Witam

    Tak jak w tytule posiadam taki wyświetlacz z noty katalogowej układu m50530 wypisałem sobie wyprowadzenia pinów
    1 DB7
    2 DB6
    3 DB5
    4 DB4
    5-8 DB3-DB0
    9 EX
    10 RW
    11 C1
    12 C2
    13 VLCD
    14 GND
    15 Vcc
    Backlight A
    Backlight K

    po podłączeniu zasilania zaświeca mi się pierwsza górna linia i polowa drugiej, wyświetlacz na pewno jest dobry bo został wyciągnięty jak jeszcze działał, i miał takie same objawy ja teraz tylko ze potem ekran czyścił się i coś się wyświetlało. Teraz mam problem pod łączenia tego pod atmege8 lub atmege32 ponieważ mam dwie linie C1 i C2, nie mam pojęcia jak to ugryźć, programuje w Pascalu ale jak by było w bascomie albo innym to nie będzie źle

    zdjęcie wyświetlacza
    [atmega8][bascom] LCD 4x40 Optrex DMC40401 na m50530-001FP

    Pozdrawiam,
    Vampir8
  • REKLAMA
  • REKLAMA
  • #3 5425506
    Vampir8
    Poziom 16  
    Tylko w opisie jest LCD 8x24 a ja mam 4x40 czyli to bedzie jakas roznica
  • REKLAMA
  • #4 5425510
    ZbeeGin
    Poziom 39  
    Ale masz już sposób komunikacji. No niestety nie wysztko się podaje na tacy. Poza tym masz przecież notę katlogową sterownika z której przecież wyłuskasz jaka jest ogranizacja ekranu w pamięci.
  • #5 5425760
    Vampir8
    Poziom 16  
    [atmega8][bascom] LCD 4x40 Optrex DMC40401 na m50530-001FP
    narazie umiem juz obslugiwac tylko 1 linie

    Dodano po 2 [godziny] 16 [minuty]:

    Wszystko ladnie juz dziala tylko jest nastepny problem
    we wszystkich linich od kolumny 25 taj jakby text przesuwa sie o jeden punkt, a od 36 juz jest normalnie

    foto
    [atmega8][bascom] LCD 4x40 Optrex DMC40401 na m50530-001FP
  • #6 5429284
    Vampir8
    Poziom 16  
    nie chcialo sie wyswietlac bo tasma laczaca lcd byla troche brudna
  • REKLAMA
  • #7 8004886
    nproton
    Poziom 12  
    Kiedyś wpadł mi w ręce wyświetlacz LCD 3x40 OPTREX-50465N na M50530
    W avr-gcc napisałem program do obsługi, może komuś się przyda

    // Obsługa M50530
    
    #include <avr/io.h>
    #include <util/delay.h>
    #include <avr/pgmspace.h>
    
    // P0 - I/OC2
    // P1 - I/OC1
    // P2 - R/W
    // P3 - EX
    // P4 - DB4
    // P5 - DB5
    // P6 - DB6
    // P7 - DB7
    
    #define port_lcd PORTA
    #define ddr_lcd DDRA
    
    inline void lcd_init();
    inline void lcd_clear();
    void lcd_znak(char z);
    inline void lcd_set_e();
    inline void lcd_set_d();
    void lcd_xy(char x,char y);
    void exec();
    void lcd_txt(char *txt);
    void lcd_wc(char z);
    
    int main(){
    	// INICJALIZACJA LCD ***************************
    
    	_delay_ms(50);
    	ddr_lcd=0xff;
    	DDRC=0xff;
    	PORTC=0x00;
    	lcd_init();
    	lcd_set_d();
    	lcd_set_e();	
    	lcd_clear();
    	// DEMO *******************************************************************
    							 //0000000000111111111122222222223333333333
    							 //0123456789012345678901234567890123456789
    	static unsigned char t1[]="DEMO & TEST LCD 3x40, OPTREX DMC-50465N";
    	static unsigned char t2[]="  ATMEL ATmega16@11.0592MHz, AVR-GCC";
    	static unsigned char t3[]="             Linux UBUNTU";
    
    	PORTC=0x01;
    
    
    
    	lcd_clear();
    	lcd_xy(0,0);
    	lcd_txt(t1);
    	lcd_xy(0,1);
    	lcd_txt(t2);
    	lcd_xy(0,2);
    	lcd_txt(t3);
    	
    while(1){}
    
    return 0;
    }
    
    
    
    // ******************************* FUNKCJE LCD
    
    void lcd_xy(char x,char y){
    	char z,a;
    	z=x+(y*40);
    	a=z & 0b11110000;
        a|=0b00000011;
        port_lcd=a;
        exec();
        a=z<<4;
        a&=0b11110000;
        a|=0b00000011;
    	port_lcd=a;
        exec();
    }
    
    
    inline void lcd_init(){
    	lcd_wc(0b11011011); //SF
    }
    
    inline void lcd_clear(){ 
    	lcd_wc(0b00000001); //CH
    	_delay_ms(20);
    }
    
    inline void lcd_set_d(){
    	lcd_wc(0b00110000); //SD
    }
    
    inline void lcd_set_e(){
    	lcd_wc(0b01011000); //SE
    }
    
    void exec(){
    	port_lcd |= _BV(3);
    	_delay_us(20);
    	port_lcd &=~_BV(3);
    	_delay_us(20);
    }
    
    void lcd_znak(char z){
        char x;
        x=z & 0b11110000;
        x|=0b00000001;
        port_lcd=x;
        exec();
        x=z<<4;
        x&=0b11110000;
        x|=0b00000001;
    	port_lcd=x;
        exec();
    }
    
    void lcd_wc(char z){
        char x;
        x=z & 0b11110000;
        port_lcd=x;
        exec();
        x=z<<4;
        x&=0b11110000;
    	port_lcd=x;
        exec();
    }
    
    void lcd_txt(char *txt){
    	char zn;
    	char nr=0;
    	while(1){
    		zn=(txt[nr++]);
    		if(zn!=0){
    			lcd_znak(zn);
    		}else{
    			break;
    		}
    	}
    }
    
REKLAMA