mikrocontroller.net

Forum: Projekte & Code Mul16 für ATMega


Autor: Wolfram Quehl (quehl)
Datum:
Angehängte Dateien:

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

Autor: Benedikt K. (benedikt) (Moderator)
Datum:

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

Autor: Wolfram Quehl (quehl)
Datum:

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

Autor: Benedikt K. (benedikt) (Moderator)
Datum:

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

Autor: W. Bl (wb1)
Datum:

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

Autor: Wolfram Quehl (quehl)
Datum:

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

Autor: wb1 (Gast)
Datum:

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

Autor: W. Bl (wb1)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ach mit jtag kommt das gleiche, falsche Ergebnis

Autor: Wolfram Quehl (quehl)
Datum:

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

Autor: Wolfram Quehl (quehl)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Fehler ist berichtigt, siehe Anhang

ein carry wurde nicht berücksichtigt.

mfg

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.