Servus, ich habe mir eine Funktion geschrieben, die mir den Wert eines Registers (AVR-8BIT) in Decimaldarstellung wandelt. Maximaler Wert von 8 bit decimal wären 255; als Ausgabe erhalte ich drei Register, Inhalt: R1=2; R2=5; R3=5; Das ganze habe ich noch so erweitert, dass ich der Funktion auch ein Word übergeben kann, als Ergebnis erhalte ich fünf Register. Das Teil läuft...Da liegt mein Problem; es läuft und läuft und läuft - und hört 200ms später wieder aus. Funktion gegeben, setzen, sechs ;-) Der Ablauf im groben: Register vergleich auf 10; wenn größer dann subtrahieren 10 und zähle einer/zehner/hunderter (je nach Stand einer/zehner/hunderter) rauf. VIelleicht hat jemand noch einen wirklich Super-Trick auf Lager ;-) Vielen Dank
HI Nun ob es ein Super Trick ist weiss ich nicht aber beim 8051 Befehlsatz gibts dafür den Befehl DA. Steht für Dezimalkorrektur vielleicht gibts ja ein Equivalent in AVR. Gruß Klaus
Nunja, ich kenne deine Routine nicht... Aber schau dir mal das hier an: http://www.mikrocontroller.net/forum/read-1-262112.html#262230 Das schreibt das Ergebnis zwar nicht in Register oder SRAM, sondern gibt es gleich an das LCD aus. Du musst es ja nicht unbesehen übernehmen, aber es schadet sicher nicht, sich das mal etwas genauer anzusehen oder auch mal im Simulator laufen zu lassen. Denn so lange dauert die Berechnung nichtmal. Die Routinensammlung "lcdprint.inc" ist im Laufe der Zeit entstanden und wird gelegentlich an neue Erfordernisse angepasst. In znduhr01.asm siehst du, wie die Routinen genutzt werden. Weitere Tipps findest du auch in der Codesammlung. ...
Schau doch mal auf der Seite nach: http://www.avr-asm-tutorial.net/avr_de/index.html Hab da selbst schon manche hilfreiche Infos her.
Hallo Thomas, ganz einfach und funktioniert, Atmel HP aufrufen und die Applicatin Note AVR204 runterladen....fertig. In dieser Schrift ist alles verständlich beschrieben. Gruss Gerald
Servus, alos falls du eine Hochsprache einsetzt, löst sich das Problem fast von alleine: Z.B. mit dem CodeVision: Ausgabe ans Terminal: printf(" %d ",value); //mit char value Ausgabe auf LCD: Verwende da meist die stdlib.h und konvertiere den Char in int und lass ihn dann ausgeben, hört sich kompliziert an, sind aber nur wenige Zeilen in Hochsprache: char value, *string; int abc; abc=atoi(value); //atoi aus stdlib: ascii to integer itoa(abc,string); //itoa integer to ascii (string) lcd_puts(string); //Ausgabe des Stings, hier dein char value als dezimalzahl Gruß Bob
Hallo Ich habe mal meine Version angehängt, die 10er-Division stammt aus dem Trampert-Buch zum AVR 73 Christoph
Hallo Vielen Dank für eure Antworten. Werde mir alles ansehen, ausser die Hochsprache. @Gerald: Das ist eine Möglichkeit, die ich allerdings nicht nutze ;-) Bzw. erst im Notfall; aber die Frustration, es nicht selber geschafft zu haben, wäre einfach zu stark...Da ist mein Ehrgeiz einfach zu massiv ;)
Die Appnotes von ATMEL würde ich aber nicht "verschmähen". Man muss sie ja nicht unbesehen einsetzen, aber ein Blick ("wie haben die es denn gelöst") lohnt sich immer... Bit- & Bytebruch... ...HanneS...
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.