www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik LCD probs


Autor: Kofi (Gast)
Datum:

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

Autor: thkaiser (Gast)
Datum:

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

Autor: Kofi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
8Mhz

ich tu mal ein paar nops dazu

Autor: Kofi (Gast)
Datum:

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

Autor: thkaiser (Gast)
Datum:

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

Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:

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

Autor: Kofi (Gast)
Datum:

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

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

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

Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:

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

Autor: Kofi (Gast)
Datum:

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

Autor: Kofi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ups sollte heißen
Ich verwende den 4433er NICHT

Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:

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

Autor: Kofi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ja ichhabs gelesen aber ich verstehe den zusammenhang irgendwie nicht

ich versteh das high und lowbis zeug irgendwie nich heul

Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:

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

Autor: Kofi (Gast)
Datum:

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

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

Autor: Kofi (Gast)
Datum:

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

Autor: Carsten Sprung (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Herrgott schenke mir Geduld ;-)

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


Gruss Carsten

Autor: Kofi (Gast)
Datum:

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

Autor: Kofi (Gast)
Datum:

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

Autor: Carsten Sprung (Gast)
Datum:

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

Autor: Kofi (Gast)
Datum:

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

Autor: Carsten Sprung (Gast)
Datum:

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

Autor: Kofi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
aha heißt also ich solls gleich aufgeben ? LOL

Autor: Carsten Sprung (Gast)
Datum:

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

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

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

Autor: thkaiser (Gast)
Datum:

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

Autor: Kofi (Gast)
Datum:

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

Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:

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

Autor: Kofi (Gast)
Datum:

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

Autor: Jürgen Berger (Gast)
Datum:

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

Autor: gueli (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo..

Das ist doch nicht normal..

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

Gruß

Autor: Peter Dannegger (peda)
Datum:

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

Autor: Matthias (Gast)
Datum:

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

Autor: thkaiser (Gast)
Datum:

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

Autor: Carsten Sprung (Gast)
Datum:

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

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.