- LiTime Speicher und Akkus         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 11

Thema: ATTiny24 4 PWM Channels nur wie ???

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    22.11.2005
    Ort
    Köln
    Alter
    47
    Beiträge
    5

    ATTiny24 4 PWM Channels nur wie ???

    Anzeige

    Powerstation Test
    Hallo Leute,

    ich versuche auf einem ATTiny24 die 4 PWM Channels zu nutzen, aber irgendwie macht er das nur für 2.

    Timer1 funktioniert und Timer0 meckert er an ...

    Was mache ich falsch, bzw. wie kann ich OC0A nutzen ?

    Code:
    $regfile = "attiny24.dat"
    $crystal = 8000000
    
    Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Up , Prescale = 1
    Config Timer0 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Up , Prescale = 1
    
    Config Porta.5 = Output                                     '  OC1B
    Config Porta.6 = Output                                     '  OC1A
    Config Portb.2 = Output                                     '  OC0A
    
    Compare1a = 205
    Compare1b = 205
    Compare0a = 205
    
    Do
    
    Loop
    End
    Grüße

    Mark

  2. #2
    Neuer Benutzer Öfters hier
    Registriert seit
    22.11.2005
    Ort
    Köln
    Alter
    47
    Beiträge
    5
    keiner ne Idee oder ist die Frage sooo doof, das keiner Antworten mag ?

  3. #3
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2007
    Ort
    Göttingen
    Beiträge
    706
    Timer1 funktioniert und Timer0 meckert er an ...
    Könnten wir das vielleicht etwas genauer haben? Z.B. wann kommt wo welche Fehlermeldung?

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    22.11.2005
    Ort
    Köln
    Alter
    47
    Beiträge
    5
    Also er meckert die Timer0 Zeile an (5)

    Fehler = Invalid Parameter for CONFIG parameter or Value (

    Und dann die Zeile :

    Compare0a = 205

    Fehler = Assignment Error (Compare0a: 0 205: 112 )

    Das ganze beim compilieren.

  5. #5
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    26.05.2007
    Beiträge
    594
    Schau mal im Datenblatt, wie die Register genau heißen!
    Das is von Chip zu Chip anders... Entsprechend muss man das in Bascom auch ändern!

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    22.11.2005
    Ort
    Köln
    Alter
    47
    Beiträge
    5
    Register für die PWM Ports sind :

    OC1A
    OC1B

    OC0A
    OC0B

    den Fehler für Timer0 hab ich weg ... der Kennt nur 8bit, daher kann und muss das PWM = 8 weg.

    Aber ich kann kein Compare0a machen... das meckert der immer noch an ....

  7. #7
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    26.05.2007
    Beiträge
    594
    Ja, du musst da pfuschen, Bascom stellt sich manchmal blöd an.
    Beim Mega8 hatte ich das gleiche Problem. Man muss da teilweise Registernamen verwenden, die zwar funktionieren, aber im Editor z.B. nichtmal entsprechend formatiert werden - sieht aus wie normaler Text.

    Das hier ist die Config für den M8:
    Code:
    Config Timer1 = Pwm , Pwm = 8 , Prescale = 1 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down
    Config Timer2 = Pwm , Prescale = 1 , Compare Pwm = Clear Up , Pwm = On
    Wie man sieht ist Timer2 schon völlig anders in der Config...
    Auch der Registername ist völlig anders. Damit stellt man die PWMs z.B. alle auf 50% Dutycycle:
    Code:
    Compare1a = 128
    Compare1b = 128
    Ocr2 = 128
    Was auch noch sehr wichtig ist:
    Beim Mega8 MUSS man den Timer2 explizit auf ENABLE stellen - Timer1 nicht unbedingt, der tuts auch so!
    Code:
    Enable Timer1
    Enable Timer2
    Jetzt hat der M8 zwar nur 3x PWM, aber du siehst wie es im Prinzip geht.
    Schau mal im Datasheet und teste verschiedene Register - irgendwann gehts...

  8. #8
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    26.05.2007
    Beiträge
    594
    OK ich habs grad mal getestet....
    Sollte gehen... hab leider keinen Tiny24 hier.

    Code:
    $regfile = "attiny24.dat"
    $crystal = 8000000
    
    Config Porta.5 = Output   'OC1B
    Config Porta.6 = Output   'OC1A
    Config Portb.2 = Output   'OC0A
    Config Porta.7 = Output   'OC0B
    
    Config Timer0 = Pwm , Compare A Pwm = Clear Up , Compare B Pwm = Clear Up , Prescale = 1
    Config Timer1 = Pwm , Pwm = 10 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Up , Prescale = 1
    
    
    Do
    'Timer0 PWM-Register (8 Bit)
    Ocr0a = 128
    Ocr0b = 128
    
    'Timer1 Register (10 Bit)
    'kann man so schreiben...
    Compare1a = 512
    Compare1b = 512
    
    '...oder auch so (zwei Byte):
    Ocr1al = 0
    Ocr1ah = 2
    
    'Und f¸r den 2. Kanal genauso:
    Ocr1bl = 0
    Ocr1bh = 2
    Loop
    End
    Ob das mit Compare1a = 512 funktioniert, weiß ich nicht, sollte es aber theoretisch.
    Das wäre dann die PWM mit 10 Bit. Bei 8 Bit natürlich wieder nur 255 maximal.
    Ocr1al/Ocr1al ist ein zweiteiliges Register, da 10 Bit.

    Gefunden hab ich das alles auf Seite 212 des Datasheets.
    http://www.atmel.com/dyn/resources/p...ts/doc8006.pdf
    0x2B (0x4B) - OCR1AH Timer/Counter1 – Compare Register A High Byte - Page 117
    Entsprechend geht das dann auch für andere AVRs.[/code]

  9. #9
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Beiträge
    2.731
    Hallo,

    bei diesen 16-Bit Registern macht es Bascom (wie auch bei C) automatisch, das der Wert aufgeteilt wird in die beiden 8-Bit.
    Man muss dann nicht umrechnen, und kann direkt den Wert angeben zB.
    Ocr1a = 1024.

    Der Name Compare1a ist nur ein Alias den Bascom angelegt hat für OCR1A.

    Mit Enable wird nicht der Timer, sondern der Interrupt dazu aktiviert, das kann auch in die Hose gehen, wenn man auch global IRQs aktiviert, und keine ISR dafür angelegt hat.

  10. #10
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    26.05.2007
    Beiträge
    594
    Das mit dem Interrupt kann gut sein, nur Tatsache ist, dass die PWM am M8 nicht funktioniert, wenn man den einen Timer nicht auf ENABLE setzt.
    Allerdings hat der auch nur 3 PWM, ist also wieder anders...

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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

LiTime Speicher und Akkus