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:..."
ja ichhabs gelesen aber ich verstehe den zusammenhang irgendwie nicht ich versteh das high und lowbis zeug irgendwie nich heul
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.
ne ich verstehs nich soll ich anstelle von lditemp1, 0x84 jetzt ldi temp low(0x84) schreiben ? und dadrunder dec High(Ramed) ???????
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 ?
Herrgott schenke mir Geduld ;-) ldi r16,low(ramend) ;Stackpointer setzen out spl,r16 ldi r16,high(ramend) out sph,r16 Gruss Carsten
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
Ich bezweifle ernsthaft dass du mit deiner Geduld und deinem Lernwillen in irgendeiner Programmiersprache auf einen grünen Zweig kommst.
hmm mal sehen in assembler bestimmt nicht wenn doch meld ich mich nochmal LOL so und nun geht alle brav schlafen, so wie ich
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
Hallo.. Das ist doch nicht normal.. Ich bin (fast) schon zu der Meinung gekommen, daß uns da jemand verar..... will. Gruß
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.
>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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.