Forum: Mikrocontroller und Digitale Elektronik AVR Clock Schätzung


von Harald (Gast)


Lesenswert?

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

von thkaiser (Gast)


Lesenswert?

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.

von Peter D. (peda)


Lesenswert?

"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

von crazy horse (Gast)


Lesenswert?

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.

von Harald (Gast)


Lesenswert?

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

von Peter D. (peda)


Lesenswert?

"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

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.