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ß
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.
hups - hab ich vergessen: Das Display muss via der entsprechenden Register eingeschaltet werden und auf Text-Mode definiert werden.
#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
}
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.