ich habe in Assembler für die ATMEGA Serie mit Hardwaremultiplizierer ein 16x16 MultiplizierProgramm geschrieben. Dieses habe ich in Form eines Macros geschrieben. Das Programm ist noch nicht getestet. Es gibt hier zwar einige 16x16 Programme, aber diese scheinen den Multiplizierer nicht zu benutzen und sind darum länger und langsamer. Es wundert mich schon etwas, daß es solch ein Programm noch nicht geben sollte. Den Bedarf dafür habe ich im AD Wandler gesehen, wo bei 8bit eine unzumutbare Ungenauigkeit reinkommt. Wem das Programm zu kurz und zu schnell ist, empfehle ich, die Sprache C oder Basic zu verwenden. mfg
Ein ähnliches Programm gibt es in einer Application Note von Atmel, also geben tut es das auf jedenfall schon. Was an dem Programm schlecht (bzw. nicht ordentlich) ist: Du sicherst R8 und R9, aber nicht R0 und R1.
die Applikationsnote von Atmel, die ich als Link hier aus dem Forum gesehen habe, enthielt keine Hardware-Multiplikation. Da wurde bitweise verschoben, wie ich das vermute. Und die Ausführungszeiten sprechen auch dafür. Das muß wohl eine ältere Note sein, wo es noch keine Hardwaremultiplizierer gab. Das Sichern von R0,R1 habe ich deshalb nicht gemacht, weil ich es nicht für sinnvoll hielt, von Atmel reservierte Register für das Multiplizieren in einem Programm für andere Zwecke zu verwenden. Wenn nicht mehr genug Register frei sind, sollte das RAM verwendet werden, zumal die Register unter 16 sowieso nur eingeschränkt verwendbar sind. mfg
Wolfram Quehl wrote: > die Applikationsnote von Atmel, die ich als Link hier aus dem Forum > gesehen habe, enthielt keine Hardware-Multiplikation. Atmel hat eine eigene Webseite, auf die man direkt durch Eingabe von www.atmel.com in die Adresszeile des Browsers zugreifen kann (dies nurmal so als Tipp). Dort gibt es: AVR201: Using the AVR Hardware Multiplier
Hat das macro nicht einen kleinen bug? ffff x ffff = fffe0001 macroergebnis = fefe0001 ffff x fffe = fffd0002 macroergebnis = fefd0002 Oder schnalle ich es nur nicht? MfG wb1
ich wüßte nicht, was da für ein Bug drin sein sollte. Wie bist Du zu dem Macroergebnis gekommen? Leider kann ich das nicht mit Studio simulieren. Hast Du das simuliert? Oder liegt da nur ein Gedankenfehler vor? ldi verändert nicht die Flags, so daß ein Übertrag von ADD bei ADC noch wirksam bleibt. Dies tritt aber vorher auch schon mal auf. mfg
Folgendermaßen im studio .macro mu16 . . .endmacro ldi r20,0xff mov r21,r20 mov r22,r20 mov r23,r20 mul16 r21, r20, r23,r22 nop dann die register r20 bis r23 angesehen, dort steht ja das ergebnis Ist ja möglich das die Simulation spinnt, ich werds mal mit jtag testen. MfG wb1
kann man die Einzelergebnisse in den Reg. nachvollziehen und hier posten, damit ich das nachvollziehen kann. Ich hatte das sorgfältig auf dem Papier Schritt für Schritt gemacht und kann den Fehler so nicht feststellen. Bei der Analogumsetzung geht das nur bis 03FF und da habe ich ein richtiges Ergebnis. mfg
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.