- 3D-Druck Einstieg und Tipps         
Seite 1 von 4 123 ... LetzteLetzte
Ergebnis 1 bis 10 von 40

Thema: Frequenzgenerator Entwickeln ? !

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

    Frequenzgenerator Entwickeln ? !

    Anzeige

    Praxistest und DIY Projekte
    Hallo, Suche jemand der einem Anfänger in einfachen Schritte bei der Entwicklung eines Frequenzgenerators hilft, habe schon einige Versuchem mit Timer unternommen, allerdings komme ich nicht über Frequenz von ca 4 Khz hinaus. Habe zwar schon einige fertige Programm gefunden , allerdings habe ich die nicht durchschauen können.
    Mir geht es aber in der Hauptsache um das Verständnis.
    Das war mein letzter Test:

    Code:
    $regfile "m32def.dat"
    $crystal = 1000000
    $hwstack = 32
    $swstack = 10
    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
    D e f i n i t i o n   d e r  V a r i a b l e n
    Dim Taktwert As Byte
    D e f i n i t i o n  d e r  P in  's
    Portb = &B00011110
    Ddra = &B11111111
    T i m e r 0
    Config Timer0 = Timer , Prescale = 1
    Enable Timer0
    On Timer0 Timer_null
    Enable Interrupts
    H a u p t p r o g r a m m
    Do
    If Pinb.1 = 0 Then Taktwert = Taktwert + 1
    If Pinb.2 = 0 Then Taktwert = Taktwert -1
    Gosub Anzeige
    Waitms 50
    Loop
     U n t e r r o u t í n e   A n z e i g e
    Anzeige:
    Cls
    Locate 1 , 1
    Lcd "Taktwert=" ; Taktwert
    Locate 2 , 9
    Lcd "V.FG6A"
    Waitms 100
    Return
    U n t e r r o u t i n e  T i m e r  0
    Timer_null:
    Timer0 = Taktwert
    Toggle Porta.0
    Return

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    26.05.2007
    Beiträge
    594
    Die LCD-Ausgabe brauch sehr viel Zeit, das sollte die 4kHz erklären. Die LCDs vertragen nicht so schnelle Datenschübe, daher wird in der Routine quasi mit WAITUS / WAITMS gearbeitet.
    Den Aufruf würde ich einfach mit in die IFs packen, so dass die Anzeige nur dann aktualisiert wird, wenn du klickst. Allerdings bräuchtest du auch ne Art Entprellung, damit du nicht pro Klick 20 Schritte hochgehst.

  3. #3
    Erfahrener Benutzer Lebende Robotik Legende Avatar von PICture
    Registriert seit
    10.10.2005
    Ort
    Freyung bei Passau in Bayern
    Alter
    73
    Beiträge
    11.077

    Re: Frequenzgenerator Entwickeln ? !

    Hallo!

    Zitat Zitat von nase
    Hallo, Suche jemand der einem Anfänger in einfachen Schritte bei der Entwicklung eines Frequenzgenerators hilft ....Mir geht es aber in der Hauptsache um das Verständnis.
    Ich könnte dir als PIC ASMan ausschliesslich bei Hardware (Elektronik) helfen, antworte jedoch nur auf konkrete Fragen.

    MfG

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

    Re: Frequenzgenerator Entwickeln ? !

    Zitat Zitat von PICture
    Hallo!

    Zitat Zitat von nase
    Hallo, Suche jemand der einem Anfänger in einfachen Schritte bei der Entwicklung eines Frequenzgenerators hilft ....Mir geht es aber in der Hauptsache um das Verständnis.
    Ich könnte dir als PIC ASMan ausschliesslich bei Hardware (Elektronik) helfen, antworte jedoch nur auf konkrete Fragen.

    MfG
    Danke , aber mir geht's nur um die Software

    gruß Nase

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    18.03.2007
    Ort
    NRW
    Beiträge
    62
    Zitat Zitat von stefan_Z
    Die LCD-Ausgabe brauch sehr viel Zeit, das sollte die 4kHz erklären. Die LCDs vertragen nicht so schnelle Datenschübe, daher wird in der Routine quasi mit WAITUS / WAITMS gearbeitet.
    Den Aufruf würde ich einfach mit in die IFs packen, so dass die Anzeige nur dann aktualisiert wird, wenn du klickst. Allerdings bräuchtest du auch ne Art Entprellung, damit du nicht pro Klick 20 Schritte hochgehst.
    Hab die LCD Anzeige komplett rausgenommen, an der Frequenz hat sich nichts geändert, immer noch maxomal 4 Khz

  6. #6
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2007
    Ort
    Göttingen
    Beiträge
    706
    Ich hab´ Deinen Code mal im Simulator laufen lassen. Es zeigt sich, dass die komplette Timer0-ISR 126 Taktzyklen verbraucht. Es müssen ja auch eine ganze Menge Register "gerettet" und nach Ende der ISR wieder zurückgegeben werden. Das sind also etwa 125µs Zeitverlust pro Flanke, also etwa 250µs pro kompletten Impuls - was sich ziemlich genau mit den von Dir gemessenen maximalen 4 KHz deckt.

    Das ist ein sehr lehrreiches Beispiel dafür, dass auch die kürzeste ISR dem Controller ganz schön viel Arbeit bereitet Aber Du wolltest ja wissen, wie Du mehr rausholen könntest. Und da sehe ich zwei Möglichkeiten:

    Entweder Du erhöhst die Taktfrequenz des Controllers. Der Mega32 kann mit dem internen Oszillator bis zu 8MHz - dann kämst Du schon mal bis etwa 32 kHz.

    Oder Du arbeitest mit der Hardware-PWM - und um genau zu sein, im "CTC"-Modus. Das ist ein sehr feines Feature, was die Erzeugung von absolut frequenzgenauen Rechtecksignalen erlaubt, ohne dass der Controller auch nur das kleinste bisschen dafür rechnen oder arbeiten muss. Das läuft nebenbei im Hintergrund ab, während der Controller sich um andere Dinge kümmern kann.

    Im Datenblatt des Mega32 gibt´s auf Seite 74 ein Bild dazu, das mehr sagt als 1000 Worte. Der Wermutstropfen ist allerdings der, dass Bascom (soviel ich weiß) den CTC-Modus nicht direkt unterstützt - man muss die beiden relevanten Register halt "von Hand" setzen. Aber das tut nicht weh - und wenn man verstanden hat was man dabei tut, macht´s sogar Spaß

  7. #7
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.02.2006
    Beiträge
    1.113
    Hallo nase,
    ich halte es für leicht nachvollziehbar, dass du nicht über 4KHz hinauskommst.
    Der Aufruf der Timer ISR, die Befehle in der ISR und der Rücksprung ins Programm benötigen 125 Takte. Da du togglest, also 250 Takte für eine volle Periode. Macht bei 1MHz/250 = 4KHz.
    Taktwert > 195 führt übrigens dazu, dass die Frequenz wieder kleiner wird.
    Ich sehe zwei Möglichkeiten, die Frequenz zu erhöhen:
    1. Du rufst die Timer ISR mit der Nosave Option auf. Dann musst du wissen, welche Rehister für deinen Code gebraucht werden. Diese musst du dann von Hand pushen und poppen.
    2. Du erzeugst die Ausgabe mittels eines Timers im CTC Mode. Dann kannst du bis auf halbe Taktfrequenz kommen. Dabei sind allerdings nur bestimmte Frequenzen möglich (1/2, 1/4, 1/6, ...). Und du musst den zugehörigen Pin frei haben.
    Dafür geht das Ganze rein in Hardware, also ohne den µC zu belasten. Will heißen, dein Programm hat noch 100% der Rechenzeit zur Verfügung.

    @Sauerbruch: warst du ein paar Sekunden schneller. Geht übrigens in Bascom so:
    Config Timer0 = Timer , Clear Timer = 1 , Compare = Toggle , Prescale = 1
    in OCR0 setzt du dann den Wert, bei dem getoggelt werden soll.

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

    Frequenzgenerator

    Also das mit der höheren Taktfrequenz ist mir bewusst , und auch schon eingeplant. Aber wie gesagt, es geht mir nicht um die Frequenzausgabe sondern um die Machbarkeit, zB. aus 1 Mhz so viel wie möglich rauszuholen.
    Und um das wie . Ihr habt mir jetzt schöne Ansetze geliefert , die ich jetzt erst mal verdauen und testen muß.Melde mich dann wieder.
    gruß Nase

  9. #9
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    08.07.2006
    Ort
    Karlsruhe/München
    Alter
    34
    Beiträge
    587
    Ist mir jetzt zu aufwändig, den ganzen Treat exakt zu lesen. Ich überfliege nur mal deinen Quellcode. Ergebnis: Ich bin irgendwie zu dumm dafür...

    Rechteck. richtig? Was spricht denn dagegen die ganze Timing von der Hardware machen zu lassen. Schau dir mal den CTC (Clear Timer on Compare Match) Mode an. Da kannste alle Alle Frequenzen bis CPUFrequenz/2 erzeugen... Also Theoretisch dürfste bis 10 Mhz Tack kommen...

    Außerdem würde ich sehr driftig von Bascom oder wie sich diese Sprache schimpft abraten... Die Sprache ist Langsam und absolut nicht portierbar...

  10. #10
    Erfahrener Benutzer Robotik Einstein Avatar von wkrug
    Registriert seit
    17.08.2006
    Ort
    Dietfurt
    Beiträge
    2.214
    Ein Kollege und ich sind auch gerade dabei einen Frequenzgenerator zu entwickeln.

    Wir sind dabei auf den DDS Chip AD9833 von Analog Devices gestossen.
    Der gibt Sinus, Dreieck und Rechteck Signale raus.

    Als Verstärker haben wir mal einen AD8000 geplant, da der 9833 nur 0,6Vpp Ausgangssignal macht.

    Als Maximalfreuenz haben wir so um die 1MHz angepeilt.
    Der AD9833 könnte zwar theoretisch Signale bis 12MHz generieren, der Sinus hat aber dann nur noch 2 Stützstellen und schaut somit "grausig" aus.

    Wenn man nur Sinus braucht wär eventuell ein annderer DDS Chip besser geignet. Ich hab auch schon mal mit einem AD9951 rumgebastelt.
    Das ist aber dann schon so ziemlich das Ende, was man händisch noch einlöten kann.

Seite 1 von 4 123 ... LetzteLetzte

Berechtigungen

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

LiFePO4 Speicher Test