www.mikrocontroller.net

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


Autor: Bastelwastel (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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ß

Autor: marvin (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: marvin (Gast)
Datum:

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

Autor: Bastelwastel (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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
}

Autor: Bastelwastel (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Bastelwastel (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.