Forum: Mikrocontroller und Digitale Elektronik ATmega8 übertakten


von Patrick R. (pat711)


Lesenswert?

Abend allerseits,

mein ATmega 8 arbeitet mir ein wenig zu langsam (sollte µSekunden 
aufnehmen können) udn nun habe ich in einigen viedeos und aanderen 
Quellen gesehen, dass manch einer seinen ATm8 übertaktet hat.
Beispielsweise mit 24MHz. Ich würd mal sagen 20 reichen mir mal fürs 
erste.
1. Aber überlebt der des?
2. Und packt der Compiler des? also passen die Zeiten und so dann auch 
noch?
3. Muss ich dann einfach einen anderen Quarz anschließen? und was mach 
ich mit den fuses?
Die folgenden Teile vom ATm8 werden benötigt:
UART
Interrupt
Timer
vll EEPROM

Vll ne schwachstelle an dem Plan: die ganze Sache läuft mit 3,3V. 
Zurzeit unter 16MHz.

Danke schonmal für eure hoffentlich zahlreichen antworten

MfG Pat711

von holger (Gast)


Lesenswert?

>1. Aber überlebt der des?

Probiers aus?

>2. Und packt der Compiler des?

Das interessiert den Compiler nicht die Bohne.

> also passen die Zeiten und so dann auch
>noch?

Wenn F_CPU definiert ist vieleicht.

>3. Muss ich dann einfach einen anderen Quarz anschließen?

Kannst den Takt auch von Hand machen. 20MHz wird dich aber überfordern.

>und was mach ich mit den fuses?

In den Kühlschrank legen. Da bleiben sie lange frisch;)

von Axel D. (axel_jeromin) Benutzerseite


Lesenswert?

nimm gleich einen Mega 88, der kann 20Mhz von Hause aus.



Axel

von frank (Gast)


Lesenswert?

Axel Düsendieb schrieb:
> nimm gleich einen Mega 88, der kann 20Mhz von Hause aus.

Aber streng genommen erst ab 4,5V ;-)
frank

von Peter R. (pnu)


Lesenswert?

Ich selbst habe für einen DDS-Generator bei 5V mit 35 MHz übertaktet. Da 
liefen das einfache DDS Programm und die I2C-Schnittstelle noch, wenn 
der Takt aus einem externen Oszillator kam. Allerdings ist es 
zweifelhaft, ob andere Peripheriefunktionen (RS232, Timer, Int's, 
Oszillator für Quarz)auch noch arbeiten.
24 MHz bei 3,3V dürften ein Zufall sein, jedenfalls kann man es nur 
durch Probieren feststellen.

von Markus J. (markusj)


Lesenswert?

Patrick R. schrieb:
> Vll ne schwachstelle an dem Plan: die ganze Sache läuft mit 3,3V.
> Zurzeit unter 16MHz.

Damit übertaktest du den AVR schon jetzt ... Und um vernünftig solche 
kurze Zeiten messen zu können brauchst du wahrscheinlich einen um 
Größenordnungen schnelleren Takt - Oder eine andere Herangehensweise an 
dein Problem.

Wie wäre es wenn du Mal dein Problem beschreibst statt die von dir 
auserkorene Lösung?

mfG
Markus

von Peter D. (pdiener) Benutzerseite


Lesenswert?

Was genau meinst du mit "sollte µSekunden aufnehmen können"?
Was soll aufgenommen werden?

Normalerweise sollte man es gar nicht nötig haben, zu übertakten. Wer 
das braucht, hat offensichtlich den falschen Prozessor ausgesucht oder 
das Problem ineffizient gelöst.

Natürlich spricht nichts dagegen, dass man das aus reinem Interesse und 
Spaß mal ausprobiert, aber als Problemlösung darf man einen Betrieb 
außerhalb der Spezifikation nicht ansehen und sollte das nach 
Möglichkeit immer vermeiden.

Wenn sich die Problemlösung nicht vereinfachen lässt, kommen dann keine 
schnelleren Prozessoren in Frage?

z.B.
ATXmega
MSP430F5xxx
AT91SAM7
LPC21xx
...

Grüße,

Peter

von Purzel H. (hacky)


Lesenswert?

Eine duemmliche Idee. Dann wuerd ich doch gleich einen AVR32UC3 (32bit) 
nehmen und den mit 90MHz laufen lassen...

von Pat711 (Gast)


Lesenswert?

Morgen zusammen,

die µsec brauche ich, da ich eine am Interrupt eingehende Taktfrequenz 
möglichst genau messen muss.

Einen anderen Controller zu wählen wäre eine Möglichkeit allerdings ist 
die bisherige Firmware eben auf dem ATm8 ausgelegt.
Mit 32-Bit Controllern habe ich absolut keine Erfahrung. Ist der Weg da 
der selbe? Library usw.?

MfG Pat711

von Wayne (Gast)


Lesenswert?

Guck dir mal die Möglichkeit des Inputcaptures beim AVR an, damit geht 
so was auch. Damit werden Zeitmarken für Events an einem Pin (ICP) 
genommen und die kann man dann vergleichen.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Pat711 schrieb:
> die µsec brauche ich, da ich eine am Interrupt eingehende Taktfrequenz
> möglichst genau messen muss.
Laberlaberlaber!
Definiere "möglichst genau" möglichst genauer... :-/

von Patrick R. (pat711)


Lesenswert?

> Definiere "möglichst genau" möglichst genauer... :-/

Umso genauer der Wert wird um so besser wird im Endeffekt auch mein 
messergebnis. Also am besten auf 1-2µsec genau

von avion23 (Gast)


Lesenswert?

1MHz -> T = 1µs
16MHz -> T = 1/16µs
Wieso kannst du damit nicht auf 2µs Auflösung messen?

von Patrick R. (pat711)


Lesenswert?

letztes mal ist es daran gescheitert, dass das Programm zu groß war und 
der Interrupt zu oft kam. Vermutlich waren eben auch zu viele Befehle in 
der Interruptschleife (dürfen ja dann nicht mehr als 16 bzw. 15 Takte 
sein)

von Markus J. (markusj)


Lesenswert?

Hallo Patrick,

wie sieht das Eingangssignal aus? Welche Taktfrequenz hat es? Ohne eine 
exakte Problembeschreibung wird das hier nix ...

mfG
Markus

PS: Eine mögliche Lösung wäre (nach momentanem Wissensstand) die 
Verwendung der Input-Capture-Funktion in Kombination mit einem 
vorgeschalteten Zählerbaustein ...

von Ulrich (Gast)


Lesenswert?

Für eine genaue Messung sollte man besser die ICP Funktion nutzen. MIt 
der ICP Funktion kreigt man die Zeiten in der Regel auf 1-2 Zyklen 
genau, d.h. bei 10 MHz Takt ist man bei +-100-200 ns. Die Länge der 
Interruptroutine ist dann für die minimal messbare Zeit, nicht die 
Auflösung verantwortlich.

Wenn dann der Takt nicht ganz reicht, dann besser einen Mega88 - da 
ändert sich sehr wenig am Programm und in der Regel nichts am Layout.

von Patrick R. (pat711)


Lesenswert?

die eingangsfrequenz resultiert aus einem RC Glied. Das letzte Test lag 
Sie zwischen 2 und 3 kHz.
Außerdem sind es 3 eingangsfrequenzen, welche über einen Multiblexer 
(SMDHC4051) ausgewählt werden.

das mit dem ICP hab ich mir nun auch überlegt, gibt es denn dazu ein 
Tutorial?

von Kluchscheißernder N. (kluchscheisser)


Lesenswert?

Patrick R. schrieb:
> die eingangsfrequenz resultiert aus einem RC Glied. Das letzte Test lag
> Sie zwischen 2 und 3 kHz.

Dazu muss man keinen AVR übertakten, das macht der locker innerhalb der 
Spezifikation.

> Außerdem sind es 3 eingangsfrequenzen, welche über einen Multiblexer
> (SMDHC4051) ausgewählt werden.
>
> das mit dem ICP hab ich mir nun auch überlegt, gibt es denn dazu ein
> Tutorial?

Was willst Du mit einem Tutorial? Im Datenblatt (Kapitel Timer1) steht 
alles drin, was Du dazu wissen musst.

MfG

von Markus J. (markusj)


Lesenswert?

Patrick R. schrieb:
> Das letzte Test lag Sie zwischen 2 und 3 kHz.

Und da machst du so einen riesigen Aufstand? Für 3kHz brauchst du noch 
nicht Mal nen Input-Capture, da kannst du auch ganz bequem mit einer 
Zählervariable, einem flankengetriggerten Interrupt und einem Counter 
als Zeitreferenz machen.

Messablauf:
Zähler zurücksetzen
Counter zurücksetzen und starten

Eingehende Flanke: Zähler inkrementieren
Counter-Überlauf oder CTC -> Ende der Messung

Ergebnis: f = Anzahl der Flanken / Messzeitraum

mfG
Markus

von Patrick R. (pat711)


Lesenswert?

Markus J. schrieb:
>
> Messablauf:
> Zähler zurücksetzen
> Counter zurücksetzen und starten
>
> Eingehende Flanke: Zähler inkrementieren
> Counter-Überlauf oder CTC -> Ende der Messung
>
> Ergebnis: f = Anzahl der Flanken / Messzeitraum
>
> mfG
> Markus

so gehts natürlich auch. Bei mir war das folgendermaßen:

zähler bei eingehender steigender Flanke auf 0 setzen,
bei nächster eingehender Steigender Flanke Wert ind andere Variable 
speichern,
nächsten Kanal abfragen

von Markus J. (markusj)


Lesenswert?

Patrick R. schrieb:
> Bei mir war das folgendermaßen: [...]

Was nahe an der ICP-Methode ist, hat aber folgenden Nachteil: Die 
Messgenauigkeit wird durch internes und externes Timing relativ stark 
beeinflusst (f = 1/T bei kleinem T bewirkt starke Schwankungen). Wenn du 
den Messzeitraum dagegen in die Länge ziehst bekommst du mehr 
Stützstellen und somit ein genaueres/stabileres Ergebnis.

mfG
Markus

von Ulrich (Gast)


Lesenswert?

Wenn man den ICP Modus nutzt, kann man sich unter Umständen sogar den 
externen Multiplexer sparen, denn ICP geht auch über den Komperator und 
den Multiplexer des AD wandlers. Bei 2-3 kHz ist die Taktfrequenz 
ziehmlich unkritisch. Kritisch wird das ab etwa 200-300 kHz.

Bei 2-3 kHz muß man sich nichtmal groß um Überläufe kümmern.


Die Auswertung von Hand, aber auch mit einem Durchlaufenden Timer wäre 
eventuell eine Reizvolle aufgabe, wenn man die 3 Kanäle Simultan 
auswerten will, z.B. per Pin Change Interrupt. Auch da sollte eine Takt 
von run 8 MHz schon recht weit reichen, wenn man die ISR in ASM 
schreibt.

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.