Hallo, Ich versuche vergeblich ein LCD mit dem SED1531 Controller mit einem Atmega16 anzusprechen. Das ist mein zweites programm (auszug von serdisplib) geht auch nicht, viellleicht findet jemand den fehler, oder hat schon eine libary zum ansprechen von dem disply,würde mir sehr helfen danke im voraus !!! #include <avr/io.h> #include <avr/sfr_defs.h> #include "font6x8.h" #ifndef F_CPU #define F_CPU 1000000UL /* Quarz mit 1 (intern) Mhz */ #endif #include <util/delay.h> void init() { //JTAG Port beim ATmega16 disablen. Standardmaessig sind Ports PC2..PC5 durch JTAG-Schnittstelle belegt! MCUCSR |= JTD; //Dazu Bit 'JTAG Disable' in Register MCUCSR setzen - gemaess Datenblatt 2x !! MCUCSR |= JTD; //alternativ koennte auch per Programmer das Fusebit JTAGEN in 'hfuse' auf 0 programmiert werden //Initialize Port C als Ausgange DDRC |= 0xff; } /* Schreibt Daten auf den Ports wo das Display Liegt (in dem fall an einem Port C)*/ void lcd_SendToLCD(unsigned char data) {PORTC = data; _delay_ms(1); } /* Erzeugt Display Ausgabe 8 - Bit für direkte Ausgabe an den Display Port */ void lcd_Write(unsigned char adr,unsigned char data) { // Variablen für den Programm ablauf unsigned char zae; unsigned char td; char Backlight = 1; // Display Optionen ( Direkt als Position im Byte) unsigned char cRes = 32; // -Reset unsigned char cNCS = 16; // -CS unsigned char cCS = 8; // CS unsigned char cA0 = 4; // A0 unsigned char cSCL = 2; // SCL unsigned char cSI = 1; // SI unsigned char cBL = 128; // Hintergrundbeleuchtung /* Alle Display Optionen Abfragen und werte Setzen */ // Backlight if (Backlight == 1) { td = (cRes | cBL ); // Reset Inaktiv und Backlight an; } else { td = (cRes | cBL ); // Reset inaktiv und Backlight aus } td = td | cCS; // CS = 1 und /CS = 0 => SED1531 ausgewhäl // Command oder Byte if (adr>0) td = td | cA0; // A0 hinzu // Datenbits rauschieben, MSB zuerst for (zae=0;zae <=7;zae++) { if ((data & 0x80) !=0) { td = td | cSI; } else { td = td & ~cSI; } // Auf Port Schreiben lcd_SendToLCD(td); lcd_SendToLCD(td | cSCL); // Takt ausgeben lcd_SendToLCD(td); // Daten weiterschieben data = data << 1; } // CS Zurücknehmen td = td & (~cCS)| cNCS; lcd_SendToLCD(td); } /* Display Initialiesieren */ void lcd_InitDisplay(){ unsigned char cRes = 32; // - Reset // Zuerst ein LCD Reset Durchführen lcd_SendToLCD(0); lcd_SendToLCD(cRes); // LCD Init lcd_Write(0,64); // Start Display Line = 0 lcd_Write(0,161); // ADC = invers (gespiegelte Anzeigerichtung) lcd_Write(0,162); // LCD-Bias = 1/6 lcd_Write(0,47); // LCD-Spannungserzeugung / Regelung ein // hier eigentlich contrast regelung aber .... pipi lcd_Write(0,0x80 | 31); lcd_Write(0,164); // Displaytest aus, damit nicht irgendein standbymode aktiviert wird lcd_Write(0,175); // Display ein } /* Display Contrast Regelung */ void lcd_SetContrast(short nLevel) { if(nLevel < 0) nLevel = 0; if(nLevel > 31) nLevel = 31; lcd_Write(0,0x80 | nLevel); // Contrast set 0xF } /* Clear SET BMP */ void lcd_ClearDisplay() { int page,colum; for(page=0;page <=7;page++) { // Seitenadrese wählen lcd_Write(0,0x80 | page); // Spaltenadresse = 0 (ganz | links) lcd_Write(0,0x10); lcd_Write(0,0x00); // Daten einer Page setzen for (colum=3;colum <=117;colum++) { lcd_Write(1,0x00); } for (colum=0;colum <=2;colum++) { lcd_Write(1,0x00); } for (colum=118;colum <=120;colum++) { lcd_Write(1,0x00); } } } /* text ausgeben */ void lcd_WriteSign(unsigned char byte) { int column; for(column = 0;column <=5;column++) { lcd_Write(1,pgm_read_byte(&Font[byte][column])); } } void lcd_SetPosition(short nCol,short nRow) { int x; if(nCol < 1) nCol = 1; if(nRow < 1) nRow = 1; x = (nCol-1) * 6 ; // x start lcd_Write(0,0x10 | ((x & 0xf0)>>4)); lcd_Write(0,0x00 | (x & 0x0f) ); // y-start lcd_Write(0,0xB0 |nRow-1); } int main() { init(); lcd_InitDisplay(); lcd_SetPosition(1,1); lcd_WriteSign(1); int i; for(i=0;i<100;i++) { lcd_WriteSign(i+125); lcd_SetPosition(1,i); } return 1; }
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.