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.