-
        

Ergebnis 1 bis 6 von 6

Thema: Frequenzgenerator- Allgemeine Fragen zur Frequenz usw

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    18.03.2007
    Ort
    NRW
    Beiträge
    62

    Frequenzgenerator- Allgemeine Fragen zur Frequenz usw

    Anzeige

    Bin Anfänger im Programmieren des Atmega 32, habe dennoch versucht einen Frequenzgenerator zu Basteln bei dem ich die Frequenz mit einer möglichst hohen Bandbreite einstellen kann.Es ist mir auch soweit gelungen

    Kann auch die Frequenz einstellen im Bereich von ca 5 Herz bis 25Khz
    allerdings ist der Einstellbereich nicht Linear, hat da jemand einen besseren Vorschlag oder einen Hinweis wo man nachschlagen kann.
    Dann ist da noch die obere Maximale Frequenz von ca 25 Khz kann ich die höher bekommen ?
    Ich benutze einen 8 Mhz Quarz

    mfg Nase

    Folgender Bascon Code:
    Code:
    ____________________________________________________________________
    
    ' Frequenzgenerator 1 E
    
    'Led 1(grün) Blinkt im Takt
    'ca im Sekunden Takt, mit Taste 1 kann Frequenz erhöht werden und mit Taste 2
    ' verringert werden
    
    '--------------------- Allgemeine Prozessor Konfiguration ---------------------
    
    $baud = 9600                  'Rs232 Datenüberagungsrate
    $regfile "m32def.dat"         'Definiert den Atmega als Atmega 32
    $crystal = 8000000            'Gibt die Quarzfrequenz an in Herz
    '-----------------------------------------------------------------------------
    ' Variablen definieren
    Dim Wert1 As Word
    Dim A As Long                 'Schrittweite zum Aufwärts-Zählen
    
    Ddra = &B0011111              ' Port A0 bis A7 als Ausgänge setzen für Leds
    Ddrb = &B00000000             ' Port B komplett als Eingänge setzen für Taster
    Portb = &B00011110            ' Port B1-B2-B3-B4 PullUp aktivieren für Taster
    
    '-----------------------------------------------------------------------------
    Config Timer1 = Timer , Prescale = 8
    'Bestimmt das Timer 1 verwendet und teilt den Takt durch 8
    
    Enable Timer1                 'Startet Timer 1
    On Timer1 Test                'springt bei Überlauf nach " Test"
    
    Enable Interrupts             'Interrupt aktivieren
    
    '------------------------------------------------------------------------------
    ' Konfiguration fürs Display
    Config Lcd = 16 * 2
    Config Lcdpin = Pin , Db4 = Portc.2 , Db5 = Portc.3 , Db6 = Portc.6 , Db7 = Portc.7 , Rs = Portc.5 , E = Portc.4
    
    '______________________ H a u p t p r o g r a m m  ____________________________
       A = 100                    ' Vorgabewert für Schrittweite bei Aufwärts zählen
    
    
        Do
    
    'Hier wird über Tasten 1 und 2 der Wert für die Voreinstellung des Timers
    ' geändert
    If Pinb.0 = 1 Then Waitms 20
    If Pinb.0 = 1 Then Wert1 = Wert1 + A
    
    
    Waitms 20
    If Pinb.1 = 0 Then Waitms 20
    If Pinb.1 = 0 Then Decr Wert1
    
    
    
      Cls
      Locate 1 , 1
      Lcd Wert1 ; "Voreinst."
    
    
          Loop
    
    '_____________________ H a u p t p r o g r a m m - E n d e ____________________
    
    Test:                         'Sprungmarke zu der gesprungen wird wenn der Timer einen Überlauf hat
    Timer1 = Wert1                'Timer soll ab (Wert aus Wert1)  hochzählen
    Toggle Porta.0
                    'Port A.0 bei jeden Überlauf umschalten
    Return 
    _________________ Ende ________________________________________
    Code-Tags verwenden, Kollege ! (PicNick, Mod)

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    18.11.2008
    Ort
    Kapfenberg
    Beiträge
    628
    Hallo!

    allerdings ist der Einstellbereich nicht Linear, hat da jemand einen besseren Vorschlag oder einen Hinweis wo man nachschlagen kann.
    Dann ist da noch die obere Maximale Frequenz von ca 25 Khz kann ich die höher bekommen ?
    Beide Probleme haben mit dem Timer zu tun.

    Beginnen wir bei der Problemlösung also bei der Berechung des Timers:
    Die Zeit für einen Zählschritt beträgt
    Quarzfrequenz / Prescale = 8 MHz / 64 = 125000 Hz - also alle 0.008 ms
    Die Dauer, die der Timer insgesamt benötigt bis die 65536 Schritte voll gezählt sind beträgt: 0.008 ms x 65536 = 0.524288 Sekunden.
    Nach 0.524288 Sekunden wird also deine Unterroutine aufgerufen. Um eine höhere Frequenz einzustellen, verkürzt du den Zählbereich deines Timers durch die Vorgabe eines größeren Startwertes als 0.

    Allerdings erfolgt beim inkrementieren des Startwertes die Zeit, die für einen Zählvorgang benötigt wird, keine lineare Änderung. Ich habe das mal in diesem Diagramm veranschaulicht:


    Überleg dir jetzt mal einen Lösungsansatz für diese Problematik, ich hab grad keine Zeit mehr. Wenn du keinen findest, gehen ich weiter darauf ein.

    Grüße
    Thomas

  3. #3
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    So ein Rechtecksignal, erzeugt man besser mit hilfe der Hardware. der 16 Bit Timer 1 hat z.B, einen CTC modus und kann das Frequenzerzeugen vollständig in Hardware machen man muß nur noch den Teilerfaktor ins passende Register schreiben und ggf. für ganz niedriege Frequenzen den Vorteiler einstellen.

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    18.03.2007
    Ort
    NRW
    Beiträge
    62
    Hallo Thomas

    Startwert fängt ja bei 0 an und läßt sich bis 65536 erhöhen, allerdings wird die Frequenz nicht größer wenn ich den Startwert verringere sonder kleiner , weil je höher der Startwert umso schneller wird ja der Überlauf erreicht und umso größer die Frequenz

    gruß nase

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    18.03.2007
    Ort
    NRW
    Beiträge
    62
    Zitat Zitat von Besserwessi
    So ein Rechtecksignal, erzeugt man besser mit hilfe der Hardware. der 16 Bit Timer 1 hat z.B, einen CTC modus und kann das Frequenzerzeugen vollständig in Hardware machen man muß nur noch den Teilerfaktor ins passende Register schreiben und ggf. für ganz niedriege Frequenzen den Vorteiler einstellen.
    Das mit der Hardware versteh ich nicht , was heißt CTC Modus ?

    Gruß Nase

  6. #6
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    Die 16 Bit timer und zum Teil auch die 8 Bit Timer haben einen Modus wo man angeben kann wie weit der Timer zählt. Danach fängt er dann wieder bei 0 an. Zur Erklärung siehe hier:
    http://www.roboternetz.de/wissen/index.php/Timer/Counter_(Avr)

    Zusammen mit der Möglichkeit auch die Ausgabe von der Hardware machen zu lassen, geht die Frequenzerzeugung dann gang im Hintergrund, ohne Interrupt.

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •