- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 15

Thema: Ist die CPU Taktrate durch ein Programm ermittelbar?

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    09.05.2007
    Beiträge
    99

    Ist die CPU Taktrate durch ein Programm ermittelbar?

    Anzeige

    Praxistest und DIY Projekte
    Mal eine rein theoretische Überlegung:

    Kann man für einen Atmega8 ein Programm entwerfen, welches in der Lage ist die (eigene) CPU Taktrate intern und selbständig zu ermitteln? Mit "intern und selbständig" meine ich, dass dabei kein externes Bauteil (bzw. Peripherie) als Hilfsmittel genutzt werden darf.

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    20.08.2008
    Ort
    Karlsruhe
    Alter
    36
    Beiträge
    1.225
    Gegenfrage: Kannst du in einem geschlossenen Raum ohne Fenster (und in den keine anderen Umwelteinflüsse wie Geräusche dringen) eine Aussage über die Tageszeit machen?

    Nein.

    Zur Zeitmessung (und eine Frequenzmessung ist eine Zeitmessung) benötigst du eine Referenz. Ohne Zusatzbeschaltung klappt das nicht.

    mfG
    Markus
    Tiny ASURO Library: Thread und sf.net Seite

  3. #3
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.652
    ... rein theoretische ... die (eigene) CPU Taktrate intern und selbständig zu ermitteln ...
    Hei Mann. Was für eine schicke Frage! Erstens - rein theoretisch ist doch Käse, das mach doch erst Sinn, wenn es (*ggg*theoretisch*ggg*) auch wirklich ginge! Und ich bin schon sicher dass es geht, habs mal eben kurz überflogen (Datenblatt ATmega8A_8159D–AVR–02/11) - aber nicht in letzter Konsequenz ausgearbeitet.

    Lösungsansatz: Es gibt verschiedene Taktquellen im Controller die Du anzapfst oder installierst bzw. nicht anzapfst oder nicht installiert hast.

    Setzen wir mal voraus, dass Du einen externen Quarz angehängt und gefused hast (ohne fuses is nix los !). Nun wird ein Timer initialisiert, wohl ohne prescaler. Der WDT wird initialisiert. Der Timer sollte mit der WDT-Dimensionierung so abgestimmt werden, dass er innerhalb eines WDT-Zyklus nicht überläuft. Der Timer sieht in der - weiter unten genannten EEPROM-Zelle nach, ob die leer ist - und wird >>nur dann<< auf "Stand-ins-EEPROM-schreiben" gestellt, wenn die Zelle leer ist.

    Timer und WDT so schnell es geht hintereinander starten. Der Timerstand wird möglichst schnell in einem Loop ausgelesen und ins EEPROM geschrieben, wohl immer ins gleiche Register (das vorletzte oder so - das man später eh kaum mehr braucht - besser keins von den vorderen Plätzen und KEINESFALLS das erste).

    Irgendwann schlägt der WDT zu - und dann kann der Timer nix mehr wegschreiben. Aus dem letzten Wert in der genannten EEPROM-Zelle - und den Auslegungswerten für den WDT bzw. Timer lässt sich mit einer gewissen Toleranz die CPU-Frequenz errechnen. Die Timerinitialisierung in Abhängigkeit von leerer oder geschriebener EEPROM-Zelle sichert den Zelleninhalt nach dem Messlauf für eine spätere Auswertung *ggg*.

    Es ist eine ziemlich unpraktische Lösungsidee, sicher eher nur für den von Dir angedachten "theoretischen" Fall.

    Schreib mal wenn Du das durchgedacht hast, ob Du ähnlicher Meinung bist.
    Ciao sagt der JoeamBerg

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.02.2006
    Beiträge
    1.113
    Zitat Zitat von markusj Beitrag anzeigen
    Zur Zeitmessung (und eine Frequenzmessung ist eine Zeitmessung) benötigst du eine Referenz.
    Ja.
    Zitat Zitat von markusj Beitrag anzeigen
    Ohne Zusatzbeschaltung klappt das nicht.
    Dem würde ich nicht zustimmen. Viele µC haben z.B. den Watchdog Timer, der über eine festen internen Oszillator verfügt. Damit hast du eine Referenz.
    Man könnte am Programmanfang einen Timer laufen lassen, der über den Watchdog gestoppt wird. Aus dem Timerwert kannst du dann die Systemclock ableiten.
    Würde meiner Meinung reichen, ist im Moment aber nur eine theoretische Überlegung.

    Edit: Oberallgeier war schneller. Es gibt übrigens auch den WDT Interrupt ohne Reset. Dann kannst du dir die ganze EEPROM Orgie sparen.

  5. #5
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    In gewissen Grenzen geht es: der Watchdog timer hat einen unabhängigen festen Takt. Es ließe sich also z.B. die Zeit bis zum Auftreten eines Watchdog Resets messen. Allerdings ist der Takt nicht besonders genau - das reicht also nur für eine Grobe Messung, um z.B. einen 8 MHz von einem 16 MHz Quarz zu unterscheiden.

    Eine andere Möglichkeit wäre ggf. noch die Zeit für das Schreiben ins EEPROM - das wird aber auch nicht genauer, kommt aber ohne einen Reset aus, wäre also eher einfacher zu programmieren.

  6. #6
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.652
    ... Es gibt übrigens auch den WDT Interrupt ohne Reset ... die ganze EEPROM Orgie sparen ...
    Au weia - das hatte ich ganz vergessen. Hatte leider WDT noch nie genutzt. Aber klar - sonst wäre der ja nur die allerletzte Möglichkeit und kein Sicherungsmittel.

    Danke für den Hinweis, for_ro.
    Ciao sagt der JoeamBerg

  7. #7
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    Der Mega8 hat keinen WDT - Interrupt. Den gibt es erst bei den etwas neueren µCs.
    Den Umweg über das EEPROM kann man sich aber trotzdem sparen, denn beim WDT Reset wird des RAM nicht zurück gesetzt.

  8. #8
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    20.08.2008
    Ort
    Karlsruhe
    Alter
    36
    Beiträge
    1.225
    Die Idee mit dem Watchdog ist gut, den hatte ich nicht berücksichtigt. Fraglich ist nur, ob der WDT zu Peripherie gehört ...

    mfG
    Markus
    Tiny ASURO Library: Thread und sf.net Seite

  9. #9
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.652
    ... kein externes Bauteil (bzw. Peripherie) als Hilfsmittel genutzt werden darf.
    Zitat Zitat von markusj Beitrag anzeigen
    ... Ohne Zusatzbeschaltung klappt das nicht ...
    Zitat Zitat von markusj Beitrag anzeigen
    ... Fraglich ist nur, ob der WDT zu Peripherie gehört ...
    Markus, vielleicht postest Du mal ein Bild von einem DEINER Controller. Ich gehe nämlich davon aus, dass keiner der hier verwendeten Controller irgendeine Art Auf- oder Anbau hätte, in dem der Watchdog sitzt. Vielleicht hast Du nen schwarzwälder Atmel-Clon, auf dem ein Holzhäuschen sitzt, in dems tickt und aus dem es bei abgelaufenem Watchdogtimer Kuckuck schreit?

    ......Klicke auf die Grafik für eine größere Ansicht

Name:	tiny13_WDT_Blackforrest.jpg
Hits:	22
Größe:	53,1 KB
ID:	25093
    Ciao sagt der JoeamBerg

  10. #10
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    20.08.2008
    Ort
    Karlsruhe
    Alter
    36
    Beiträge
    1.225
    Zitat Zitat von oberallgeier Beitrag anzeigen
    Markus, vielleicht postest Du mal ein Bild von einem DEINER Controller.
    Geht nicht, der verdammte Vogel ist geflüchtet und ich muss ihn erst einfangen. Recht herzlichen Dank für den Lacher, YMMD.

    Btw, die Aussage kam nicht ganz ohne Grund: Alles jenseits des Prozessorkerns ist eigentlich Peripherie. Auch neben Timern und ADC eben auch der WDT. Siehe Überschrift "Peripheral Features" auf der ersten Seite des Datenblatts.

    mfG
    Markus
    Tiny ASURO Library: Thread und sf.net Seite

Seite 1 von 2 12 LetzteLetzte

Ähnliche Themen

  1. Ein-Mann-Fluggerät: Mit 280 km/h durch die Luft
    Von Roboternetz-News im Forum Neuigkeiten / Technik-News / Nachrichten / Aktuelles
    Antworten: 1
    Letzter Beitrag: 24.07.2012, 01:42
  2. Antworten: 4
    Letzter Beitrag: 20.02.2010, 13:03
  3. ein langes programm durch ein befehl ausführen lassen,wie??
    Von alper im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 9
    Letzter Beitrag: 29.05.2007, 10:02
  4. Antworten: 0
    Letzter Beitrag: 14.06.2006, 14:01
  5. Antworten: 3
    Letzter Beitrag: 22.03.2004, 11:18

Berechtigungen

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

MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad