PWM Problem mit Timer1 Attiny45

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    Aufgrund technischer Veränderungen ist der Mailverkehr innerhalb des Forums (Private Nachrichten) nur noch eingeschränkt möglich. Die Einschränkung ist notwendig, um zusätzliche Betriebskosten für das Forum zu vermeiden. Näheres zu den Hintergründen im Thread "Aktuelles zum Forum".Wir bitten um Verständnis.

    Hinweis kann nach Kenntnisnahme deaktiviert werden!

    • PWM Problem mit Timer1 Attiny45

      Ich habe ein Problem mit dem Timer1 beim Attiny 45.

      Bei folgendem Programm faden 2 LEDs (an PB0 und PB4) gleichzeitig hoch und runter. Ändere ich bei Timer0 das "Clear Up" in "Clear Down", faden die LEDs gegenläufig. Soweit ist alles in Ordnung.
      Ändere ich dagegen bei Timer1 das "Clear Up" in "Clear Down", fadet die dazugehörige LED an PB4 (OC1B) gar nicht mehr. Soweit mir bekannt ist, hat Bascom ein Problem mit den Attinys 25/45/85 bezüglich der Timer1, da sie hier nur als 8-Bit Timer ausgeführt sind.

      Leider erschließt sich mir nicht genau, welche Register ich setzen muss, damit Timer1 richtig funktioniert.


      BASCOM-Quellcode

      1. $regfile = "attiny45.dat"
      2. $crystal = 8000000
      3. '$sim
      4. Config Timer0 = Pwm , Prescale = 1 , Compare A Pwm = Clear Up 'Clear Down funktioniert
      5. Config Timer1 = Pwm , Prescale = 1 , Compare B Pwm = Clear Up 'Clear Down funktioniert NICHT?
      6. Dim I As Byte
      7. Dim D As Integer
      8. Ddrb = &B00010001 'PB0 und PB4 werden Ausgänge, der restliche Port A bleibt Eingang
      9. Do
      10. For I = 5 To 127 'Hochfaden der LED ...
      11. D = I
      12. D = D * D
      13. D = D / 64
      14. Pwm0a = D
      15. Pwm1b = D
      16. Waitms 10
      17. Next I
      18. Waitms 2000 'Pause nach dem Hochfaden
      19. For I = 127 To 5 Step -1 'Runterfaden der LED
      20. D = I
      21. D = D * D
      22. D = D / 64
      23. Pwm0a = D
      24. Pwm1b = D
      25. Waitms 10
      26. Next I
      27. Waitms 100 'Pause nach dem Runterfaden
      28. Loop
      29. End
      Alles anzeigen
    • R2D2 Bastler schrieb:

      Leider erschließt sich mir nicht genau, welche Register ich setzen muss, damit Timer1 richtig funktioniert.
      Im Datenblatt finde ich das
      When the counter value match the contents of OCR1A or OCR1B, the OC1A and OC1B outputs are set or cleared
      according to the COM1A1/COM1A0 or COM1B1/COM1B0 bits in the Timer/Counter1 Control Register A - TCCR1,
      as shown in Table 12-1.
      timer1 pwm tiny45.PNG
      clear down wäre dann ein set on compare match, also beide bits =1
      Im TCCR1 sollte dann &B0111xxxx stehen ctc1 disable, pwm1A enable und eben com1Ax=1
      Äh, wegen der Hitze hab' ich jetzt nicht auf A und B geschaut, was jetzt rauf oder runter soll, Kanal B wird wohl hier GTCCR eingestellt.
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • Habe nun einige Varianten durchprobiert.

      @Guenther
      OCR1C=255 brachte leider keine Veränderung

      @Pluto25
      PB4 bleibt immer 1, LED bleibt an (LED ist zwischen Pin3 [PB4] und Masse angeschlossen). Bei Clear Up faden beide LEDs gleich (die 2. LED, die Timer0 bedient, dient mir hier als "Vergleichsanzeige"). Andere Pins könnte man nehmen, müsste dann aber die Schaltung neu aufbauen. Mir geht aber auch darum, herauszufinden was mit dem PB4 nicht stimmt.

      @tschoeatsch
      mit folgendem Code funktionierts jetzt (ganz ohne Config Timer1) a_14_3ef964b0

      BASCOM-Quellcode

      1. Gtccr = &B01110000
      2. Tccr1 = &B01110001
      Das Register TCCR1 wird durch Bascom offensichtlich mit dem Config Befehl nicht richtig gesetzt, warum auch immer a_56_df238249

      Vielen herzlichen Dank für Eure Unterstützung, wieder ein kleines (großes) Problem gelöst :thumbsup:

      Gruß
      Robert