www.mikrocontroller.net

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


Autor: Daniel Steiner (sany)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Reinhard R. (reirawb)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Daniel Steiner (sany)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Reinhard R. (reirawb)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Daniel Steiner (sany)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Daniel Steiner (sany)
Datum:

Bewertung
0 lesenswert
nicht 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 :)

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht 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... ;-)

...

Autor: Daniel Steiner (sany)
Datum:

Bewertung
0 lesenswert
nicht 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:
void lcd_command(unsigned char temp1)
{
   unsigned char temp2 = temp1;
 
   LCD_DDR &= ~(1<<LCD_OC1) | (1 <<LCD_OC2) | (1 << LCD_RW);
 
   temp1 = temp1 >> 4;              // oberes Nibble holen
   temp1 = temp1 & 0xF0;            // maskieren
   LCD_PORT &= 0x0F;
   LCD_PORT |= temp1;               // setzen
   lcd_enable();
 
   temp2 = temp2 & 0xF0;            // unteres Nibble holen und maskieren
   LCD_PORT &= 0x0F;
   LCD_PORT |= temp2;               // setzen
   lcd_enable();
   
   _delay_ms(10);
}

Kann das so funktionieren??

Autor: Thomas Otto (tarzanwiejane)
Datum:

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

cu Tarzanwiejane

Autor: Daniel Steiner (sany)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kannst du mir bitte den für ein Atmega16 zukommen lassen? :)

Autor: Jörg X. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
    temp1 = temp1 >> 4;      //soweit so gut
//    temp1 = temp1 & 0xF0;  //falsch, du maskierst das Highnibble,
                             // in dem aber schon nichts mehr steht

    temp1 &= 0x0F;           //loesch das high nibble (ist UNNOETIG, wenn
                             // temp1 ein 'unsigned char' bzw. uint8_t ist)

/*    LCD_PORT &= 0x0F;
    LCD_PORT |= temp1;
*/
//    lieber ganz sicher gehen:
    LCD_PORT = (temp1 & 0x0F) | (LCD_PORT & 0xF0);
/* "LCD_PORT ist das low-nibble aus temp1 und das highnibble von LCD_PORT"

hth. Jörg

Autor: ES (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wo gibt es das Datenblatt von dem Display?
Habe bis jetzt nichts gefunden.

Autor: Hannes Lux (hannes)
Datum:

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

Beitrag "Re: Display Menü  LCD 4x20"

...

Autor: Thomas Otto (tarzanwiejane)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Hannes Lux (hannes)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Thomas Otto (tarzanwiejane)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Daniel Steiner (sany)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Vielen dank :)

Es ist ein Display aus einem Siemens telefon ;)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.