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 ?!
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.
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 ?
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.
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.
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
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*
Falls du einen anderen Controller als den 4433 verwendest: hast du den
Stackpointer richtig eingestellt? Siehe
www.mikrocontroller.net/tutorial/stack.htm.
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
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:..."
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.
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 ?
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
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 ?
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
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
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.
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
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)
@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.
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
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
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
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
@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.