Hilfe bei 128x64Display mit T6963

Gast #442274
Lesenswert?

Ja ich weiß es gibt einige Beitrage zu T6963.
Ich brauch nur hilfe zur Initialisierung des Baustein. Ich habe von 
Deltaware-Solutions ein Kit mit einen Mega32 und einem Display mit einer 
Auflösung von 128x64. Ich programmiere mit AVR-Studio-GCC.

Wie soll der Initialisierungsteil aussehen, wenn ich nur den Textbereich 
nutzen möchte?

Zudem möchte ich danach gleich ein Zeichen zur Kontrolle auf dem Display 
an Position 3 in 4 Rheie darstellen. Zeichen soll "M" sein.

Gruß
Gast #442279
Lesenswert?

Im Datenblatt des T6963 stehts doch drin, wie das geht.

1. Textbase initialisieren (Adresse innerhalb des RAM definieren)
2. TextArea initialisieren (Zeichen/Zeile)
3. Adresspointer auf richtige Stelle setzen
4. "M" schreiben

poste mal, was Du an Code hast, dann schaun mer mal drüber.
Gast #442288
Lesenswert?

#include <avr/io.h>

#define LCD_CONTROL_PORT    PORTA
#define LEDred        0
#define LEDyellow      1
#define LEDgreen      2
#define WR        3  //Write     Low-Aktive  eigentlich: /WR
#define RD        4  //Read      Low-Aktive  eigentlich: /RD
#define CE        5  //Chip enable  Low-Aktive  eigentlich: /CE
#define CTRL_DATA      6  //0=Data  1=Controlcomanndo
#define RESET        7  //RESET    Low-Aktive  eigentlich: /RESET

#define LCD_READ_PORT    PINC
#define LCD_DATA_PORT    PORTC
#define STA0        0
#define STA1        1

//#####Deklaration##########
void LCD_write(uint8_t data);
void LCD_SEND_DATA(unsigned char data);
void LCD_SEND_COMMAND(unsigned char command);
void LCD_check_status(void);
void lcd_init(void);
void LCD_SET_ADRESS_POINTER(unsigned char high_nibble, unsigned char 
low_nibble);
//#####Hauptprogramm########
int main(void)
{
  LCD_CONTROL_PORT = 0xFF;      //alles Ausgang
  lcd_init();
  PORTA=0x05;      //green und red an
  LCD_write(0x2D);    //
  while(1)
  {
  }
}


void LCD_write(uint8_t data)
{
  uint8_t command = 0xC0;      //Schreibe Displaydaten und erhöhe 
Adresspointer um 1
  LCD_SEND_DATA(data);
  LCD_SEND_COMMAND(command);
}

void LCD_SEND_DATA(unsigned char data)
{
  LCD_check_status();
  DDRC  = 0xFF;            //LCD_DATA_PORT ausgang schalten
  LCD_CONTROL_PORT &= ~(1<<CTRL_DATA);    //DATA aktivieren
  LCD_CONTROL_PORT &= ~(1<<WR) | (1<<CE);
  LCD_DATA_PORT = data;        //Daten zum Eeprom senden
  LCD_CONTROL_PORT |= (1<<WR) | (1<<CE);
}

void LCD_SEND_COMMAND(unsigned char command)
{
  LCD_check_status();
  DDRC  = 0xFF;            //LCD_DATA_PORT ausgang schalten
  LCD_CONTROL_PORT |=  (1<<CTRL_DATA);  //COMMAND aktivieren
  LCD_CONTROL_PORT &= ~(1<<WR) | (1<<CE);
  LCD_DATA_PORT = command;        //Daten zum Eeprom senden
  LCD_CONTROL_PORT |= (1<<WR) | (1<<CE);
}
void LCD_check_status(void)
{
  DDRC  = 0x00;                //LCD_DATA_PORT als Eingang setzen
  LCD_CONTROL_PORT &= ~(1<<RD) | (1<<CE);          //Bit löschen
  LCD_CONTROL_PORT |=  (1<<WR) | (1<<CTRL_DATA);  //Bit setzen
  while(bit_is_clear(LCD_READ_PORT,STA0) | 
bit_is_clear(LCD_READ_PORT,STA1) );
  //Wiederhole solange mind. einer 0
}
void lcd_init(void)
        {
  unsigned int t;
  LCD_CONTROL_PORT = 0xFF;
  DDRC=0xFF;
  PORTA=0xFF;
  LCD_CONTROL_PORT &= ~(1<<RESET);      // Display Reset
  for (t=0; t<1000; t++)
  {}              // Reset
  LCD_CONTROL_PORT |= (1<<RESET);      // Display Reset fertig

  LCD_SEND_COMMAND(0x80);       // OR-Mode


  LCD_SEND_DATA(0x00);    // Text Home Adresse auf 0x0000 setzen
  LCD_SEND_DATA(0x00);
  LCD_SEND_COMMAND(0x40);    // Set Text Home Adress

  LCD_SEND_DATA(0x0F);    // 0FH = 16 Zeichen
  LCD_SEND_DATA(0x00);    // Text AREA Adress setzen
  LCD_SEND_COMMAND(0x41);

     LCD_SEND_DATA(0x03);          // Cursor Pointer setzen
     LCD_SEND_DATA(0x04);
     LCD_SEND_COMMAND(0x21);


     LCD_SEND_COMMAND(0x9C);       // Text an Grafik aus

     LCD_SET_ADRESS_POINTER(0x00,0x00);

}


void LCD_SET_ADRESS_POINTER(unsigned char high_nibble, unsigned char 
low_nibble)
{
  LCD_SEND_DATA(low_nibble);
     LCD_SEND_DATA(high_nibble);
     LCD_SEND_COMMAND(0x24);    // Set Adresspointer
}

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren