Forum: Mikrocontroller und Digitale Elektronik LCD mit M50530 Controller an Atmega 8515


von Daniel S. (sany)


Lesenswert?

Hallo Zusammen,

Bin neu hier und möchte gerne mein bereits vorhandenes LCD von Samsung 
aus einem Siemens Telefon mit M50530 Controller an meinen Atmega 8515 
anschliessen.

Ich nutze ein STK500 Board ;)

Die PIN Belegung meines LCD ist folgende:


Pin 01 -> Ground
Pin 02 -> Data0
Pin 03 -> Data1
Pin 04 -> Data2
Pin 05 -> Data3
Pin 06 -> Data4
Pin 07 -> Data5
Pin 08 -> Data6
Pin 09 -> Data7
Pin 10 -> EX
Pin 11 -> R/W
Pin 12 -> OC2
Pin 13 -> OC1
Pin 14 -> 8,2 volt
Pin 15 -> 5 volt
Pin 16 -> Ground

Mein Controller ermöglicht mir eine 4 oder 8 Bit ansteuerung, Ich möchte 
Ihn jedoch mit 4 Bit und ohne Busyleitung ansteuern.

Dazu hab ich Pin 06-09 an PORTC P0-P3 bereits angeschlossen, an P4 liegt 
OC2 und an P5 OC1 und an P6 liegt EX. Mein R/W liegt auf Masse vom 
Netzteil das mit 5 und 8.5V liefert.

Wenn ich jedoch das LCD in dieser Konstellation in Betrieb nehme sehe 
ich in jeder zweiten Zeile Graue Balken. Selbst wenn Data 0 bis Data 3 
auf GND verbunden sind.

Mach ich irgendwas grundsätzlich falsch?

Nun da ich mein Programm mit AVR Studio in GCC Programmieren möchte, 
wollte ich hier mal eben anfragen, wer einen Code oder Treiber für GCC 
hat?

Bitte nicht Bascom, das liegt mir irgendwie garnicht...

Oder kann mir jemand ein Beispielcode geben, wie ich mein Display 
Initialisiere? Hab mir bereits die AVR-GCC tutorials mit dem HD 
Controller angeschaut, aber das hat mich leider nicht wirklich weiter 
gebracht da ich nicht weiß was ich mit OC1 und OC2 anfangen soll... wozu 
dienen die? Das ich diese als Ausgänge setzen muss hab ich schon 
erfahren...

von Reinhard R. (reirawb)


Lesenswert?

Der M50530 ist mit dem HD44780 NICHT kompatibel, Initialisierung
und Programmroutinen vom HD44780 funktionieren nicht.

Über die Forensuche findest du ein paar Infos zum M50530.
Ich habe so ein Display mit M50530 (8 Zeilen x 24 Zeichen) schon
mal zum Laufen gebracht, allerdings im 8-bit Modus in Assembler
an einem AT90S2313. Wenns interessiert kann ich mal die Routinen
hier reinstellen, aber frühestens heute Abend, jetzt habe ich
keinen Zugriff darauf.

Gruß Reinhard

von Daniel S. (sany)


Lesenswert?

Hallo,

Hab hier schon alle Beiträge aus der Foren suche heute Nacht studiert, 
bin aber  nicht effektiv weiter gekommen in dieser Sache.

Hab zwar schon einiges in ASM im 4 Bit Modus hier im Forum gefunden, 
aber entweder ganz andere PIN Belegungen oder 8 Bit Modus, oder so ein 
durcheinander das man da gar nicht durch blickt.

Hab ein Sourcecode mit Anschlussplan gefunden bei frickelfritze.de aber 
da stimmt nicht mal der Sourcecode mit dem Anschlussplan überein.

Aber meine Wichtigste Frage ist ja, ob ich mein LCD so korrekt 
angeschlossen habe?

Die Zwei OC1 und OC2 müssen als Ausgänge Konfiguriert werden.
Die Datenleitungen von DB4 - DB7 müssen als Ein/Ausgang Konfiguriert 
werden.

Kannst gerne mal den Code hier rein stellen.

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Das sieht so aus, als ob bei deiner Initialisierung die Parameter Duty 
und Ram beim Set Function Mode Instruction (SF) nicht stimmen und 
dadurch die falsche Zeilenzahl eingestellt wird. Im Datenblatt, das 
Hannes mal gepostet hat, wäre das die Tabelle 14, die du beachten musst.

von Stefan B. (stefan) Benutzerseite


Lesenswert?

In dem Datenblatt sind I/OC1 und I/OC2 aus Sicht des M50530 Eingänge, 
d.h. eine Einstellung als Output aut dem STK500 stimmt. Welche Werte du 
ausgeben musst, ist im Datenblatt bei den einzelnen Instruktionen in den 
Tabellen aufgeführt.

von Reinhard R. (reirawb)


Angehängte Dateien:

Lesenswert?

So, wie versprochen meine Versuche mit dem M50530 in Wort (Assembler)
und Bild.

Die Grundroutinen habe in die "0282Adef.inc" gepackt, die in das
Hauptprogramm direkt includiert werden kann. Ist auch einigermaßen
kommentiert.

Die beiden .asm-Programme sind nur mal so zum Testen gewesen, da sind
noch Definitionen und Teile von anderen Anwendungen drin, Kommentare
sind auch eher weniger. Also nicht so genau hinsehen, habe sie nur
dazugepackt um zu zeigen, wie die Bilder entstanden sind.

Gruß Reinhard

von Daniel S. (sany)


Lesenswert?

Hallöchen,

Danke für die Unterstützung, werde ggf. wenn ich mit meinem GCC Code 
nicht weiter kommen sollte, einfach hier neu dazu Posten, in der 
hoffnung das mir jemand licht ins Dunkel bringt :)

Vielen dank!

Daniel

von Daniel S. (sany)


Lesenswert?

Gibts eigentlich einen vernünftigen Initialisierung Code?

Irgendwie hab ich das LCD nicht zum Initialisieren gekriegt, habs auch 
schon an den LPT dran geklemmt und es funktioniert einwandfrei...

Danke :)

von Hannes L. (hannes)


Lesenswert?

Daniel Steiner wrote:
> Gibts eigentlich einen vernünftigen Initialisierung Code?
>
> Irgendwie hab ich das LCD nicht zum Initialisieren gekriegt, habs auch
> schon an den LPT dran geklemmt und es funktioniert einwandfrei...
>
> Danke :)

Also der hier vorgestellte LCD-Treiber ist (aus heutiger Sicht) zwar 
auch nicht das Nonplusultra, aber er funktioniert:
http://www.hanneslux.de/avr/zuenduhr/index.html
Ist allerdings weder in C noch in BASCOM... ;-)

...

von Daniel S. (sany)


Lesenswert?

Hey,

Okay dann werd Ich wohl ein bischen hilfe brauchen.

Und zwar, ich hab folgende Routine die Commands an das LCD schickt.

DB4-DB7 liegt an PC0-3 an
EN => PC04
RW => PC05
OC2 => PC06
OC1 => PC07

Um nun die nibbels zu vertauschen habe ich folgendes programmiert:
1
void lcd_command(unsigned char temp1)
2
{
3
   unsigned char temp2 = temp1;
4
 
5
   LCD_DDR &= ~(1<<LCD_OC1) | (1 <<LCD_OC2) | (1 << LCD_RW);
6
 
7
   temp1 = temp1 >> 4;              // oberes Nibble holen
8
   temp1 = temp1 & 0xF0;            // maskieren
9
   LCD_PORT &= 0x0F;
10
   LCD_PORT |= temp1;               // setzen
11
   lcd_enable();
12
 
13
   temp2 = temp2 & 0xF0;            // unteres Nibble holen und maskieren
14
   LCD_PORT &= 0x0F;
15
   LCD_PORT |= temp2;               // setzen
16
   lcd_enable();
17
   
18
   _delay_ms(10);
19
}

Kann das so funktionieren??

von Thomas O. (tarzanwiejane)


Lesenswert?

Ich haette auch noch Assemblercode fuer nen Mega16 und Mega644 im 4-bit 
Mode. Da funktioniert auch die Initialisierung 8-).

cu Tarzanwiejane

von Daniel S. (sany)


Lesenswert?

Kannst du mir bitte den für ein Atmega16 zukommen lassen? :)

von Jörg X. (Gast)


Lesenswert?

1
    temp1 = temp1 >> 4;      //soweit so gut
2
//    temp1 = temp1 & 0xF0;  //falsch, du maskierst das Highnibble,
3
                             // in dem aber schon nichts mehr steht
4
5
    temp1 &= 0x0F;           //loesch das high nibble (ist UNNOETIG, wenn
6
                             // temp1 ein 'unsigned char' bzw. uint8_t ist)
7
8
/*    LCD_PORT &= 0x0F;
9
    LCD_PORT |= temp1;
10
*/
11
//    lieber ganz sicher gehen:
12
    LCD_PORT = (temp1 & 0x0F) | (LCD_PORT & 0xF0);
13
/* "LCD_PORT ist das low-nibble aus temp1 und das highnibble von LCD_PORT"

hth. Jörg

von ES (Gast)


Lesenswert?

Wo gibt es das Datenblatt von dem Display?
Habe bis jetzt nichts gefunden.

von Hannes L. (hannes)


Lesenswert?

ES wrote:
> Wo gibt es das Datenblatt von dem Display?
> Habe bis jetzt nichts gefunden.

Beitrag "Re: Display Menü  LCD 4x20"

...

von Thomas O. (tarzanwiejane)


Angehängte Dateien:

Lesenswert?

Und alle die das Datenblatt vom Display itself lieber moegen hier noch 
mal direkt das vom Samsung anstatt des Chips auf dem Display.
Wobei man sagen muss das die Zeilenanfangsaddressen falsch sind.

cu Tommi

von Hannes L. (hannes)


Angehängte Dateien:

Lesenswert?

Thomas Otto wrote:
> Und alle die das Datenblatt vom Display itself lieber moegen hier noch
> mal direkt das vom Samsung anstatt des Chips auf dem Display.

Dieses Mini-Datenblatt (vermutlich von Pollin) hilft zwar bei der 
Anschlussbelegung, aber keinesfalls beim Befehlssatz bzw. Init-Sequenz.

> Wobei man sagen muss das die Zeilenanfangsaddressen falsch sind.

Stimmt... - Siehe Anhang...

Und es sind auch LCDs mit unterschiedlichem erweiterten Zeichensatz im 
Umlauf.

>
> cu Tommi

von Thomas O. (tarzanwiejane)


Lesenswert?

@Hannes
Du hast natuerlich recht, man braucht natuerlich beide Datenblaetter um 
mit dem Display arbeiten zu koennen.
8-)
Wobei man sagen muss das die aus den Siemens Telefonen alle den gleichen 
Zeichensatz haben.

cu Tommi

von Daniel S. (sany)


Lesenswert?

Hallo,

Vielen dank :)

Es ist ein Display aus einem Siemens telefon ;)

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
Noch kein Account? Hier anmelden.