Forum: Projekte & Code Folge x² bei 80515


von Sabine (Gast)


Lesenswert?

Hallo,
ich hoffe mir kann hier jemand helfen:

Ich möchte Unterprogramme zur Erzeugung von periodischen Signalen und 
zur Ausgabe der Folgen über eine parallele Schnittstelle entwickeln. Die 
Frequenz soll mit Hilfe eines Timers festgelegt werden können.

Dabei interessiert mich das ganze für die Folge x² und die Folge 2^n.

Kann mir jemand von Euch bezüglich dessen einen kleinen Anstoß geben, 
wie ich das am Besten umsetzen kann?

Danke schon mal im Voraus.
Eure Bine

von A. Füßer (Gast)


Lesenswert?

Was heisst parallele Schnittstelle? PC-Druckerschnittstelle oder meinst 
Du die/den Port(s) eines µCs?

Timerwert einstellen sollte kein Problem sein, sowas steht ja im 
Datenblatt zum µC. Dann bei jedem Timeraufruf den zuvor im Hauptprogramm 
errechneten, nächsten Funktionswert ausgeben. (Um Jitter bei 
unterschiedlich langen Berechnungszeiten zu vermeiden, falls das eine 
Rolle spielt).
Da Deine Folgen: x^2 und 2^n nicht periodisch sind, sondern gegen 
Unendlich streben, mußt Du mit Variablenüberläufen rechnen und diese 
abfangen/umgehen/beachten... Wie sowas aussieht hängt von den 
Anforderungen ab (z.B. nach Überlauf wieder bei 0 anfangen).

Ich hoffe, daß ich in etwa das Thema getroffen habe. Deine Ausführungen 
waren sehr kurz.

http://www.goblack.de/desy/mc8051chip/   beschreibt u.a. den 80515 recht 
schön.

Tschüß,
 André.

--
CAN@home - http://www.CANathome.de - Hausautomation mit AVR + CAN

von Sabine (Gast)


Lesenswert?

Ja, das hilft mir schon wieder ein Stückchen weiter. Ich danke Dir.

von Thomas Strauß (Gast)


Lesenswert?

Hallo Sabine

Die Derivate der MCS51-Familie von Intel sind für mathematische
Operation leider etwas eingeschränkt, weil i.allg. nur 8bit-Aktionen 
einfach durchführbar sind; braucht man mehr als 8 Stellen, wird es 
kompliziert.
Ausnahme soll der 80C517/537 sein mit der Extra-MDE 
(Multiplikations-/Divisionseinheit), den ich bisher noch nicht 
programmiert habe und der meineserachtens zu teuer ist (jetzt nicht mehr 
von Siemens, sondern von Infineon hergestellt);
für das Potenzieren u.a. kompliziertere Berechnungen wäre natürlich 
prinzipiell ein DSP (Digitaler Signal-Prozessor)besser geeignet; z.B. 
die TMS 320-Serie von Texas-Instruments;
Die moderneren Chips dieser oder anderer Serien sollte man bekommen 
(z.B. www.kessler-elektronik.de), die Unterlagen vielleicht in einer 
Leihbücherei; Assembler/Compiler sind auf
der CD-ROM "Mikrocontroller" von RUESS für den TMS 320 erhältlich.

Wenn Du bei dem 80C515 bleiben willst, muß die Potenzierung auf
die Multiplikation zurückgeführt werden; das Ergebniss kann ja
bis 16bit groß sein (mul AB); gebrochene Zahlen kann man erweitern (0.5 
* 10 = 5 oder 0.00137 * 100000 ?), naja, also
müsste der Multiplikationsfaktor auch extra gespeichert werden
etc.

Ich bin auch nicht gerade der Mathe-Profi, deswegen empfehle ich,
für diesen Prozessor ein altes Assembler-Buch aus der Homecomputer-Ära 
zu besorgen, geschrieben für z.B. 8080, 8085, 6502-Prozessoren, da da 
doch einige Tricks angegeben sind, um
auch kompliziertere Berechnungen durchzuführen. Diese Bücher sind
jedoch nicht ganz einfach zu lesen. Es gab z.B.Anfang der 
Achtziger-Jahre solche Kits, mit denen jeder einen Ein-Platinen-Computer 
aufbauen konnte, und für die Programmierung dieser Computer 
entsprechende Literatur.
Diese Bücher sind jedoch für die damaligen Prozessoren geschrieben, die 
weder dividieren noch multiplizieren konnten.
Vielleicht gibt es inzwischen passendere Literatur.

von Michael Jungnickl (Gast)


Lesenswert?

Hallo Sabine,

vielleicht bist Du noch an der Lösung Deines Problems interessiert:

(Ich nehme dabei an, daß Du keine Gleitkomma-
zahlen verwendest, sondern eine Ganzzahl.)

2 hoch n:

Am einfachsten ist es wohl, diese Zahl mit 1 zu initialisieren und 
anschließend, mit Übertrag durch jedes Byte, N mal bitweise nach LINKS 
zu verschieben.
Schneller ist es, die Zahl mit Null zu initialisieren. Dann wird aus N 
ein Zeiger berechnet, der auf ein Bit in diesem Bytevektor zeigt. Dieses 
Bit muß gesetzt werden, da es die Wertigkeit 2 hoch N hat.

n hoch 2:

Aus der gaußschen Summenformel läßt sich eine Formel für
diese Folge ableiten. Für die Berechnung eines Folgewertes  sind nur n+2 
Additionen notwendig:

 Aus (Summe über i von i = 1 bis n ) = n/2 * (n+1) folgt:

 n hoch 2 = 2 * ( Summe über i von i = 1 bis n ) - n

 z.B. 11 hoch 2 = 2*(1+2+3+4+5+6+7+8+9+10+11)-11 = 121
      7  hoch 2 = 2*(1+2+3+4+5+6+7) - 7 = 49

 Weil Du wahrscheinlich nicht noch subtrahieren willst, habe  ich die 
Formel umgestellt:
 n hoch 2 = 2 * ( Summe über i von i = 1 bis (n-1) ) + n
 z.B. 11 hoch 2 = 2*(1+2+3+4+5+6+7+8+9+10) + 11 = 121
 Vorsicht bei n = 1!

von Michael Jungnickl (Gast)


Lesenswert?

Hallo Sabine,

hier möchte ich noch eine Anmerkung zum vorigen Eintrag geben:
Der Ausdruck in der Klammer läßt sich natürlich
noch vereinfachen.
Es gilt immer: 1 + (n-1) = n; 2 + (n-2) = 2; d.h. erster
und letzter Wert in der Klammer sind als Summe konstant, mit
dem Wert n. Beachte, ob eine gerade oder ungerade Anzahl von
Werten in der Klammer steht.
Also: n+1 berechnen,
      [n/2] mal diesen Wert aufaddieren,
      + 1/2 * n addieren, falls n ungerade ist.
Dies ist im wesentlichen die umgestellte Formel vom          1. Beitrag.

Falls die Werte für n groß werden, ist eine Multiplikation-Funktion 
besser. Diese ist zwar komplizierter, kann aber so geschrieben werden, 
daß nur k*Stellenzahl Additionen notwendig werden. Wenn Du mehr dazu 
wissen willst,
dann schicke mir eine E-Mail.

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
Noch kein Account? Hier anmelden.