- LiTime Speicher und Akkus         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 11

Thema: wieviele Befehle kann mein µC in einem Taktzyklus erledigen?

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    07.07.2011
    Beiträge
    35

    wieviele Befehle kann mein µC in einem Taktzyklus erledigen?

    Anzeige

    Praxistest und DIY Projekte
    Hallo,

    ìch hätte gerne eine Frage:

    Ich verwende Mikrocontroller STM32F10xx, der mit 24 MHz tacktet. Mit dem möchte ich ein Signal erfassen, dessen Frequenz (Max. Frequenz) bei 200 KHz liegt. Ich möchte aber 2-Fach abtasten (Sowohl die Steigende als auch die Fallende Flanke= mehr Informationen rausholen). Dies möchte ich mittels Timmer-Interrupt/ capture realisieren. per Prescaler stelle ich den Timertackt auf 400 KHz ein.Somit wird das Eingangssignal 2-Fach abgetastet.
    Nun, Darf ich davon ausgehen, dass der µc innerhalb 2,5µs (das ist der Abtastrat 1/ 400 KHz) 24 (auf diese Zahl bin ich aufgrund der MCU-Frequenz gekommen) Befehlen erledigen kann?

    Ich hoffe, ich habe die Frage richtig gestellt.
    Übrigens ich bin Student, der Null Erfahrung mit Programmierung von Mikrocontroller hat. Also bitte um Verzeihung wenn ich Blöde Frage stelle.

    Vielen Danke im Voraus

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.01.2006
    Beiträge
    4.555
    Das sollte im Datenblatt stehen und hängt u.A. von der Breite des Befehlsregister (und der Taktrate) ab. 8 Bit Prozessoren können nur 1 Befehl pro Takt, 16,32,64 Bittige entsprechend mehr. Dazu kommt noch die Architektur des Prozessors da gibt es auch große Geschwindigkeits Unterschiede. Noch schneller würden speziell für Dein Problem "gestickte" FPGA's sein können. Dein Prozessor Typ sagt (mir) leider nichts, aber Du hast sicher ein Aktuelles Datenblatt.

    Gruß Richard

  3. #3
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    Auch die 32 Bit µCs können normal maximal 1 Befehl pro Takt. Nur sind die Befehle bei den 32 Bit µCs etwas mächtiger, halt eine 32 Bit Addition statt einer 8 Bit Addition. Bei den DSPs gibt es einige die etwas mehr können, weil der mehr als eine CPU parallel arbeitet.

    Für die Erfassung des 200 kHz Signals reicht der µC aber wohl aus. Bei mir im Frequenzzähler schaft das auch ein 8 Bit AVR (Tiny2313) mit 20 MHz, bis knapp 300 kHz. Das sollte auch mit dem STM32 zu schaffen sein. Zur sicherheit aber noch mal ins Datenblatt schauen, denn die ARMs sind teilweise langsam beim Zugriff auf IO Register. Den Timer sollte man aber eher mit maximalem Takt laufen lassen damit man auch ein brauchbare Auflösung hat.

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.01.2006
    Beiträge
    4.555
    Zitat Zitat von Besserwessi Beitrag anzeigen
    Auch die 32 Bit µCs können normal maximal 1 Befehl pro Takt.
    Woher ich es habe ? Aber irgendwo hatte ich schon einmal mit Prozessoren zu tun welche mehrere Befehle mit/in einem Takt abarbeiten konnten. Leider ist (meine) Höchstform zu diesem Thema schon etwas länger zu Ende ich habe es schlicht vergessen (oder falsch in Erinnerung). Aderersteis wenn ein "Breiteres Register" pro Takt Parallel ver/be arbeitet werden kann, sollte es schneller gehen?

    Gruß Richard

  5. #5
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    Beim PC sind die Prozessoren so weit, das die mehr als einen Befehl pro Zyklus können. Die üblichen µCs können das aber nicht, da ist man eher noch bei mehreren Zyklen pro Befehl. Da gibt es aber ggf. welche die einem einige Aufgaben durch spezielle Hardware abnehmen können (z.B. UART, Input Capture mit FIFO, "DMA"-Funktionen ).
    Durch die breiteren Register werden einige Aufgaben schneller, aber nicht alle. Hier hilft es vermutlich schon, weil die Auflösung des Timers auch eher bei 16-32 Bit liegt.

  6. #6
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Ich kenn den konkreten Processor nicht, aber beim AVR könnte man folgende Abschätzung vornehmen:

    Bei 1 MHZ Takt kann er in 1 µS einen Befehl ausführen.
    bei 24 MHZ und deinen 2.5 µS könnten also 24 * 2.5 Befehle abgearbeitet werden => 60

    Mit 60 Befehlen kannst du vielleich 5-6 mal Pin abtasten.
    zum halbwegs genauem Flankenerwischen ist das eher wenig (IMHO)
    Geändert von PicNick (08.07.2011 um 08:48 Uhr)
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  7. #7
    Benutzer Stammmitglied
    Registriert seit
    07.07.2011
    Beiträge
    35

    1-zeil von C-Code entspricht 5-Zeille von ASS-Code

    Hallo,

    ich danke allen für die Antwort.

    Durch weitere Recherche bin ich darauf gekommen:
    * 1-Zeile eines C-Code entspricht 5-Zeilen von Assembler-Code. Jede Zeile von Assebler-code bedeutet Ein Befehl.
    * Die CCU arbeitet unabhängig von dem kern-prozessor. Das heisst; sie arbeitet quasi parallel

    Schlussfolgerung besagt, dass der µc (Laut der og. Angabe) 24-Zeile Assebler-Code in millionstel Secunde erledigen kann.
    Erst wenn CCPU einen Interrupt auslöst, dann wird 12 Taktzyklen für das Sprengen von dem Main-Programm ins ISR und 6 Taktzuklen für das Zurücksprengen (von ISR in Main-Programm) benötigt. Also Ingesamt 18 Taktzyklen für hin und her. Dann bleibt übrig nur ca. 6 Taktzyklen.

    mit Ziffern heisst das:
    Taktsystem 24MHz -> 41,6 ns oder 0,0416 µs
    Psc-Takt(Prescaler) 400KHz -> 2,5 µs

    D.h. innerhalb einem PSC-Takt macht das System ca. 60 Takten
    von diesem 60 Takten wird 18 Takten für hin und her um sonst verschwunden (0,75 µs).
    Übrig bleibt doch genung und zwar 42 Takten (1,75 µs).
    D.h. Alles was zu rechnen etc. zu tun is, soll befor die Nächste steigende Flanke erledigen, nämmlich innerhalb von 1,75 µs oder 42 systemtakten.

    Ist meine Schlussfolgerung Richtig? Ich brauche doch von euch als wissender Bestätigung?!

  8. #8
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Da kommen wir ja eh mehr oder weniger auf das Gleiche.
    Frage ist nun, WAS denn genau bei jeder Flanke zu rechnen oder zu tun ist. Eine FFT bringst du da nicht durch, logo
    ISR ist auf jeden Fall besser als abtasten, da genau mit den Flanken ausgelöst wird.

    btw: das C / assembler verhältnis mit 1:5 ist sehr theoretisch bzw reiner durchschnitt (und hängt auch vom eingestellten Optimizer ab). Bei sowas wie
    (double)result = (double)Varia / 0.48
    geht normalerweise das Licht aus und es ist doch nur eine Zeile.
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  9. #9
    Benutzer Stammmitglied
    Registriert seit
    07.07.2011
    Beiträge
    35
    Danke PicNic

    ja, aber ich wolte es in details formulieren, damit ich sicher gehen kann "" die Tücke liegt immer in deitails.

    Sorry! Was Meinst du mit FFT?

    Das externe Interrupt wäre in meinem Fall nicht praktisch, praktischer wäre wenn ich die Impulsfolge mittels CCU erwiscche.
    Denn der Geber kann mit 200KHz laufen.D.h pro 5µs ändert sich das Pagelstand des Signals. viel mehr wenn ich dieses Signal nicht nur bei Steigende oder Fallende Flanke erfassen möchte sonder sowohl als auch. D.h. Das Abtastrat soll mind. 2,5 µs schnell sein. noch Kompletierter wäre wenn nicht nur ein Signal sonder Zwei signale (cha-A und Cha-B), die der Drehgeber ausliefert und die von einander 90-Grad Phasig verschoben sind. So letzt endlich soll jede 1,25µs einen Interrupt ausgelöst werden.

    Innerhalb dieser 1,25 µS soll folgendes erledigt werden:
    * Integer aritmehtic: Ich soll aus den erfassten Signalen die Geschwindigkeit, Drehzahl und Drehrichtung rausfinden.
    * Diese Werte sollen auch über SPI übertragen werden, falls der Master das SSL triggert.
    * Zu guter letzt soll die Werte auf LCD angezeigt werde.

    ohhhhhhhhhhhhhh das alles ist innerhalb einer 1,25 µs zu erledigen ???? viel zu viel denke ich mal.
    Deswegen werde ich über ccu alle 10 steigende/fallende Flanke einen Interrupt auslösen.

  10. #10
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Ah so, Drehgeber. Anschlussfrage: für Odometrie, also Wegmessung, oder für sowas wie einen Motor (der ja nicht einfach von einem Impuls zum nächsten die Richtung wechseln kann) ?
    Im zweiten Fall ist das mit dem 90° Signalen nicht notwendig und das mit auf- und ab-Flanken eigentlich auch nicht.

    Auch klar: Für Geschwindigkeit bzw. Drehzahl brauchst du eine Zeit, die du extra tickern lassen musst.
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

Seite 1 von 2 12 LetzteLetzte

Ähnliche Themen

  1. Mein Asuro kann balancieren!
    Von waste im Forum Asuro
    Antworten: 64
    Letzter Beitrag: 24.10.2011, 22:20
  2. C++ Befehle mit einem USB-Adapter (mit FT232RL) nutzen
    Von Ulle23 im Forum AVR Hardwarethemen
    Antworten: 6
    Letzter Beitrag: 23.10.2008, 11:36
  3. Mein AVR kann GSM?
    Von 1hdsquad im Forum Elektronik
    Antworten: 28
    Letzter Beitrag: 16.03.2007, 19:05
  4. Wie kann ich mit C I2c-Befehle ausgeben ?
    Von faboi im Forum Microcontroller allgemeine Fragen/Andere Microcontroller
    Antworten: 3
    Letzter Beitrag: 11.04.2006, 19:23
  5. Antworten: 6
    Letzter Beitrag: 14.08.2005, 14:50

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

LiTime Speicher und Akkus