Forum: Mikrocontroller und Digitale Elektronik Hilfe bei 128x64Display mit T6963


von Bastelwastel (Gast)


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ß

von marvin (Gast)


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.

von marvin (Gast)


Lesenswert?

hups - hab ich vergessen: Das Display muss via der entsprechenden 
Register eingeschaltet werden und auf Text-Mode definiert werden.

von Bastelwastel (Gast)


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
}

von Bastelwastel (Gast)


Lesenswert?

int main(void)
{
  DDRA = 0xFF;      //alles Ausgang
  lcd_init();
  PORTA=0x05;      //green und red an
  LCD_write(0x2D);    //
  while(1)
  {
  }
}

habe im oberen einen Fehler

von Bastelwastel (Gast)


Lesenswert?

Ich habe 2 Datenblätter. In einem ist Text RAM Area von 0x1700 bis 1BFF 
im Single screen und im anderen ist er von 0x0000 bis 0x7FFF.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.