-         

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

Thema: ATtiny26 - PWM - Bascom 1.11.77

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied Avatar von DIYLAB
    Registriert seit
    31.10.2004
    Ort
    Berlin
    Beiträge
    156

    ATtiny26 - PWM - Bascom 1.11.77

    Anzeige

    Moin Leuts,

    habe heute auf Arbeit einen Dimmer über PWM mit einem ATtiny26 bauen müssen und festgestellt, das Bascom bei diesem MC kein PWM über Timer1 unterstützt - gibt ne feine Meckermeldung, das im TimerConfig "PWM" unbekannt ist.

    Hab dann die Register direkt gesetzt und es läuft sehr gut.
    Versteh ich aber nicht - in Bascom wird der Tiny26 unterstützt - aber wohl nicht ganz - oder?

    Watt ist denn da los? Hat Jemand eine Idee, warum das so ist?

    LG,
    Bruno

  2. #2
    Neuer Benutzer
    Registriert seit
    22.08.2004
    Ort
    DD an der E
    Beiträge
    1

    ATTiny26 in Bascom/elab-pascal kein PWM

    ich hatte das gleiche Problem in Bascom und in elab pascal. Es fiel mir bei elab-pascal auf, das der PWM nur bei den Chips mit 16bit timer1 aktiviert war. Der TINY26 hat allerdings nur einen 8bit timer1. Die Compilerhersteller müssen erst speziellen Code für die Unterstützung eines PWM für 8bit Timer entwickeln, da die Registerbelegung beim 8bit timer etwas anders ist

    MfG

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    10.06.2005
    Ort
    Buchbrunn
    Alter
    28
    Beiträge
    68
    Hallo,

    ich hab diesen alten Thread mal wieder ausgegraben weil ich einen Tiny26 mit 2 PWM Kanälen bräuchte, die Clock für den Timer soll das interne 64MHZ PLL Signal sein, so wie es im Datenblatt beschrieben ist. Ich hab jetzt schon diverse versuche unternommen die register direkt anzusprechen aber bis jetzt war das ganze noch komplett erfolglos.

    Ich hoffe ihr könnt mir helfen.
    Bis jetzt hab ich nur die Register TCCR1A , TCCR1B, PLLCSR und OCR1C für die Initialisierung verwendet, für die eingabe der werte die Register OCR1A und OCR1B
    Das ganze sieht dann folgendermaßen aus:
    Code:
    Config Portb.1 = Output
    Config Portb.3 = Output
    
    Tccr1a = &B11110011
    Tccr1b = &B01000001
    Pllcsr = &B00000100
    Ocr1c = 127
    
    Ocr1a = 100
    Ocr1B = 200
    nur irgendwie kommt da nix raus

    ich hoffe ihr könnt helfen ansonsten muss halt doch wieder der Mega8 ran

  4. #4
    Erfahrener Benutzer Fleißiges Mitglied Avatar von DIYLAB
    Registriert seit
    31.10.2004
    Ort
    Berlin
    Beiträge
    156
    Moin,

    der Tiny26 ist schon in PWM erstklassig.
    Beim Mega 8 hast Du nicht so viele Prescaler.

    So gehts beim Tiny26 mit 2 PWM-Ausgängen:

    Code:
     DDRB = &B11111111
    
     Tccr1a = &B01010011
     Tccr1b = &B00000111 
    
    'Prescaler (letzte 4 Bits von Tccr1b)
    '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    '0 0 0 1 /1                260Khz PWM
    '0 0 1 0 /2                130KHz PWM
    '0 0 1 1 /4                 64KHz PWM
    '0 1 0 0 /8                 32KHz PWM
    '0 1 0 1 /16                16KHz PWM
    '0 1 1 0 /32                 8KHz PWM
    '0 1 1 1 /64                 4KHz PWM
    '1 0 0 0 /128                2KHz PWM
    '1 0 0 1 /256                1KHz PWM
    '1 0 1 0 /512               500Hz PWM
    '1 0 1 1 /1024              250Hz PWM
    '1 1 0 0 /2048              128Hz PWM
    '1 1 0 1 /4096               64Hz PWM
    '1 1 1 0 /8192               32Hz PWM
    '1 1 1 1 /16384              16Hz PWM
    
     Ocr1c = 255 'oberes PWM Limit setzen (wichtig beim Tiny26!) 
    
     Ocr1a = 100 'Compare für OSC1A 
     Ocr1b = 200 'Compare für OSC1B 
    
     Pllcsr.1 = 1 'Asynchrones PLL benutzen, 64MHz Taktquelle 
    
    
    'Warten bis PLL eingerastet ist 
     Do 
     Loop Until Pllcsr.0 = 1 
    
     Pllcsr.2 = 1
    Viele Grüße,
    Bruno

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    10.06.2005
    Ort
    Buchbrunn
    Alter
    28
    Beiträge
    68
    Hallo Bruno,

    vielen Dank du hast mir sehr weitergeholfen, das war genau der Punkt an dem ich nicht mehr weiter gekommen bin.
    Stand zwar alles im Datenblatt nur irgendwie hab ichs nicht richtig kapiert.

  6. #6
    Erfahrener Benutzer Fleißiges Mitglied Avatar von DIYLAB
    Registriert seit
    31.10.2004
    Ort
    Berlin
    Beiträge
    156
    Hallo Wolfgang,

    dann kann ja das Basteln am Wochenende richtig losgehen \/
    Viel Spaß!

    LG,
    Bruno

  7. #7
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.09.2004
    Ort
    Düsseldorf
    Beiträge
    3.948
    Ja,und für die Freunde die mal eben Testen wollen hier ein kleines Testproggie (Zur Version 1.11.7.3 geschrieben) das das zeigt ob die Ausgänge auch alle laufen.


    Code:
    'PWM Test für Attiny26
    'Je eine LED + Vorwiderstand von Pin B0-3 nach masse.
    
    $regfile = "At26def.dat"
    $crystal = 1000000
    
    Dim A As Byte
    
    Tccr1a = &B01010011                                         'Manuelle Konfiguration von OC1a
    Tccr1b = &B10000101                                         'Manuelle Konfiguration von OC1b
    Ocr1c = 255                                                 'Top Limmit
    
    Config Pinb.0 = Output                                      'Port b.0 als Ausgang
    Config Pinb.1 = Output                                      'Port b.1 als Ausgang
    Config Pinb.2 = Output                                      'Port b.2 als Ausgang
    Config Pinb.3 = Output                                      'Port b.3 als Ausgang
    
    Do
    Gosub Pwm
    Loop
    
    Pwm:
     For A = 0 To 255
      Ocr1a = A
      Ocr1b = A
      Waitms 2
     Next
    Return
    
    End
    Gruß
    Ratber

  8. #8
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    06.11.2004
    Beiträge
    1.693
    Ich habe ein Problem mit Timer1 als "normalen" Timer.
    In einem anderen Beitrag habe ich schon gefunden, das Config Timer1... beim Tiny26 so nicht funktioniert wie beim Timer0.

    Wie kann/muss ich jetzt alles einstellen, das der Timer auch als Timer funktioniert und nicht im PWM-Mode oder Compare arbeitet?

    Hier die relevanten Codeteile. Mit Timer0 funktioniert(e) alles:

    Code:
    $regfile = "at26def.dat"
    $crystal = 16000000
    
    Led Alias Porta.4
    
    Tccr1b = 11      'Prescale=1024 (mit 1a ändert sich auch nix)
    
    Config Int0 = Change                                        'bei jeder Halbwelle reagieren
    Enable Int0
    On Int0 Int0_isr
    On Timer1 Timer_irq
    Enable Timer1
    Enable Interrupts
    
    
    Int0_isr:
    
    Start Timer1
    
    Return
    
    
    Timer_irq:
    
    Tcnt1 = Timervorgabe         'der Wert wird im Programm geändert
    Set Led
    
    Return
    Der Code ist hier erstmal soweit abgespeckt, das bei Überlauf des Timers wenigstens mal eine LED leuchtet.

    Der INT0 funktioniert.
    Wie schon gesagt, wenn alles auf Timer0 umgeschrieben ist funktioniert alles wie es soll, aber mit Timer1 nicht. Es wird nicht in die TimerISR gesprungen.

  9. #9
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    13.10.2006
    Ort
    Kohlenpott
    Alter
    30
    Beiträge
    263
    Moin,
    Wie kann ich mit der huier beschriebenen PWM den clear Up oder Clear Down festlegen?

    Gruss

    Alex

  10. #10
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    13.10.2006
    Ort
    Kohlenpott
    Alter
    30
    Beiträge
    263
    Moin,
    Habe einfach einen anderen transtor genommen, der das Singal invertiert. Aus den On werden die OFF zeiten.. und umgekehrt.

    Alex

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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