Hallo,
ich bin drauf und dran mir eine Mikrocontrollerschaltung mit Hilfe des
Tutorials selber zusammen zu bauen. Allerdings möchte ich einen
AtMega16 verwenden. Nun ist mir das mit dem Quarzoszi nicht ganz klar:
Ist dieser überhaupt notwendig? Könnte ich auch die 16Mhz des AtMega16
voll ausreizen? Was sind Vor-und Nachteile von verschiedenen
Taktungen?
Danke
Marco
Interner Oszillator:
Geht nur bis 8MHz, nicht so übermäßig Temperaturstabil, die beiden Pins
für den Taktanschluß können anderweitig verwendet werden.
Externes Quarz:
Braucht 3 Bauteile (Quarz+2 Kondensatoren), recht genau, billig.
Quarzoszillator:
relativ groß und teuer und strahlt im HF-Bereich.
Markus
Hallo,
ja du kannst einen 16er Quarz verwenden, wenn du nicht die L-Version
des Controllers nimmst.
> Warum wird im Tutorial ein 4Mhz verwendet?
Weil man nicht immer den schnellsten Quarz nehmen muss?! Immer so
schnell wie nötig, nicht wie möglich...
Viele Grüße
Hi,
die 4 MHz haben sich so langsam bei AVR Controlern eingelebt. Erstens
weil die AVR Risc sowieso schnell sind, 1 Takt und meistens ein Befehl,
und zweiten wo kämen wir hin mit 16 MHz und einen Software Timer. Ich
hab mit 4 MHz schon zwei Register in benuzung für 150ms.
Hi
@Jörg
Das versteh ich jetzt nicht. Ich komme bei 4MHz, 1024er Vorteiler und
einem 8-Bit Timer auf eine INT-Frequenz von 15,2Hz (65,536ms) Also
sollte doch ein einziges Register + CTC-Mode des Timers locker für
deine 150ms reichen.
Matthias
Tag,
@Matthias, ich meinte einenh Software Timer wo man mit hife von
Registern und sprungbefehlen den controller neinige Zeit Beschäftigen
läst. Und die Hardware Timer sind mir für solche aufgaben einfach zu
schade. Und dann, rechne mal wie weit du kommst mit einem Register.
Bsp.
Wait1:
ldi Tim1,255
Wait11:
dec Tim1 ; ein Takt
brne Wait11 ; zwei Takte
3 takte 4 MHz 255 = 0,00019125 s also 191,25 µs
das sind noch keine 150 ms da muss ein zweiter Hilfszähler her.
Hi
also ich hab immer einen frei laufenden Timer mit sowas um 1ms INT
Zeit. Sozusagen als Systemtick. Damit kann man wunderbar alle möglich
Zeiten im ms-Bereich abfangen ohne auf so einen Mist (ja Mist) wie
hartkodierte Schleifen zurückgreifen zu müssen. Sowas kann man machen
wenn man mal irgendwo ein paar µs braucht. Aber im ms-Bereich macht man
das über den Timertick.
Matthias
Frag an Matthias:
Angenommen, ich möchte folgendes realisieren:
funktion1();
delay(20ms);
function2();
delay(30ms);
Wie würdest du das machen, auch mit deinem Timertick ? Ich verstehe das
nicht so ganz, wo der Vorteil ist. Ob ich jetzt im Timer warte oder in
einer Schleife, ist doch eigentlich egal. Wäre nett, wenn du dazu mal
was sagen könntest.
Gruß
Thorsten
Hi
Du kannst während der warterei noch andere Dinge machen wie etwa Tasten
pollen, den Watchdog bediehnen usw. Kommt eben auf die Anwendung an.
Für den Timertick muß man ja nicht unbedingt einen extra Timer
reservieren. Evtl. reicht da auch einer der PWM macht oder ähnliches.
Obiges Beispiel würde so aussehen:
funktion1();
tick=0;
while(tick<20)
{
tuwas;
}
function2();
tick=0;
while(tick<30)
{
tuwas;
}
Matthias
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.