LC Display Ansteuerung

OP #1779104
Lesenswert?
• ▲
▼
Hallo,

erst einmal möchte ich mich vorstellen.

Mein Name ist Patrick und ich bin 20 Jahre alt. Momentan absolviere ich 
noch eine Ausbildung im Beruf "Elektroniker für Geräte und Systeme".

Ich habe mir von der Berufsschule aus ein Mikrokontrollerboard, welches 
zum herum experimentieren dienen soll, gekauft :)
Nun möchte ich das LC Display in Assembler ansteuern. Programmiert wird 
in uVision 4 (Keil Compiler) und gebrannt mit Atmel Flip. Habe mich 
schon informiert, wie das alles geht mit den Warteschleifen und den 
Init-Codes usw.
Aber erst einmal hier ein paar Daten:

uC: Atmel T89C51CC01 @ 12MHz
LCD Controller: KS0070B
LC Display: 162C (16Characters x 2 lines)
Portbelegung:

RW     = Ground (sprich: nur schreiben/ kein lesen)
RS     = P2.6
Enable = P2.4
DB7    = P2.3
DB6    = P2.2
DB5    = P2.1
DB4    = P2.0   (sprich: 4-Bit Mode)

Initialisierung laut Datenblatt:

1. Power ON
2. mehr als 15ms warten, nachdem die Beitrebsspannung von 4,5V erreicht 
ist
3. "Function-Set" senden
4. mehr als 4,1ms warten
5. "Function-Set" senden
6. mehr als 100us warten
7. Function-Set senden
8. Display OFF
9. Display Clear
10. Entry Mode Set

Soweit so gut.
Leider bekomme ich die Initialisierung nicht hin!
Das erste Problem ist die Warteschleife. Ich weiß nicht wie ich die 
Warteschleife programmieren soll. Man kann den Timer dafür verwenden 
soweit ich weiß, aber dafür muss man wiederrum wissen wie lang ein 
Maschinenzyklus geht,.... Ich wäre sehr dankbar wenn ich mir mit der 
Warteschleife schon einmal helfen könntet.

Falls ihr noch fragen habt, einfach schreien.

Ich hoffe das waren alle wichtigen Daten und ich habe nichts vergessen.
Gast #1779335
Lesenswert?
• ▲
▼
Du kannst:

-folgendermassen eine Warteschleife einstellen:

--einfach eine solche Warteschleife mit einem beliebigen aber bekannten 
Wert erstellen, darum eine Endlosschleife und in dieser nach jedem 
Durchgang der Warteschleife einen Pin togglen, und die Periodendauer 
dort mit dem Oszilloskop oder einem Frequenzmesser messen. Notfalls kann 
man da mit einem kleinen Aktivlautsprecher und einer Stimmgabel auch was 
improvisieren.

--Wenn Du Assemblersprache benutzt, Anweisungen zaehlen. Ein klassischer 
MCS51- wie dein AT89C51irgendnevariante es vermutlich ist - ist ein 
Zwoelftakter, macht Quarz in Hertz durch zwoelf Anweisungen pro Sekunde. 
Ein paar Anweisungen brauchen die doppelte bis vierfache Zeit (bedingte 
Verzweigungen, wie man sie am Ende einer Schleife oft findet, zum 
Beispiel) - da kannst Du in eine Referenzwerk schauen (Datenblatt, 
Programmierhandbuch...) oder die Ungenauigkeit in Kauf nehmen, da ein 
HD44780 und kompatibel auch mit etwas laengeren Delays klarkommt.

--Wenn Du C benutzt, sieh Dir den generierten Assemblercode an, siehe 
dort


oder


-Eben den Timer benutzen, dieser taktet ebenfalls immer auf die Zwoelf.

oder


-Wissen dass eine "naiv geschriebene" for-Schleife abwaerts mit einem 
long-iterator so an die 20 bis 30 Anweisungen pro Durchlauf kostet (Du 
musst viermal subtrahieren, achtmal den akkumulator be/entladen, viermal 
vergleichen (bzw mit ORL die bytes zusammenpappen um damit den Sprung zu 
steuern), und dann einen bedingten Sprung machen, schon bist Du bei 20 
;). Einfach 200% Sicherheitsfaktor dran und ans nächste Problem. Viel 
kleineroptimieren wird das wohl auch der C Compiler nicht koennen.
Gast #1779543
Lesenswert?
• ▲
▼
ok ich werde es morgen versuchen, den Timer bis 255 zählen zu lassen, 
dann das Timer Overflow Flag an einen Pin ausgeben und diesen dann mit 
einem Oszilloskop anschauen.
Ich denke so hast du es gemeint.
Ich werde mich dann noch einmal melden, danke.
Anbei noch ein Bild, damit ihr/ du noch eine Ahnung habt in welche 
Richtung das ganze geht.
Angehängte Dateien:

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.