AVR Clock Schätzung

Gast #56121
Hallo,

ich habe folgendes Problem. Ich wollte gerade eine serielle
Schnittstelle für meinen AVR basteln. Leider haut die Verbindung nicht
so hin wie ich wollte. Eventuell liegt es daran dass ich keine
wirklichen 4MHZ habe wie ich glaube. Beim Ausführen von folgendem
Programm
        long counter;

-> mit long sind wahrscheinlich mehr assemblerbefehle nötig da wir ja
auf einem 8-bit rechner arbeiten
/->
  while (1) {
      if (counter == 100000)
          PORTB ^= _BV(PB1);

      if (counter == 200000) {
          PORTB ^= _BV(PB1);
          counter = 0;
      }
      counter ++;


    }

blinkt die LED an PB1 mit einem Intervall von ca. gut 1 sekunde. Leider
habe ich keinen Dissasembler und auch keine Lust mir den genauen
Assemblercode anzusehen um den Aufwand abzuschätzen. Aber prinzipiell
müssten es weniger als 4 000 000 / 100 000 = 40 sein.

Kann mir jemand sagen wie ich zu einer genauen Aussage bezüglich
Systemtakt komme ? Ich habe leider kein Oszilloskop.

mfG harald
Gast
Mit dem obigen Code kannst Du garnichts schätzen, weil Du nicht weißt,
welchen Code (wieviele Befehle) Dein Compiler daraus macht. Die einzige
Möglichkeit besteht darin, einen Timer zu benutzen. Der wird unabhängig
von der evtl. Anzahl der Befehle immer zur gleichen Zeit ausgelöst
(abgesehen von kleinen Abweichungung durch resetten des Timers, sofern
kein ctc benutzt wird).
Abhängig vom Controller kann es auch sein, daß Du den internen
Oszillator abschalten mußt.
"auch keine Lust mir den genauen Assemblercode anzusehen um den Aufwand
abzuschätzen"


Warum sollte dann ein anderer Lust dazu haben ???


Wenn Du genaue Zeiten haben willst, mußt Du Assembler nehmen oder
besser einen Timer.



Peter
Gast
Hab ich das richtig verstanden? Du willst mit dem Programm feststellen,
wie schnell der Proz eigentlich läuft?? Aber wieviel Takte der Proz.
für die Schleife wirklich braucht, weist du nicht und bist auch zu
faul, das zu suchen? Hängt vom Compiler ab, selbst wenn hier einer so
blöd wäre, dir die Arbeit abzunehmen, könnte das deshalb keiner.Und
Ergebnis würde es auch nicht bringen, da eine serielle Verbindung schon
bei einem Fehler von ca. 4% aus dem Tritt kommt.
Programmier dir einen Timer mit z.B. 1min, dann kannst du mit einer Uhr
einen Fehler erkennen.
Gast
Ich habe eigentlich gehofft, dass jemand der sich besser auskennt eine
ungefähre Abschätzung machen kann ob der 4MHZ Takt hinkommt oder nicht.
Ich glaube falls ein interne Frequenzgenerierung aktiv ist wäre diese
auf 1MHZ gesetzt ( jedenfalls habe ich das vor Kurzem gelesen. ) Ich
habe von keinem erwartet sich den Assemblercode anzuschauen.

mfG Harald
"Ich habe von keinem erwartet sich den Assemblercode anzuschauen"

Anders gehts aber nicht !
Man ist ja kein AVR.


Nur wenn Du einen Timer genommen hättest, hätte man mal die Reload- und
Vorteilerwerte in den Taschenrechner tippen können. Aber dann hättest
Du es ja auch selber tun können.


Peter

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 22 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.