-         

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 17

Thema: Problem mit Timer

  1. #1
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    16.10.2006
    Beiträge
    222

    Problem mit Timer

    Anzeige

    Hallo!
    Ich möchte an zwei verschiedenen Pin´s jeweils ein PWM-Signal erzeugen.
    Nur in meinem Buch wird die nur am Beispiel vom PIN 15 (PB1) gemacht.
    Nun möchte ich aber auch mit PB2 arbeiten und habe keine Ahnung wie ich das Configurieren soll.

    Code:
    $regfile = "m8def.dat"
    $crystal = 16000000
    
    Config Portb.1 = Output
    Config Portb.2 = Output
    
    Config Timer1 = Pwm , Pwm = 8 , Prescale = 8 , Compare A Pwm = Clear Down
    Config Timer1 = Pwm , Pwm = 8 , Prescale = 8 , Compare B Pwm = Clear Down
    
    Do
    
    Compare1a = 50
    Compare1b = 100
    
    Loop
    End
    B.z.w. wie kann ich den Pin PB2 als Frequenzgeber Configurieren?

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2007
    Ort
    Göttingen
    Beiträge
    705
    Ich hab mir den Code mal im Simulator angeschaut. Die zweite "Config Timer"-Zeile scheint zur Folge zu haben , dass die Einstellungen aus der ersten Zeile überschrieben werden. Wenn Du es in einen einzigen Config-Befehl packst, müssten beide PWM-Pins (OC1A und OC1B) funktionieren:

    Code:
    Config Timer1 = Pwm , Pwm = 8 , Prescale = 8 , Compare A Pwm = Clear Down, Compare B Pwm = Clear Down

  3. #3
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    16.10.2006
    Beiträge
    222
    Hallo!
    Ja das müsste stimmen, bin dann beim googeln später auch darauf gestoßen.

    So, nun wollte ich einen PIN für PWM und einen zur Frequenzausgabe (Schrittmotortakt), das mit der Frequenz ist schwieriger.
    Da PWM nur mit Timer1 geht musste ich Timer0 nehmen -> der hat aber nur 8Bit, da ist die geringste Frequenz 4000Hz.

    Das Ganze habe ich so gelöst.

    Code:
    $regfile = "m8def.dat"
    $crystal = 16000000
    
    Config Portb.1 = Output
    Config Portb.2 = Output
    Mot Alias Portb.2
    Dim N As Word
    Dim Dreh As Word
    
    Config Timer1 = Pwm , Pwm = 8 , Prescale = 8 , Compare A Pwm = Clear Down
    
    Config Timer0 = Timer , Prescale = 8
    On Timer0 Inter
    Enable Timer0
    Enable Interrupts
    
    Do
    
    Dreh = 150
    Compare1a = Dreh
    
    Loop
    
    End
    
    Inter:
    Timer0 = Dreh
    Incr N
       If N > 60 Then
          Mot = 1
          Else
          Mot = 0
       End If
       If N = 120 Then
          N = 0
       End If
    Return
    Ich musste im Interrupt eine Art Zählerschleife mit Übertrag einbauen.
    Mir ist dieser Lösungsweg etwas unbequem und frisst viel Ressourcen.

    Kann man das nicht eleganter lösen???

    Vielen Dank!

  4. #4
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    28
    Beiträge
    3.517
    Blog-Einträge
    9
    Wenn du nur einen 16-Bit Timer hast und der Rest ist 8-Bit und un eine recht langsame Frequenz brauchst wirst du nicht drum herum kommen den Timer per Software zu erweitern. Die andere Möglichkeit ist, dass du nen anderen Controller nimmst mit mehr 16-Bit Timer.

  5. #5
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2007
    Ort
    Göttingen
    Beiträge
    705
    Da PWM nur mit Timer1 geht
    Das ist nicht ganz korrekt - Timer2 im Mega8 kann auch PWM. Der hat zwar nur einen einzigen Ausgang (B.3 = OC2), aber Du verwendest ja in Deinem jetzigen Code auch nur einen Compare-Wert.

    ...musste ich Timer0 nehmen -> der hat aber nur 8Bit, da ist die geringste Frequenz 4000Hz.
    Auch da kann geholfen werden: Wenn Du Timer 0 mit dem maximal möglichen Prescaler von 1024 betreibst, hast Du eine minmale Interrupt-Frequenz von 16.000.000 Hz / (1024 * 256) = ca. 61 Hz.

    Mir ist aber noch etwas aufgefallen: Die Frequenz Deines PWM-Signales liegt bei 8-bit-PWM und 16 MHz Taktfrequenz bei etwas über 30 kHz - ist das denn nicht ein wenig hoch? Ich muss allerdings zugeben, bislang noch so gut wie nie etwas mit Schrittmotoren zu tun gehabt zu haben (eher mit fetten 2kW-Anlassermaschinen, die sich aber mit PWM auch hervorragend zähmen lassen )

  6. #6
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    16.10.2006
    Beiträge
    222

    Problem mit Timer beim ATtiny85 (PWM)

    Hallo!
    Ich möchte am tiny85 am PortB.4 ein PWM Signal erzeugen, aber Bascom meckert.

    Code:
    $regfile = "attiny85.dat"
    $crystal = 1000000
    
    Config Portb.4 = Output
    Led Alias Portb.4
    
    'PWM
    Config Timer1 = Pwm , Prescale = 8 , Compare B Pwm = Clear Down       
    
    Do
    
    Compare1b = 30
    
    Loop
    
    End
    Bascom mecker in der Zeile mit "Compare1b = 30".
    Kann mir einer helfen und zeigen was falsch ist und wie es richtig aussehen muss.

    Danke!
    --------------

  7. #7
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    28
    Beiträge
    3.517
    Blog-Einträge
    9
    Guck mal vielleicht hilft dir das weiter:

    http://bascom-forum.de/showthread.ph...-und-PWM/page2

    Das scheint wohl ein generelles Problem mit Bascom zu sein, dass man OC1B nicht nutzen kann......da hilft anscheinend nur ein Workaround

  8. #8
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    16.10.2006
    Beiträge
    222
    Das Problem ist das ich im Program noch eine ADC Anwendung einbauen muss und das dumme an ADC ist das die Funktion 20ms beansprucht.
    Wenn ich nun über Software PWM erzeuge hat das Signal immer eine lücke von 20ms
    --------------

  9. #9
    Erfahrener Benutzer Roboter Genie Avatar von Searcher
    Registriert seit
    07.06.2009
    Ort
    NRW
    Beiträge
    1.410
    Blog-Einträge
    101
    Hallo,

    statt Compare1b versuche mal OCR1B. Dann sollte zumindest der Compiler nicht mehr meckern.

    Gruß
    Searcher
    Hoffentlich liegt das Ziel auch am Weg
    ..................................................................Der Weg zu einigen meiner Konstruktionen

  10. #10
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2007
    Ort
    Göttingen
    Beiträge
    705
    Wollt´ ich auch grade schreiben

    Ich hab mir das mal im Simulator angeschaut: Die 30 wird zwar anstandslos ins OCR1B-Register übernommen, aber der Rest des Codes scheint am Timer-Kontrollregister TCCR1 etwas vorbeizugehen - es enthält nämlich exakt &B00000000.

    Du müsstet Dir also die Mühe machen aus dem Datenblatt zu entnehmen, wie dieses Register für Deine Anwendung aussehen muss, und es dann direkt beschreiben. Das kostet zwar etwas Zeit, lohnt sich aber...

Seite 1 von 2 12 LetzteLetzte

Ähnliche Themen

  1. Problem mit Timer
    Von MechMac im Forum C - Programmierung (GCC u.a.)
    Antworten: 6
    Letzter Beitrag: 29.08.2010, 13:48
  2. Timer Problem
    Von ChristophB im Forum C - Programmierung (GCC u.a.)
    Antworten: 3
    Letzter Beitrag: 04.08.2010, 13:04
  3. Timer Problem
    Von Mr-400-Volt im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 2
    Letzter Beitrag: 07.10.2008, 10:35
  4. Problem mit timer
    Von RedEagle im Forum C - Programmierung (GCC u.a.)
    Antworten: 6
    Letzter Beitrag: 06.01.2007, 14:52
  5. Timer Problem
    Von Funky im Forum C - Programmierung (GCC u.a.)
    Antworten: 10
    Letzter Beitrag: 24.07.2006, 22:23

Berechtigungen

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