keiner ne Idee oder ist die Frage sooo doof, das keiner Antworten mag ?
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 ?
GrüßeCode:$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
Mark
keiner ne Idee oder ist die Frage sooo doof, das keiner Antworten mag ?
Könnten wir das vielleicht etwas genauer haben? Z.B. wann kommt wo welche Fehlermeldung?Timer1 funktioniert und Timer0 meckert er an ...
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.
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!
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 ....
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:
Wie man sieht ist Timer2 schon völlig anders in der Config...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
Auch der Registername ist völlig anders. Damit stellt man die PWMs z.B. alle auf 50% Dutycycle:
Was auch noch sehr wichtig ist:Code:Compare1a = 128 Compare1b = 128 Ocr2 = 128
Beim Mega8 MUSS man den Timer2 explizit auf ENABLE stellen - Timer1 nicht unbedingt, der tuts auch so!
Jetzt hat der M8 zwar nur 3x PWM, aber du siehst wie es im Prinzip geht.Code:Enable Timer1 Enable Timer2
Schau mal im Datasheet und teste verschiedene Register - irgendwann gehts...
OK ich habs grad mal getestet....
Sollte gehen... hab leider keinen Tiny24 hier.
Ob das mit Compare1a = 512 funktioniert, weiß ich nicht, sollte es aber theoretisch.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
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
Entsprechend geht das dann auch für andere AVRs.[/code]0x2B (0x4B) - OCR1AH Timer/Counter1 – Compare Register A High Byte - Page 117
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.
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...
Lesezeichen