PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Frequenzzähler ohne Timer Interrupts mit Atmega



Fabi1234
13.12.2007, 16:29
Hi an alle,

Ich hab mal wieder eine Frage. Ich möchte eine Frequenzanzeige für mein UKW-Radio bauen.

Das dumme ist nur, das bei mir schon die beiden Hardware Timer belegt sind, sprich ich muss dass ohne Hardwareunterstützung in Software realisieren.

Kann das denn funktionieren, wenn der Atmega 16 mit 1MHZ takt läuft, ich verwende den Prescaler U813, wenn ich den auf 256 Teilerwert einstelle, hätte ich eine maximale Frequenz von 422 KHZ am Atmega, ich glaube nicht,dass das noch geht, da ich gehört habe, das die anliegende Frequenz maximal die Hälfte des Atmega Taktes haben darf, bin mir aber nicht sicher, ob das stimmt.

Würde es vielleicht mit entsprechend geschickter Programmierung trotzdem klappen, oder ist der Atmega damit total überfordert?

danke schonmal für eure Antworten.

McJenso
13.12.2007, 17:02
Hi,
das UKW Band geht über 100Mhz hinaus. Versuch eine andere, besser messbare Größe zu finden, die sich proportional zur Frequenz verhält. Kenne das Radio nicht. Vielleicht kann man an einem Poti etwas abgreifen.

Gruß

Jens

Sauerbruch
14.12.2007, 00:58
Das dumme ist nur, das bei mir schon die beiden Hardware Timer belegt sind

Aber der ATmega16 hat doch 3 Timer...

Welches Signal wolltest Du denn verwenden? Wahrscheinlich das vom ZF-Oszillator - kommst Du da denn problemlos dran?

Fabi1234
14.12.2007, 14:39
Hi, also der PinD6 ist noch frei, der dürfte ja gehen. Ist es aber nicht so, das man zwei Timer für einen Frequenzzähler benötigt? Eins für die eigentlich Frequenz und dann noch das Tor.

Hi, also das ZF-Ozillatorsignal ist extra rausgeführt, für eine PLL, also dürfte das nicht das Problem sein.

wkrug
14.12.2007, 16:38
Wie schaut denn der Schaltplan deines Empfängers aus ?
Wenn der mit I²C komuniziert könntest Du die Frequenz Einstellbefehle direkt vom Bus abfangen und auswerten.

Dann wäre kein Eingriff in das HF Teil des Empfängers notwendig.

Fabi1234
14.12.2007, 18:46
Hier mal Ausschnitte des Datenblatts. Der Tuner ist nen ganz normaler, wird bei mir im Moment per Poti abgestimmt der hat kein I2C oder ähnliches.

McJenso
15.12.2007, 08:41
Hallo,

schau dir mal den Pin 12 genauer an. Vom Namen her würde ich sagen, dass dort eine Spannung passend zur Frequenz angelegt wird. Sollte es so sein. könnte man die über den ADC auswerten.

Gruß

Jens

Fabi1234
15.12.2007, 10:22
Hi,
ja da kommt die Abstimmspannung raus, ich würde es aber lieber mit dem Pin 9 Ozillator out machen?

Der MC soll die Impulse zählen, die dann vom U813 kommen und die dann auf dem LCD anzeigen.

Fabi1234
25.12.2007, 22:23
Hi,

mir ist gerade noch was eingefallen.

Gibt es denn fertige Counter Ics die per I2C angesteuert und ausgelesen werden, dass wäre kein Problem mehr, das ich noch genug sonstige Ports frei hab, nur halt die Timer Pins, sind bereits belegt?

stefan_Z
26.12.2007, 01:46
vielleicht hat der Mega ja nen PinChange Interrupt... der Tiny2313 hat sowas...

Vitis
26.12.2007, 22:33
oder dekadenzähler 4017 oder BCD-Zähler 4518 oder 4520, jeweils kaskadieren und mit 8574 Portexpander auslesen und resetten.
fiele mir da noch ein ... ist aber n ziemliches Bausteingrab

wkrug
26.12.2007, 23:53
Ich hab ein bischen rumgegoogelt und bin auf den SN74lv8154 von Texas Instruments gestossen.
Das ist ein 2*16 Bit Binärcounter mit Ausgangsmultiplexer und Tri State Ausgängen. Man bräuchte also für die Ansteuerung des Chips 8 Datenleitungen + 5 Steuerleitungen.
Schaltet man die beiden 16 Bit Counter hintereinander kriegt man so einen 32Bit Binärcounter was ja ausreichen sollte.

Ein Timer des Atmega muss aber noch als Zeitbasis herhalten, oder Du legst die Zeitbasis extern an.

Bezugsquellen hab ich noch nicht nachgeschaut.

Vieleicht findet man ja mit ein bischen rumsuchen noch einen Counter der ein Ausgangs Schieberegister hat ?

In einem älteren ELEKTOR Frequenzzähler war mal sowas verbaut.

EDIT! Und wenn Du dem ATMEGA einen anderen Controller vorschaltest z.B. einen Attiny 26 oder ATMEGA 8, der nur die Frequenz zählt.
Den kannst Du dann an deinen ATMEGA 16 mit fast jeder beliebigen Schnittstelle die Daten übertragen lassen.
Der Vorschalte Chip kann auch gleich die Frequenz ausrechnen.
Das dürfte auch die preisgünstigste Variante sein.

Fabi1234
30.12.2007, 20:12
Hi,

ich denke dass ich wohl doch den Atmega8 nehmen werde, der hat ja ein 8bit Timer für die Zeitbasis und einen 16bit timer für die eigentlich Frequenzzählung. Wollte halt nicht noch extra einen MC nehmen um Strom zu sparen, aber die brauchen ja eh nicht viel.

Was ist denn mit dem Attiny26?
So wie ich das seh hat der nur zwei 8bit Counter, wird es denn damit klappen?

Und wo gibt es gut kommentierte Programmbeispiele für eine passende Frequenzzähleranwendung?

Ihr seht schon, bin noch nicht so erfahren in der MC Programmierung.

wkrug
31.12.2007, 08:31
Was ist denn mit dem Attiny26?
Man kann im Timer Overflow Interrupt einen weiteres Register mit hochzählen und kriegt somit aus dem 8Bit Timer auch einen 16, 24, 32... Bit Zähler raus.

Wenn der Platz und der geringfügig höhere Preis keine so grosse Rolle Spielen würd ich auch den ATMEGA 8 nehmen.

Geh doch mal bei Google mit den Suchbegriffen "frequenzzähler avr quellcode" rein. Da kommen dann so einige Beispiele wie zum Beispiel der hier: http://www.avr-asm-tutorial.net/avr_de/fcount/fcount_m8.html
Da sollte bestimmt was passendes dabei sein.