Forum: Mikrocontroller und Digitale Elektronik LCD probs


von Kofi (Gast)


Lesenswert?

gudn abeeend !

ich bins mal wider ... ichhabe das mit dem LED jetzt nohchmal versucht 
aber mit einem neuen HD44780 (20X4) und die  LCD-Routine hier aus dem 
tutorial

DOCH LEIDER SEHE ICH KEIN "TEST" auf dem display ... ich sehe nur 
schwarze balken in der 1. und 3. Zeile ...

wodran kann das liegen ich bin mir nämlich ziemlich sicher das ich es 
diesmal ach richtig verdrahtet habe .... kannich die display beleuchtung 
eigentlich auch an VTG des STK 500 hängen ? die zieht nämlich ordentlich 
strom ?!

von thkaiser (Gast)


Lesenswert?

Der schwarze Balken ist nach dem Einschalten normal und läßt darauf 
schließen, daß die Initialisierung nicht geklappt hat. Evtl. ist der 
Controller zu schnell, welche Taktfrequenz hast Du? Hier und da ein NOP 
mehr kann in diesem Fall nicht schaden.

von Kofi (Gast)


Lesenswert?

8Mhz

ich tu mal ein paar nops dazu

von Kofi (Gast)


Lesenswert?

nöödu gehtleider nicht ;(
ich habe jetzt in jede zeile 2 nop gesetzt bvor fder nächdte befehl 
kommt aber irgendwie hm komisch ...
wennich statt des displays den LED sockel anschließe leuchten die alle 
kein geblinke von einer datenübertragung oderso .. hm normal ?

von thkaiser (Gast)


Lesenswert?

Trotz der NOPs ist der Controller mit Sicherheit so schnell, daß Du an 
den LEDs nichts sehen wirst.
Hast Du ein Oszilloskop zur Verfügung? Falls ja, dann die Steuersignale 
mal damit checken.
Eine andere, relativ einfache Möglichkeit, die Übertragung zu checken: 
Einen Interrupt so setzen (Beispielsweise den INT0), daß er immer 
ausgelöst wird. So wird immer nur ein Befehl ausgeführt und sofort der 
Interrupt angesprungen. Im Interrupt entweder eine lange Zeitschleife 
(ca. 0,5 - 1 sec.) laufen lassen oder einen Taster abfragen (entprellen 
nicht vergessen!). Wenn Du dann die LEDs anschließt, müsstest Du Befehl 
für Befehl sehen, ob und was passiert. Wenn die LEDs über Treiber 
angeschlossen werden, kann man sogar das LCD parallel mit anschließen.
Ansonsten bleiben nur zwei weitere Möglichkeiten: Die Schaltung zum 
X-ten Mal überprüfen, und auch das Programm auf eventuelle Fehler 
prüfen. Wäre nicht das erste Mal, daß ein Port nicht auf Ausgang 
programmiert oder hardwaremäßig schlichtweg vertauscht wurde.

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Wenn du einen 8MHz-Quarz verwendest musst du alle Wartezeiten 
verdoppeln, also am einfachsten indem du die Anzahl der NOPs bei 
lcd_enable verdoppelst und alle Delay-Funktionen zweimal aufrufst. Das 
Tutorial wird gerade überarbeitet, das mit den Delays wird dann über 
Makros gelöst.

von Kofi (Gast)


Lesenswert?

das geht immernoch nicht !
ichhabe jetzt jedamal wo
           rcall delay50us
steht
das hingeschrieben :

           rcall delay50us
           rcall delay50us
und
           rcall delay5ms
durch
           rcall delay5ms
           rcall delay5ms

ersetzt aber passiert nix
dioe LEDs leuchten zwar alle aber am LCD sind nur n' paar schwarze 
balken

von Kofi (Gast)


Angehängte Dateien:

Lesenswert?

es is zum verrückt werden !


DIE blöden led'S leuchten munter vor sich hin und das display hat wie 
immer 2 schwarze balken

ichhabe satt
               nop
               nop
               nop

jetzt
               nop
               nop
               nop
               nop
               nop
               nop

hingescvirben und


"ldi  temp1, $42" durch "ldi temp1, 0x84" ersetzt und
"ldi  temp1, $21" durch "ldi temp1, 0x42"

heul *schnnief*

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Falls du einen anderen Controller als den 4433 verwendest: hast du den 
Stackpointer richtig eingestellt? Siehe 
www.mikrocontroller.net/tutorial/stack.htm.

von Kofi (Gast)


Lesenswert?

UGH !
versteh ' ich net !
also was ein Stackpointer ist weiß ich jetzt aber wie ich das an meinen 
avr anpassen soll weiß ich nicht ??!!

Ich verwende den 4433er -stimmt .. habe einen AT90S8515 genommen :(

Wie kannich den Stackpointer an diesen AVR anpassen ?

Datenblatt:
http://www.atmel.com/dyn/resources/prod_documents/DOC0841.PDF

von Kofi (Gast)


Lesenswert?

ups sollte heißen
Ich verwende den 4433er NICHT

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Zitat von dieser Seite: "Bei Controllern die mehr als 256 Byte RAM 
besitzen (wie z.B. beim 8535) passt die Adresse natürlich nicht mehr in 
ein Byte alleine. Deswegen gibt es bei diesen Controllern noch ein 
Register mit dem Namen SPH, in dem das High-Byte der Adresse gespeichert 
wird. Damit es funktioniert, muss das Programm dann folgendermaßen 
geändert werden:..."

von Kofi (Gast)


Lesenswert?

ja ichhabs gelesen aber ich verstehe den zusammenhang irgendwie nicht

ich versteh das high und lowbis zeug irgendwie nich heul

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Dann schau dir halt mal den Unterschied zwischen den beiden Programmen 
auf der genannten Seite an. Genau diese Änderungen führst du jetzt bei 
deinem LCD-Programm durch, dann funktioniert es.

von Kofi (Gast)


Lesenswert?

ne ich verstehs nich soll ich anstelle von lditemp1, 0x84
jetzt

ldi temp low(0x84) schreiben ?
und dadrunder dec High(Ramed)
???????

von Kofi (Gast)


Lesenswert?

mir ist auch ncoh aufgefallen das an einer stelle steht

           ldi temp1, 0b00000011        ;muss 3mal hintereinander 
gesendet
           out PORTD, temp1             ;werden zur Initialisierung
           rcall lcd_enable             ;1
           rcall delay5ms
           rcall lcd_enable             ;2
           rcall delay5ms
           rcall lcd_enable             ;und 3!
           rcall delay5ms

muss ich das jetzt 2mal dahinschreiben ?

von Carsten Sprung (Gast)


Lesenswert?

Herrgott schenke mir Geduld ;-)

ldi r16,low(ramend)            ;Stackpointer setzen
out spl,r16
ldi r16,high(ramend)
out sph,r16


Gruss Carsten

von Kofi (Gast)


Lesenswert?

frag mich mal nach geduld LOL

oh man assembler ist ja mal END-SCHWUL
aber ich will jetzt endlkiuch mal was auf dem display sehen

ich weiß zwar noch nicht wo ich das

ldi r16,low(ramend) ;Stackpointer setzen
out spl,r16
ldi r16,high(ramend)
out sph,r16
einsetzen soll aber ich schau mal

von Kofi (Gast)


Lesenswert?

in der runtime wird gar kein r16 verwendet ??!!

ich lese jetzt das C tutorial WIE kann man nur assembler können ???

mich würde trotzdem mal interessieren wie es hätte aussehen müssen, 
damit es funzt

oder gibt es nicht irgendwo ein sampel für einen 8515 ?

von Carsten Sprung (Gast)


Lesenswert?

In 8 Bits passen maximal 256 Adressen jede Adresse steht für ein Byte. 
Für den 4433 passt das hier:

ldi r16, RAMEND  ;Stackpointer setzen
out SPL, r16

Weil er nur 128Byte SRAM hat.

Dein 8515 hat 512 Byte SRAM damit passt die Adresse natürlich nicht mehr 
in ein Byte alleine. Deswegen gibt es bei diesen Controller noch ein 
Register mit dem Namen SPH, in dem das High-Byte der Adresse gespeichert 
wird. Damit es funktioniert, muss das Programm dann folgendermaßen 
geändert werden:

ldi r16,low(ramend) ;Stackpointer setzen
out spl,r16
ldi r16,high(ramend)
out sph,r16

Gute N8

von Kofi (Gast)


Lesenswert?

ne warte mal wio soll das
ldi r16,low(ramend) ;Stackpointer setzen
out spl,r16
ldi r16,high(ramend)
out sph,r16

dennn hin ???
bei den LDI sachen steht nur was mit temp

von Carsten Sprung (Gast)


Lesenswert?

r1 bis r31 sind die Namen der Register. Wenn irgendwo steht

ldi temp, 0xFF

dann wurde festgelegt das ein bestimmtes register den namen temp hat. 
Und zwar so:

.def temp = r16

Glaube mir Assembler ist die einfachste Programmiersprache der Welt.

von Kofi (Gast)


Lesenswert?

aha heißt also ich solls gleich aufgeben ? LOL

von Carsten Sprung (Gast)


Lesenswert?

Das wäre eine Möglichkeit. Ob das mit deinem Ehrgeiz zu vereinbaren ist 
bleibt dir überlassen.

Kleiner Tip noch. Abgucken ist erlaubt. Aus dem Assemblercode anderer 
Leute hab ich das Meiste gelernt.

Mir reichts für heut.
Carsten

von Kofi (Gast)


Angehängte Dateien:

Lesenswert?

hmm es muss aber erstmal einen assembler coder von anderen leuten geben 
der passt also  ich gebs auf eure high und low bit adressen kram zeug is 
mirr zu hoch

ichhabe aber nocheinen tiny 26 gefunden der hat nur  128 !
allerdings 16 MHz


müsste doch so gehen oder ? (siehe anhang)

von thkaiser (Gast)


Lesenswert?

@Kofi:
Ich kann Carsten nur recht geben - Assembler ist die einfachste Sprache 
der Welt.
Allerdings hast Du Dein Ziel vielleicht etwas hochgesteckt - wenn man 
beispielsweise C lernt, programmiert man ja nicht gleich eine 
Alternative zu Windows, sondern ein "hello world" Programm. Bei 
Assembler mit Mikrocontrollern ist dies im allgemeinen etwas schwieriger 
- da besteht das "hello world" erstmal daraus, ein paar LEDs leuchten 
oder blinken zu lassen. Ein LCD anzusteuern ist zwar nicht extrem 
schwierig, aber wenn man wirklich keine Ahnung hat, was man da tut - 
eine Stufe zu schwierig (das ist jetzt nicht böse gemeint)
Ich kann Deine Verzweiflung nachvollziehen - ich versuche momentan in 
die objektorientierte Programmierung einzusteigen (PC-mäßig) und habe 
0-Plan.
Ich würde Dir folgende Empfehlung geben: Mach Dich erst mal mit der 
Materie vertraut - ein paar einfache Dinge (was sind Register, was ist 
Speicher, was haben die miteinander zu tun, was ist ein Port usw.) und 
spiele ein wenig mit LEDs rum - wenn der Knoten mal geplatzt ist, dann 
klappts schon.
Und wenn die Situation mal so richtig verfahren ist - eine Nacht drüber 
schlafen, dann gehts auch besser.

von Kofi (Gast)


Lesenswert?

ASSEMBLER IS DOCH SCH*******


danke für deinen tipp
ich denke das duert jetzt erstmal ne weile bis ich wieder runterkomme 
ich hab den ROTZ erstmal deinstalliert

DAS MUSS man sich mal reintun
um ein paar sekunden verzögerung in den programm ablauf reinzubringen 
muss ich erstmal 19 zeilenprogrammieren mit irgendwelche irrsinnigen 
verschachtelten undurchschaubaren bekloppten schleifen !


in C braucht man 2 zeilen !

ich hasse diesen SCHUND ich kann Visual basic und ein kleines bißchen 
delphi
und Visual Basic is auch n' bißchen Objektorientiert also erzählt mich 
nich der sch***** is die einfachste programmiersprache DAS IS DOCH 
SCHMUUUUUUH

wie rumpelstielzchen auf den boden stampf

@thkaiser
ichhabs auch ncih böse aufgeschnappt

danke für eure geduld grummel


aber eins würd mich noch interessieren ?

wozu braucht man diese Ka** sprache ?

wennich mir vorstelle ich programmiere einen AVR  für ein Gerät ... und 
das display soll anzeigen :"Gerät bereit"

dann ist es doch SOWAS VON bescheuert für jeden buchstaben erst 3 Zeilen 
zu Coden (siehe lcd-test)

IS DOCH so ??!!!

Wieso nicht einfach
lcd.print = "Gerät bereit"


ausrede: möp möp und wenn es zeitkritisch ist ...

Die biester schaffen ohne weiteres 16Mhz wie ich ja nun jez weiß sind 
das 16000000 Befehle pro sekund ...
und wenn der compiler nun etwas schlampiger ist, und für irgend n' 
vorgang nun statt 2 aufeinmal 4 Takte braucht wird eine 2 Millionstel 
sekunde doch wohl nix ausmachen ???

Also ICH warte zumindest GERNE 2/16000000 sekunden , dafür das ich mich 
mit diesem mov ldi rjmp out dingsbumms mist kram  rumschlagenmuss

so -> das wort zum sonntag
danke nochmal gute n8


kofi:
ldi kofi, schnauze VOLL !
rjmp kofi

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Ich bezweifle ernsthaft dass du mit deiner Geduld und deinem Lernwillen 
in irgendeiner Programmiersprache auf einen grünen Zweig kommst.

von Kofi (Gast)


Lesenswert?

hmm mal sehen
in assembler bestimmt nicht

wenn doch meld ich mich nochmal LOL

so und nun geht alle brav schlafen, so wie ich

von Jürgen Berger (Gast)


Lesenswert?

Hallo Kofi,
nicht verzweifeln. Ich bin vor 4 Wochen auch bei 0,0
Assemblerkenntnissen eingestiegen. Mittlerweile wir mir
die Sache aber mit jeder Übung immer transparenter.
Gestern abend sass ich auch noch vor dem Display mit
einem schwazen Balken. Mal sehen wie es weiter geht.

Nur Mut
Jürgen

von gueli (Gast)


Lesenswert?

Hallo..

Das ist doch nicht normal..

Ich bin (fast) schon zu der Meinung gekommen, daß uns da jemand 
verar..... will.

Gruß

von Peter D. (peda)


Lesenswert?

Hi Kofi,

Du beschwerst Dich andauernd, daß am Birnenbaum keine Äpfel dranhängen.
Ein MC ist doch kein PC !!!

Wenn Du auf dem PC 2 Zeilen "Hallo Welt" schreibst, dann sind dafür zig 
Megabyte an Betriebssystemfunktionen und DLLs in Bewegung.

Auf dem MC hast Du nichts weiter als einen "JUMP 0x0000" nach dem 
Einschalten und was Du daraus machst ist allein Deine Sache. D.h Du hast 
die uneingeschränkte Freiheit alles daraus zu machen, was Du willst.

Wenn Du eben nicht mit dieser Freiheit programmieren willst, dann hilft 
Dir auch kein C weiter. Dann bleib doch bei Deinem PC und schmeiß den MC 
weg.


Ich denke, die meisten sind wie ich der Meinung, daß ohne 
Assemblerkenntnisee es unmöglich ist, auf einem MC effektive und 
funktionierende C-Programme zu schreiben.

Sich erstmal mit Stack, Ports, Timers, Interrupts und Co zu 
beschäftigen, daran führt kein Weg vorbei.

Birnen sind nunmal keine Äpfel, schmecken aber auch gut, wenn man sie 
erstmal probiert hat.


Peter

von Matthias (Gast)


Lesenswert?

Hi

ich geb dir Recht Peter. Allerdings reichen mir die Kentnisse eines 
Assemblers. Der das 8051. Wenn ich AVR's oder den M16C programmiere 
reicht mir C. Aber man sollte einmal den Aufbau eines µC richtig 
verstanden haben.

Matthias

von thkaiser (Gast)


Lesenswert?

@Kofi: Mir gehts genau anders rum. Ich programmiere seit fast 20 Jahren 
alles in Assembler, was mir unter die Finger kommt. Visual Basic ist ein 
Krampf, und bei C Frage ich mich jedesmal, ob der Entwickler der Sprache 
während eines Betäubungsmittelmißbrauchs einfach nur falsch verstanden 
wurde, weils eigentlich keine Programmiersprache werden sollte.... Das 
ist alles eine Frage der Sichtweise.
Wenn man mal sieht, wie groß das .exe-File eines Programms "hello world" 
nach dem Komplilieren ist, kann man sich eine Vorstellung davon machen, 
was in den Tiefen des Betriebssystems alles vorgeht. Wobei ich nie auf 
die Idee käme, einen PC in Assembler programmieren zu wollen.
Vielleicht solltest Du für den Anfang mal einen kleineren Controller 
nehmen - z.B. den 2313 oder den 4433, dann könntest Du die Tutorials 1:1 
übernehmen.

von Carsten Sprung (Gast)


Lesenswert?

>bei C Frage ich mich jedesmal, ob der Entwickler der Sprache während eines 
Betäubungsmittelmißbrauchs einfach nur falsch verstanden wurde

Das ist doch fakt:
http://homepages.uni-regensburg.de/~chf04435/edv/unixc.html

Gruss Carsten

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.