- 3D-Druck Einstieg und Tipps         
Seite 3 von 4 ErsteErste 1234 LetzteLetzte
Ergebnis 21 bis 30 von 36

Thema: PWM mit einstellbarer Frequenz (2313)

  1. #21
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    09.06.2004
    Ort
    Aachen
    Beiträge
    2.674
    Anzeige

    LiFePo4 Akku selber bauen - Video
    sind doch eineige Mhz kein Problem!?
    Du kanst theoretisch bis auf etwa 1/5 der Quartfrequenz, bei 24Mhz also fast 5 Mhz, aber da ist die Frequen zimmlich ungenau!!!!!!!!
    Also einige Mhz ist gut, sagen wir mal, wir würden 5 schaffen. Das wäre vermutlich sowas wie Port.x = 1 Portd.x = 0.
    Also ich bräuchte einen Generator, wo ich zwischen 1 und 10 Mhz auf ca. 1 khz genau einstellen kann. Ich denke nicht, dass man das mit einem AVR hinkriegt. Darum soll es ja aber auch garnicht gehen.

    Ich wollte mit:
    aber man kann bisher keinen Duty-cycle einstellen!
    ja nur sagen, dass der Code keinen Wikrlich großen Vorteil gegenüber dem anderen hat (auf der anderen Seite auch keinen Nachteil). So oder so, je genauer der Cycle ist, desto niedriger wird die höchstmögliche Frequenz.

  2. #22
    Erfahrener Benutzer Roboter Experte Avatar von Rage_Empire
    Registriert seit
    10.03.2005
    Ort
    Pforzheim
    Beiträge
    710
    @RCO:
    naja, bei 24Mhz hat der AVR 24MIPS, die würde ich nicht unterschätzen. Anderseits weiß ich nicht, was du mit dem Funktionsgenerator vor hast. Fertige Beispiele findet man für einfache Frequenzgeneratoren mit einem AVR im Netz genügend. Das mit der Genauigkeit der Duty und der damit verbundenen Frequenzhöhe stimmt sicherlich, jedoch sind die angegebenen 500kHz für mich nie in Frage gekommen. Es ist aber bestimmt immer gut, noch etwas Reserve in den Resourcen zu haben! Wie schon erwähnt, mit einem DDS oder ner PLL bekommst sicher einige zig MHz hin!

  3. #23
    Erfahrener Benutzer Roboter Experte Avatar von Rage_Empire
    Registriert seit
    10.03.2005
    Ort
    Pforzheim
    Beiträge
    710
    So, habe den Source mal frisiert und getsetet. Leider geht bei 10Mhz Quarz grade mal etwas mehr als 29Khz

    @Tesla: sind wohl doch weniger als 40kHz, sorry!

    Bekomme ich das noch schneller, oder mache ich was falsch?

    Code:
    $regfile = "2313def.dat"
    $crystal = 10000000
    $baud = 9600
    
    Dim Hi As Byte
    Dim Lo As Byte
    Dim Freq As Byte
    Dim Zeit As Byte
    
    Config Pind.2 = Output
    
    Config Timer1 = Timer , Prescale = 1
    
    Enable Interrupts
    On Timer1 Icnr
    Enable Timer1
    Timer1 = 65526
    
    
    
    Do
        Input "High x mal 1us: " , Hi
        Input "Low x mal 1us: " , Lo
    
    
    Loop
    
    
    
    Icnr:
    
    Incr Zeit
    
    If Zeit = Freq Then
    
     Zeit = 0
     Portd.2 = Not Pind.2
    
     If Freq = Hi Then
         Freq = Lo
         Else
         Freq = Hi
     End If
    End If
    
    Timer1 = 65526
    
    Return

  4. #24
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    19.02.2005
    Alter
    35
    Beiträge
    470
    1. Du hast vergessen die Zeit zu reseten
    2. Nimm Toggle ( If schlaufe frisst zu viel zeit )
    3. Deine Frequ = Hi, Lo then ... frisst auch zu viel zeit
    4. ich hab dir den code mal verändert und für die If und incr usw mock ein paar clocks mehr gegeben.
    Hast du ein Oszi? Zum kalibrieren?
    ICQ?


    Code:
    $regfile = "2313def.dat"
    $crystal = 10000000
    $baud = 9600
    
    Dim Hi As Byte
    Dim Lo As Byte
    Dim Freq As Byte
    Dim Zeit As Byte
    
    Config Pind.2 = Output
    
    Config Timer1 = Timer , Prescale = 1
    
    Enable Interrupts
    On Timer1 Icnr
    Enable Timer1
    Timer1 = 65531
    
    
    
    Do
        Input "High x mal 1us: " , Hi
        Input "Low x mal 1us: " , Lo
    Loop
    
    
    
    Icnr:
    
    Incr Zeit
    
    If Zeit = Hi And Portd.2 = 1 Then
    
      Portb.2 = 0
      Timer1 = 65531
      Zeit = 0
      End If
    
    If Zeit = Lo And Portd.2 = 0 Then
    
       Portb.2 = 0
       Timer1 = 65531
       Zeit = 0
       End If
    
    Return

  5. #25
    Erfahrener Benutzer Roboter Experte Avatar von Rage_Empire
    Registriert seit
    10.03.2005
    Ort
    Pforzheim
    Beiträge
    710
    Oszi? klar, nicht nur einen (....halt bei der Arbeit).Frisst die If - then wirklich so viel und warum benutzt du kein else? Und was ich an dem obigen wenigsten verstehe:

    bei der Lo- Abfrage müsste doch der Port auf 1 gesetzt werden, oder irre ich mich da?

    PS: ICQ habe ich, bin dort im Mom. aber sehr selten erreichbar.

  6. #26
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    19.02.2005
    Alter
    35
    Beiträge
    470
    Upps , hab Hi und Lo vertauscht.

    Code:
    $regfile = "2313def.dat"
    $crystal = 10000000
    $baud = 9600
    
    Dim Hi As Byte
    Dim Lo As Byte
    Dim Freq As Byte
    Dim Zeit As Byte
    
    Config Pind.2 = Output
    
    Config Timer1 = Timer , Prescale = 1
    
    Enable Interrupts
    On Timer1 Icnr
    Enable Timer1
    Timer1 = 65531
    
    
    
    Do
        Input "High x mal 1us: " , Hi
        Input "Low x mal 1us: " , Lo
    Loop
    
    
    
    Icnr:
    
    Incr Zeit
    
    If Zeit = Lo And Portd.2 = 1 Then
    
      Portb.2 = 0
      Timer1 = 65531
      Zeit = 0
      End If
    
    If Zeit = Hi And Portd.2 = 0 Then
    
       Portb.2 = 0
       Timer1 = 65531
       Zeit = 0
       End If
    
    Return
    warum benutzt du kein else?
    Ist doch einfach, wenn ich ein else benutzen würde, würde bei JEDEM Interrupr der port verändert, die Zeit auf null und der Timer auf 65531 gesetzt, und das DARF ned sein.

    Oszi?
    Ganz einfach Hi und lo auf 1 setzen ( ergibt 0,5 Mhz ) und timervorgabe so lange verändern, bis man am oszi eine Frequen von 500kHz misst.

  7. #27
    Gast
    Hast du den Code schon mal real getestet?

  8. #28
    Erfahrener Benutzer Roboter Experte Avatar von Rage_Empire
    Registriert seit
    10.03.2005
    Ort
    Pforzheim
    Beiträge
    710
    @Tesla:
    Hm, meinte ich anders mit der null, is aber nicht so wichtig. Probier das morgen nochmal. Jedoch benutze ich für Frequenzanalysen lieber nen Frequenzzähler (Rohde & Schwarz), der macht am wenigsten Zicken und ist sehr präzise.

  9. #29
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    19.02.2005
    Alter
    35
    Beiträge
    470
    So der code
    Code:
    $regfile = "2313def.dat"
    $crystal = 10000000
    Dim Zeit As Byte , Hi As Byte , Lo As Byte
    
    Config Portb = Output
    
    Config Timer1 = Timer , Prescale = 1
    
    Enable Interrupts
    
    On Timer1 Icnr
    
    Enable Timer1
    
    Timer1 = 65535
                                                ' timervorgabe zum erzeugen von einer Pause mit 100µS
    
    Hi = 1
    Lo = 1
    
    Do
    Loop
    
    
    Icnr:
    Incr Zeit
    
    If Zeit = Hi And Portb.5 = 0 Then
       Portb.5 = 1
       Zeit = 0
       End If
    
    If Zeit = Lo And Portb.5 = 1 Then
       Portb.5 = 0
       Zeit = 0
       End If
    
    Timer1 = 65535
    
    Return
    komm mit dem beiu Hi = 1, lo = 1 auf 25 khz?????, very strange!!!!
    Die ifs schlucken mächtig clocks

  10. #30
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    19.02.2005
    Alter
    35
    Beiträge
    470
    Das ist die besste möglichkeit (kommste auuuuuuuf
    30 khz. MIST

    Code:
    $regfile = "2313def.dat"
    $crystal = 10000000
    Dim Hi As Word , Lo As Word
    
    Config Portb = Output
    
    Config Timer1 = Timer , Prescale = 1
    
    Enable Interrupts
    
    On Timer1 Icnr
    
    Enable Timer1
    
    
    
    Do
    Hi = 65535
    Lo = 65535
    Loop
    
    
    Icnr:
    Toggle Portb.5
    If Portb.5 = 0 Then Timer1 = Hi
    If Portb.5 = 1 Then Timer1 = Lo
    Return
    Aber wenn man mehr will dann kommt man um ASM nicht mehr rum, hier endet dan mein Verständnis

Seite 3 von 4 ErsteErste 1234 LetzteLetzte

Berechtigungen

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

Labornetzteil AliExpress