LCD mit M50530 Controller an Atmega 8515

OP #677960
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...
#677974
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
OP #678357
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.
#678775
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
Angehängte Dateien:
#684475
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... ;-)

...
OP #684543
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??
Gast #684785
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
#685019
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
Angehängte Dateien:

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren