Zitat Zitat von HeSt Beitrag anzeigen
Die Multiplikationen hatte ich ja auch schon im Kopf.
NUR: ein 16Bit Register (word) fasst nur bis 65535.
Laut Datenblatt wird das Ergebnis einer Multipikation in R1-R0 geschrieben = 16Bit.
Wie aber funktioniert diese Multiplikation: 49920*3 = 149760?
Wo soll 149760 gespeichert werden?
Oder hier:
177bits * 195(bits/V) = 34515(V) * Teiler 3 = 103545(V)
Da fehlt mir noch einiges an Wissen ...
Na so als wenn du eine schriftliche Multiplikation machst. Heißt z.B: bei 49920*3 = 40000*3 + 9000*3 + 900*3 + 20*3 + 0*3 = 120000 + 27000 + 2700 + 60 + 0 = 149760 .
Im Link siehst du das ich erst 1low*2low + 1low*2high + 1high*2low + 1high*2high rechne
https://www.roboternetz.de/community...ine-Bibliothek unter Mathe.asm
http://www.avr-asm-tutorial.net/avr_...nen/index.html

Das Wissen fehlt dir nicht sondern es ist nur verschüttet im Unterbewusstsein, man hats ja mal in der 2-4Klasse gelernt

Wo es gespeichert wird hängt von der Rechenart ab, Bei der Multiplikation fest verankert IMMER in R0:R1 heißt wenn dort die Werte vorher geladen werden, werden sie danach überschrieben.
Addition/Subtraktion Add r16,r17 wird das Ergebnis immer in das Register vor dem Komma geschrieben siehe Datenblatt Instructionset

Einfach mal im Simulator Werte laden und mit den Rechnarten probieren zum Verständnis.

Zum Timer 2 der kann ASYNCHRON bzw für SLEEP muss sogar ASYNCHRON betrieben werden.

Der MEGA16/32 sind die älteren Generationen Atmega 48/88/168/328 sind alles Atmega8 nur mit 4-32Kbyte Flash und kleinen Unterschiedlichkeiten in der Adressierung der Hawrdwere aber sonst identisch