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.