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
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
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.
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!
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.