Hallo...
ich habe einen LCD ADD ON 2,5 gekauft und habe es mit meine Atmega8 Board angeschlossen...es zeigt nur schwarze Balken....
was mache ich falsch??
lcd.h habe ich von Peter Fleury untergeladen und angepaßt.
Druckbare Version
Hallo...
ich habe einen LCD ADD ON 2,5 gekauft und habe es mit meine Atmega8 Board angeschlossen...es zeigt nur schwarze Balken....
was mache ich falsch??
lcd.h habe ich von Peter Fleury untergeladen und angepaßt.
wäre nett wenn jemand mir einen Tip geben kann
Wie sieht deine Anschaltung an dein Board aus.
Die lib von Fleury funktioniert sonst sehr gut.
Etwas genauerer Angaben zu dem LCD wären auch gut, Datenblatt.
Wie viele schwarze Balken zeigt dein Display, wenn es nur einer ist, dann ist das Disp nicht initialisiert, wenn alles schwarz ist, dann mal am Kontrastregler drehen.
ich hab folgende Board Atmega8 MK1 LPT
http://shop.myavr.de/index.php?sp=ar...sp.php&artID=4
und das Dsiplay ADD ON 2,5 auch von myavr.
das Display zeigt in der 1. Zeile nur 16 schwarze Balken.
ich habe auch and dem Kontarstregler gederht ...ich sehe keine zeichen auf dem Display außer schwarze Balken.
Gruß...
leider ist das Datenblatt 700 kb und kann es nicht hochladen...aber unter der link kann man es sich runterladen (700kb)
http://shop.myavr.de/index.php?sp=ar...p.php&artID=15
Poste bloß nicht deinen Code... man könnte sonst nen Fehler finden.
Dann heisst es in der lcd1.h erst
#define LCD_PORT PORTD
dann
#define LCD_PORT PORTB
das kann nicht funktionieren.
hier ist der Code....
Hast du den Port angepasst?!
ja ich habe es angepaßt...aber es läuft trotzdem nichts.
Teste mal den Code:
Code://---------------------------------------------------------------------------
// Titel : myAVR Beispiel "LCD Ausgabe auf einer Zeile" für den ATmega8/48/88/168
//---------------------------------------------------------------------------
// Funktion : gibt eine Zeichenkette auf dem myAVR LCD Modul, 1 Zeile
// Schaltung : PORTD.2 = RS, PORTD.3 = E, PORTD.4-7 = D4-7
//---------------------------------------------------------------------------
// Prozessor :
// Takt : 3.6864 MHz
// Sprache : C
// Datum : 09.11.2007
// Version : 1.0
// Autor : S. Hänsel
// Programmer : ...
// Port : ...
//----------------------------------------------------------------------
#define F_CPU 3686400
#include <avr\io.h>
#include <util\delay.h>
/////////////////////////////////////////////////////////////////////////////
// allgemeine-Funktionen
//---------------------------------------------------------------------------
// waitMs(..) - Wartet einige Millisekunden
// Die Dauer ist nicht kalibriert.
// PE: miliSec=Anzahl der zu wartenden Millisekunden
//---------------------------------------------------------------------------
void waitMs(int miliSec)
{
_delay_loop_2( 1*(F_CPU/(1000/4)) * miliSec); // 4 Zyklen warteschleife
}
void waitUs(int mikroSec)
{
_delay_loop_2( 1*(F_CPU/(1000000/4)) * mikroSec); // 4 Zyklen warteschleife
}
//////////////////////////////////////////////////////////////////////////////
// LCD-Funktionen für myAVR-Board + myAVR-LCD
// 4-BitModus an PortD Bit 4-7
// PortD Bit 2 = RS, high=Daten, low=Kommando
// PortD Bit 3 = E, high-Impuls für gültige Daten
//---------------------------------------------------------------------------
// lcdSend(..) - sendet ein Byte an LCD im 4-Bit-Modus
// RS muss vorher richtig gesetzt sein
// PE: data=zu sendendes Byte
//---------------------------------------------------------------------------
void lcdSend(char data)
{
// aktuelles RS ermitteln
char rs=PORTD;
rs&=4;
// High-Teil senden
char tmp=data;
tmp&=0xf0;
tmp|=rs;
PORTD=tmp;
// Schreibsignal
sbi(PORTD,3);
cbi(PORTD,3);
// Low-Teil senden
tmp=data;
tmp&=0x0f;
tmp*=16;
tmp|=rs;
PORTD=tmp;
// Schreibsignal
sbi(PORTD,3);
cbi(PORTD,3);
// verarbeiten lassen
waitMs(1);
}
//---------------------------------------------------------------------------
// lcdCmd(..) - sendet ein Kommando an LCD
// PE: cmd=Kommando-Byte
//---------------------------------------------------------------------------
void lcdCmd(char cmd)
{
cbi(PORTD,2); // RS löschen = Kommando
lcdSend(cmd); // senden
}
//---------------------------------------------------------------------------
// lcdWrite(..) - sendet ein Zeichen (Daten) an LCD
// PE: text=Zeichen
//---------------------------------------------------------------------------
void lcdWrite(char text)
{
sbi(PORTD,2); // RS setzen = Daten
lcdSend(text); // senden
}
//---------------------------------------------------------------------------
// lcdWrite(..) - sendet eine Zeichenkette an LCD
// Die Zeichenkette muss mit 0x00 abgeschlossen sein
// PE: pText=Zeiger auf Zeichenkette
//---------------------------------------------------------------------------
void lcdWrite(char* pText)
{
while(pText[0]!=0)
{
lcdWrite(pText[0]);
pText++;
}
}
//---------------------------------------------------------------------------
// lcdWrite(..) - sendet eine Zeichenkette an LCD
// PE: pText=Zeiger auf Zeichenkette
// count=Anzahl der zu sendenden Zeichen
//---------------------------------------------------------------------------
void lcdWrite(char* pText, int count)
{
while(count!=0)
{
lcdWrite(pText[0]);
pText++;
count--;
}
}
//---------------------------------------------------------------------------
// lcdHome(..) - Cursor auf Position 1,1
//---------------------------------------------------------------------------
void lcdHome()
{
lcdCmd(0x02);
waitMs(2); // warten
}
//---------------------------------------------------------------------------
// lcdClear(..) - löscht die Anzeige im LCD
//---------------------------------------------------------------------------
void lcdClear()
{
lcdCmd(0x01);
waitMs(2); // warten
}
//---------------------------------------------------------------------------
// lcdOn(..) - schaltet das LCD an
//---------------------------------------------------------------------------
void lcdOn()
{
lcdCmd(0x0E);
}
//---------------------------------------------------------------------------
// lcdOff(..) - schaltet das LCD aus
//---------------------------------------------------------------------------
void lcdOff()
{
lcdCmd(0x08);
}
//---------------------------------------------------------------------------
// lcdGoto(..) - setzt die Cursorposition
// PE: row = Zeile 1..2
// col = Spalte 1..16
//---------------------------------------------------------------------------
void lcdGoto(int row, int col)
{
row--; // Null-basierend
row&=0x01; // sicherheitshalber
row*=0x40; // Zeile nach Bit 6 bringen
col--; // Null-basierend
col&=0x0f; // sicherheitshalber
char tmp=row|col;
tmp|=0x80; // Cursor setzen
lcdCmd(tmp); // senden
}
//---------------------------------------------------------------------------
// lcdInit(..) - Schaltet die Ports und Initialisiert das LCD
//---------------------------------------------------------------------------
void lcdInit()
{
// Port D = Ausgang
DDRD=0xff;
PORTD=0;
// warten bist LCD-Controller gebootet
waitMs(50);
// SOFT-RESET
PORTD = 0x30; //0b00110000;
sbi(PORTD,3);
cbi(PORTD,3);
waitMs(5);
PORTD = 0x30; //0b00110000;
sbi(PORTD,3);
cbi(PORTD,3);
waitUs(100);
PORTD = 0x30; //0b00110000;
sbi(PORTD,3);
cbi(PORTD,3);
waitMs(5);
// 4-BitModus einschalten
PORTD=0x20;
// Schreibsignal
sbi(PORTD,3);
cbi(PORTD,3);
waitMs(5);
// ab hier im 4-Bit-Modus
lcdCmd(0x28); // Funktions-Set: 2 Zeilen, 5x7 Matrix, 4 Bit
//lcdOff();
lcdCmd(0x06); // Entry Mode
lcdOn();
lcdClear();
}
//---------------------------------------------------------------------------
// Main-Funktion
//---------------------------------------------------------------------------
int main (void)
{
waitMs(200);
lcdInit();
lcdGoto(1,1);
lcdWrite("Hallo myAVR!");
while (1) { } // Mainloop
return 0;
}
//---------------------------------------------------------------------------