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
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
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.
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
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.