Modulo 7 mit atmega16

Gast #827991
Lesenswert?
• ▲
▼
Hallo Leute,

ich hab mich schon hier mit der Suchfunktion durch das Forum gewühlt und 
auch google hab ich schon befragt, jedoch bin ich noch zu keinem 
Ergebnis gekommen.

Es geht um Modulo Rechnen mit einem Atmel 8Bit Prozessor und zwar dem 
mega16. Wie man das Modulo bei einer Divison durch eine gerade Zahl 
bildet, ist mir klar, jedoch bräuchte ich das Modulo bei einer division 
durch 7. Ich komm einfach nicht zur Lösung.

Ich bin mir sicher, dies ist nicht allzu schwer und jemand von euch kann 
mir da weiterhelfen.

Grüsse Stifu
#828023
Lesenswert?
• ▲
▼
Sorry Torsten, aber die Dokumentation zu dem Quelltext finde ich nicht 
wirklich hilfreich - sie erklärt nur die einzelnen Zeilen und nicht den 
Algorithmus.

In Kurzschreibweise macht der Code Folgendes um a mod b zu berechnen:

Ziehe von einer Zahl a sooft es geht die Zahl b ab. Der verbleibende 
Rest ist a mod b

while (a >= b) a -= b;

a := a mod b

Das ist aber bei großen a und kleinem b extrem langsam!

Zudem schreibt Stifu ja auch, dass er die Modulo-Rechnung generell 
beherrscht.
Gast #828053
Lesenswert?
• ▲
▼
Vielen dank für die schnellen Antworten.

Also ich bräuchte den Algorithmus für die Programmiersprache Assembler. 
Bei geraden Zahlen ermittle ich das Modulo indem ich die gewünschte Zahl 
mit Divisor-1 verande.

Also bei 8 % 4 verande ich 8 mit 4 das ergibt das Modulo daraus also 0. 
Dies ist leider bei ungeradem divisor nicht möglich. Die Variante mit 
abziehen kenn ich, jedoch ist die mir zu Zeitaufwendig. Ich bräuchte 
eine möglichst kurze Operation. Kennt ihr da was passendes?
#828058
Lesenswert?
• ▲
▼
Das hat nichts damit zu tun, dass die Zahl gerade ist, sondern eine 
Zweierpotenz, wie oben schon geschrieben. Mit der Zahl 6 funktioniert 
das z.B. nicht!

Es gibt viele Verfahren das zu lösen. Die Holzhammermethode ist oben ja 
schon beschrieben worden. (fortlaufendes Subtrahieren)

Die elegante Methode ist eine binäre Division, welche vergleichsweise 
anspruchsvoll ist. Unter dem obigen Querverweis zu dem anderen Thread 
habe ich den Algorithmus für konstante Divisoren bereits beschrieben. 
Gib Bescheid, wenn du den nicht verstehen solltest.

Die schnellste (aber speicherhungrigste Methode) ist eine Lookup-Tabelle 
in der für jede Zahl der Rest vermerkt ist (vorberechnete Werte).
Gast #828939
Lesenswert?
• ▲
▼
Stimmt da hab ich in der Eile die geraden Zahlen mit denen der 
Zweierpotenz verwechselt. Mein Fehler.

Also bei deinem Link und deiner Erklärung seh ich nicht ganz durch, ich 
wäre über ein klein wenig 'nachhilfe' von dir erfreut.

Zudem hab ich noch ein zweites Problem. Also ich bin momentan dabei eine 
Uhr mit Datum in Assembler zu programmieren. Zeit und Datum funktioniert 
soweit ohne Probleme und wird auch auf einem Display angezeigt. Nun 
kommt es aber zur Wochentagsberechnung. Gibt es da eine gescheite Formel 
welche einfach in Assembler realisierbar ist?

Zum andern hätt ich da ne Frage zur Ausgabe auf dem Display, wenn ich 
den Wochentag mal berechnte habe. Was ist die schönste Methode, ich habe 
schon eine Funktion fürs LCD geschreiben, welche einen String ausgibt. 
Ich hab auch schon gelesen, dass die Wochentagsausgabe einfach über eine 
Stringtabelle gespeichert werden kann und je nach Wochentag den 
entsprechenden String auf dem Display erscheinen lassen kann.
Nur weiss ich nocht nicht ganz, wie ich das anstellen soll.

Ich hoffe ihr könnt mir meine Fragen beantworten.

Grüsse

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.