mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Frequenzgenerator mit ATtiny2313


Autor: Kalle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe vor mit einem ATtiny2313 einen Frequenzgenerator zu 
realisieren.
Der Frequenzbereich liegt zwischen 1MHZ...5MHZ - schafft das der 2313?
Wenn ja, wie könnte man das machen?

Gruß
Kalle (Karl-Heinz)

Autor: Ulrich (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Durch Teilen kann man Frequenzen von Takt geteilt durch 2,4,6,8,... 
einstellen. Wenn man keinen Wert auf ein Symetrisches Signal legt gehen 
auch Teiler von 3,5,7,....

So direkt ohne extra Hardware geht es nicht besonders gut. Die Schritte 
werden reichlich grob, und nur in Teilen des Bereiches könnte man den 
internen "RC"-Oszillator verstimmen - vermutlich auch nicht gewünscht.

Um auch die höheren Frequenzen fein Einstellbar zu machen bräuchte man 
zusätzliche Hardware.

Autor: Kalle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Danke für die Antwort.
Kann man das nicht mit dem Timer realisieren?
Damit habe ich auch schon LEDs blinken lassen, nur ist da halt die 
Frequenz viel kleiner...
Konkret geht z.B. um eine Frequenz von 4,864MHZ... kann das der Timer 
nicht so genau schaffen?

Gruß
Kalle (Karl-Heinz)

Autor: Floh (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nimm doch einen VCO (Voltage Controlled Oszillator), dessen 
Ausgangsfrequenz kanst du über eine Eingangsspannung einstellen.
:-)

Autor: Kalle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Floh: Das ist eine sehr gute Idee! dann mach ich aber noch eine PLL 
dran.
Was für ein PLL Chip empfiehlt sich da? (Hab nur Erfahrungen mit höheren 
Frequenzen)

Gruß
Kalle (Karl-Heinz)

Autor: Kalle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nachtrag: Habe mir gerade den 74HC4046 angeschaut. Hat der schon einen 
VCO integriert? Wenn ja, wie kann ich den Nutzen?
Ich komm mit dem Datenblatt nicht ganz klar.

Gruß
Kalle (Karl-Heinz)

Autor: Ulrich (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das PLL IC 4046 kann man schon ganz gut nutzen. Bei den meisten Lösungen 
wird man noch einen Teiler dazu brauchen. Mit PLL und Teiler kann man 
eine Freuquenz um z.B. dem Faktor 256 hochsetzen. Die niedrigere 
Frequenz kann dann der µC erzeugen, mit genügend Auflösung.  Genau mit 
der Kombination hab ich einen Frequenzgenerator aufgebaut - geht bis 
knapp 20 MHz (Grenze des HC4046) und mit gut 16 Bit Auflösung relativer 
Auflösung für die Frequenz. D.h. bei den 4,6... MHz etwas besser als 100 
Hz Auflösung. Der µC erzeugt bei mit die Frequenz per Moduliertem Teiler 
(fractional divider). Besser wäre aber wohl Software DDS und ein 
Comperator (ggf. reicht der Eingang den 4046).


Wenn man mutig ist, könnte man ggf. auch nur den VCO des 4046 für den 
Takt des µC nutzen und dann den µC die PLL Funktion in Software laufen 
lassen um die Frequenz an einen extra Takt (z.B. 32 kHz Quarzoszillator) 
anzubinden. Ist aber sicher etwas Trickreich.

Autor: Kalle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ok,

wird es einfacher, wenn meine Frequenz fix ist?
Also z.B. fix 4,864MHZ? wie kann man das am einfachsten lösen?

Gruß
Kalle (Karl-Heinz)

Autor: Ulrich (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Eine feste Frequenz macht es schon einfacher, vor allem ohne µC.
Am einfachsten geht es wenn man einen passenden Quarz findet. Ggf. auch 
mit der 2,3,4, 5 - fachen Frequenz.  Mit einem PLL ginge auch ein 
einfaches gebrochenes Verhältnis wie  4/3 oder 5/4 .

Wie genau und stabil muss die Frequenz denn sein ?
Ggf. hilft aus ein Hinweis wofür die Frequenz gebraucht wird.

Autor: Valentin Buck (nitnelav) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bin mir fast sicher, dass ich schon mal einen Quarz mit dieser Frequenz 
gesehen habe.
Guck mal bei Farnell (HBE) oder Conrad.
Ist auf jeden Fall keine übliche Frequenz.

Mit freundlichen Grüßen,
Valentin Buck

Autor: Kalle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es geht um einen Stereocoder, in dem ist ein 4,864MHZ Quarz drin. Weil 
ich aber keinen 4,864MHZ Quarz habe, möchte ich diese Frequenz mit einem 
µC (oder sonst wie) erzeugen. Nach dem Quarz kommt ein 4060, der die 
Frequenz teilt? (Ausgang ist PIN4, also teilt er durch 128) -> 38KHZ... 
Habe gerade versucht 38KHZ mit einem mega32 zu erzeugen...
Leider ist es zu ungenau, oder ich mach was falsch...

Hier das Programm
#include <avr/io.h>
#include <inttypes.h>
#ifndef F_CPU
#define F_CPU 12000000UL
#endif
#include <util/delay.h>
#include <stdint.h>
#include <avr/interrupt.h>

ISR(TIMER1_COMPA_vect)
{
  cli();

  PORTB ^= 1;

    OCR1A += 316;

  sei();
}

int main()
{
  DDRB = 0xFF;

    TCCR1B |= (1<<CS10);
  //TCCR1B |= (1<<CS11);
  //TCCR1B |= (1<<CS12);

    TIMSK |= (1<<OCIE1A);   // Interrupt freischalten

  OCR1A = 0;

  sei();

  while(1)
  {
  }

  return 0;
}

Den Takt erhällt der mega32 aus einem 12MHZ Quarz...
kommen da an PB0 keine 38KHZ raus?

Gruß
Kalle (Karl-Heinz)

Autor: Kalle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
keiner ne Idee?

Autor: Floh (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kalle schrieb:
> Leider ist es zu ungenau, oder ich mach was falsch...

Für solche Sachen eignet sich die Hardware-PWM besser.

Pin setzen bei Wert 0, löschen bei compare, nebenbei noch ctc einstellen 
(clear timer on compare match).

Der Genauigkeit wegen den 16-bit-Timer und du bist fertig.
:-)

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kalle schrieb:

> Leider ist es zu ungenau, oder ich mach was falsch...

Wo hast du die 316 her?
rein rechnerisch brauchst du bei 12Mhz 315 Timertakte um 38095Hz zu 
erzeugen. Das bedeutet einen Vergleichswert von 314, nicht 316

Und lass die cli() bzw sei() in der ISR weg. In deiner App sind sie zwar 
egal, aber wenn du das aus Gewohnheit machst, schiesst du dir nur selber 
ins Knie

PWM Modus ist schon angesprochen worden. Für meine Begriffe ist ein CTC 
Modus mit der entsprechenden Einstellung, dass bei einem Match der 
entsprechende Pin getoggelt werden soll, noch einfacher zu benutzen.
Dann macht die Hardware genau das, was deine ISR macht.

Autor: Kalle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ok, ich habe es jetzt so versucht:
#include <avr/io.h>
#include <inttypes.h>
#ifndef F_CPU
#define F_CPU 12000000UL
#endif
#include <util/delay.h>
#include <stdint.h>
#include <avr/interrupt.h>

int main()
{
  DDRD = 0xFF;

  TCCR1B |= (1<<WGM12);

  TCCR1A |= (1<<COM1A0);

  OCR1A = 314;

  TCCR1B |= (1<<CS10);
  //TCCR1B |= (1<<CS11);
  //TCCR1B |= (1<<CS12);

  sei();

  while(1)
  {
  }

  return 0;
}

Warum funktioniert das nicht?
Als Pin habe ich den PD5 (=OC1A) verwendet...
macht das keine 38KHZ?
Was mache ich denn falsch?

Gruß

Kalle (auch Karl-Heinz) :-)

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

>Als Pin habe ich den PD5 (=OC1A) verwendet...
>macht das keine 38KHZ?

Beim ATTiny2313 ist das OC0B. OC1A ist PB3.

>  OCR1A = 314;

der Wert muss 157 sein.

MfG Spess

Autor: Kalle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, ok, ich habe jetzt doch einen mega32 genommen.
Es funktioniert nun fast - heißt manchmal leuchtet die Stereolampe im 
Radio... (Ich habe so einen UKW-Transmitter, leider nur mono und da soll 
der Stereocoder ran...)

macht denn der mega32 das gleiche Signal, wie der 4060 mit 4,864MHZ 
Quarz machen würde, wenn das Signal an PIN4 des 4060 abgegriffen wird?

Gruß
Kalle (Karl-Heinz)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.