PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : tiny2313 PWM OC0A und OC1A



TobiasBlome
22.10.2006, 17:54
Hallo, ich möchte 2 Led´s unteschiedlich über PWM ansteuern.

Stimmt es dass ich für PB2 -> OC0A den Timer0 brauche und für PB3 -> OC1A denTimer1???

Ausserdem habe ich noch 2 Fehlermeldungen bei:

Timer0 -> Pwm=8 (was ist an der 8 falsch?)

Compare0a = 205 (Bascom tut so als kenne es Compare0a nicht)

Kann mir einer sagen warum und am Besten, was ichändern muss?
Danke, Tobias

__________________schnipp____________________
$regfile = "ATtiny2313.dat" 'ATtiny2313Deklarationen
$crystal = 20000000 'Quarz: 20.0 MHz

Config Timer0 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Up , Prescale = 8 'PWM=8 Fehler???(Error86 Invalid parameter?)
Enable Timer0
Enable Interrupts 'interrupts einschalten


'Ein-/Ausgänge:
Config Pinb.2 = Output
Config Pinb.3 = Output 'Port B = Ausgang


Do
Compare0a = 205 'Warum geht Compare0a nicht? (Error:46 Line: 18 Assignment error [COMPARE0A: 0 205:12], in File: C:\...)
Compare1a = 51
Loop

End

E-Fan
24.10.2006, 14:30
Um die beiden OCR des Timer 0 zu nutzen ist es nach meinem Wissenstand derzeit noch nötig sich die Register selber zu konfigurieren.
Schau mal in das Datenblatt und fummel etwas rum.
Zum Beispiel so:

Tccr0a = &B01010011
Tccr0b = &B11000100

Ich weiß jetzt aber nicht welches Bit in welchem Register was bewirkt. Dazu müsste ich auch noch mal nachkucken.

P.S.: Kuck mal hier rein! (https://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=19821&highlight=) Ich stand auch schon mal vor so einem Problem.

TobiasBlome
24.10.2006, 16:01
Warum ist das mit dem Timer0 sooo kompliziert?!

Ich habe es jetzt mit dem Timer1 ausprobiert und das ging ganz einfach(nur das ich jetzt die Platine etwas umlöten muss)

Tobias

E-Fan
24.10.2006, 21:17
Wieso "so kompliziert"? Es ist halt so und wirklich leicht. Man muss eben nur einen Blick ins Datenblatt werfen und etwa 10 Seiten lesen. Das ist alles und tut nicht weh.
Bascom macht mit dem Config-Befehl auch nix anderes als einzelne Bits in den Timer-Counter-Control-Registern zu setzen.

TobiasBlome
26.10.2006, 16:31
Naja,
aber da bleibt doch immernoch die Frage, warum Bascom das mit 2 Ausgängen kann und mit den anderen 2 Ausgängen nicht.

E-Fan
27.10.2006, 00:05
Genauso gut könntest Du fragen warum man in Moskau russisch spricht. ;)
Die Frage wird Dir nur der Entwickler beantworten können und jede noch so kleine Adrenalinspiegelerhöhung ist deswegen verschwendete Energie zumal es eine andere sehr leichte Möglichkeit gibt den zweiten Timer anzusprechen. Deine Frage zeigt mir da eher eine gewisse Bequemlichkeit sich nicht wirklich mit dem Datenblatt auseinandersetzen zu wollen.

Otti66
27.10.2006, 08:03
Hallo,

Timer0 ist 8 Bit, Timer1 ist 16 Bit.
Das ist der Unterschied.

E-Fan
27.10.2006, 12:43
Das hat aber nichts damit zu tun das es Basicbefehle für den Timer1 als PWM gibt und nicht für den Timer0

Otti66
30.10.2006, 08:29
Hallo E-Fan,

Das hat es sehr wohl, da bei vielen älteren AVR's, wie zum Beispiel 90S8515 Timer0 keine PWM-Funktion hat, ist es also aus Gründen der Kompabilität nicht möglich. Geht, geht nicht, geht, geht nicht, wär ein schönes durcheinander.
Sich ein bißchen mit den Registern der AVR zu beschäftigen kann
auch niemandem schaden.

Grüße
Ottmar

Otti66
30.10.2006, 08:42
Noch ein kleiner Tip:

Schon vor dem Layouten bzw. Löten überlegen welche Funktionen man braucht.
Wenn Pin x Funktion z hat ist es noch lange nicht gesagt
das Pin y die Funktion z auch hat.