Hallo, habe gerade folgenden Code auf den Atmega8 geflasht: int main (void) { DDRB=0xFF; while(1) { PORTB ^= 1; } } Mit dem Oszi messe ich an dem Port ein Rechtecksignal mit 102kHz. Jetzt ist die Frage warum das Signal nicht annähernd an die 16MHz Taktrate rankommt? Danke
Weil der Controller wahrscheinlich mit 1Mhz läuft und 10 Zyklen für die Schleife benötigt.
Der Rücksprung braucht schonmal 3-4 Befehle, das xor und das Zuweisen nochmal zwei, und je nachdem wie der Compiler (nicht) optimiert, dauert das Testen der Bedingung und das Laden und Speicher nochmal jeweils einen Takt.
>Jetzt ist die Frage warum das Signal nicht annähernd an die 16MHz >Taktrate rankommt? Jetzt ist die Frage wie man auf so eine Frage kommt bzw. wie man darauf kommt da 16MHz zu erwarten?
Die nächste Frage lautet dann: Ich kann meinen Controller nicht mehr programmieren, weil ich an den Clock-Fuses herumgespielt habe...? Also bitte genau gucken, was Du da einstellst.
mit dem CTC-Modus eines Timers kannst du auf bis zu 1/2*takt rankommen. mehr geht afaik nicht. eine schleife ist IMMER langsamer
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.