mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik LCD an ATMEGA zum xten...


Autor: Thilo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
LCD die 100ste...

Tag Ihr Leute.

Bevor ich mit meinem Problemchen beginne:
Ja, ich habe diese Forum durchsucht und
Ja, ich habe andere Foren durchsucht und
Ja, ich habe auch Google & Konsorten bemüht.

Nun folgendes:
Ich hab eine 2x16 DotMatrix-LCD mit  HDD44780-Controller (nicht 
kompatibel, sondern genau DER) an einen ATmega16 (auf dem Pollin-Board) 
angeschlossen und der weigert sich, das zu initialisieren bzw. 
Anzusprechen. Das Display ist i.O. (läuft an C51) und weist das übliche 
(14-)Pinout auf.
Da es, wie gesagt, an einem anderen Controller (89s8252) läuft, gehe ich 
davon aus, dass es ein Programmierfehler ist.

(Fest) verdrahtet ist es folgendermassen:
4 RS - C.4
5 RW - GND
6 EN - C.5
7 D0 - GND
.
.
10 D3 - GND
11 D4 - C.0
12 D5 - C.1
13 D6 - C.2
14 D7 - C.3

RW ist an GND, da mich das BSY nicht wirklich interessiert, ich habe 
zeit...
Ich wäre nun wahnsinnig dankbar, wenn sich jemand den Quelltext (anhang) 
mal ansehen könnte und mir dann sagt, was ich da falsch mache. Ich gehe 
nämlich mal davon aus, dass ich da als AVR & WinAVR - Neuling irgendwas 
vergessen habe.

Besten Dank auf jeden Fall,

Thilo

Autor: Thilo (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
anhang hat wohl  nicht geklappt... hier der src.

Autor: Michael U. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

sieht für mich auf die Schnelle recht glaubwürdig aus.

Aaaaber....
Mega16.... JTAG-Fuse aktiv?
Dann ist PortC.2 bis 5 mit dem JTAG belegt.

Nimm einen anderen Port als C oder/und lies Dich über die Fuses schlau 
und über eventuelle Probleme damit.

Gruß asu Berlin
Michael

Autor: pluto (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,
Du solltest nach jedem Enable eine Pause einlegen, wie lange die ist 
hängt von deinem Display ab.
Das Programm ist sehr umständlich geschrieben. Kann es sein das Du im 4 
Bit modus falschrum sendest, also Hi-nibble und Low-nibble vertauscht.
Hab mir das nicht so genau angeschaut aber Du solltest Dir ein paar 
Routinen bauen die ein Byte in die Nibbles zerlegt und dann entsprechend 
die Enablepulse geben. Das macht das ganze viel Transparenter

Ich hoffe ich konnte Dir ein paar Denkanstöße geben.

Autor: Thilo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank! Die JTAG-Fuse war's. Es gibt halt immer was, woran man 
nicht denkt...
Auch Danka an Pluto, werde mich mal an die SWAP-Routinen machen. In 
c51-ass wär das ganz einfach : ) Aber bietet GCC nicht auch ne fertige 
routine für den Fall. Oder hast Du zufällig ein Code-Snippet?

Thomas

Autor: pluto (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das sollte es sein..

data=((uint8_t)data)>>4|(data<<4);

Autor: Thilo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
das nenn ich kryptisch : )
der schiebt mir also im prinzip die oberen vier bit auf die unteren 
vier?

Autor: pluto (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ist einfach ein swap...
Die Oberen 4Bit runter die Unteren 4Bit rauf.

Autor: Michael U. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich sag es mal so: es wird eine Kopie von data als 8Bit-Wert erzeugt, 
diese wird 4x rechts verschoben.
Dann wird eine Kopie erzeugt, die 4x nach links verschoben wird.
Dann werden die beiden Kopien oder-Verknüft und nach data kopiert.

Wenn der Compiler gut ist, merkt er, was er da triben soll und benutzt 
den ASM-Befehl:
swap data
Wenn er nicht klug ist, macht er es wie beschrieben:

((uint8_t)data)>>4
mov temp1,data
lsr temp1
lsr temp1
lsr temp1
lsr temp1

(data<<4)
mov temp_2,data
lsl temp2
lsl temp2
lsl temp2
lsl temp2

|
or temp1,temp2

data=
mov data,temp1

Alle möglichen Varianten dazwischen hängen auch von der 
Optimierungsstufe ab. ;)

Gruß aus Berlin
Michael

Autor: Schorsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Wenn er nicht klug ist, macht er es wie beschrieben:

Wie macht es der GCC? Hat mal jemand geschaut?

Autor: Thilo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ihr seid gaaanz grosses kino, Jungens. Danke

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.