PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Timer und PWM im Tiny25 initialisieren ?



grumpf
22.01.2008, 07:40
Hai,

ich bin wohl doch schon zu lang raus. Ich verzweifele gerade an den Timern des Tiny25. Hab Datenblatt (kann man das noch "Blatt" nennen bei 260 Seiten ?), hab die App note 130, krieg die Dinger aber einfach nicht zum laufen. Weder den Timer an sich, mit Prescaler etc. bekomme ich hin, von der einfachen PWM ganz zu schweigen. Kann mir jemand helfen ? Hat jemand vielleicht ein par Codeschnipsel ?

Internette Grüße
Stefan

McJenso
22.01.2008, 17:03
Hallo,



Weder den Timer an sich, mit Prescaler etc. bekomme ich hin


woher weißt du das? Was für ein Verhalten erwartest du, welches zeigt der Controller?
Poste mal deinen Code.
Ansonsten, kennst du Counter (Avr) (https://www.roboternetz.de/wissen/index.php/Timer/Counter_%28Avr%29)

Gruß

Jens

grumpf
27.01.2008, 12:05
Hai Jens,

die Nebel lichten sich so langsam O:) Immerhin hab ich schon mal einen PWM-Kanal hinbekommen. Aber die anderen drei verweigern sich mir noch.
Wo ist da noch der Bug drin ? Ich bin der Meinung es müsste laufen.....
Hier mal der Code



int main (void) {
GTCCR = 0b10000001; // Timer anhalten
TCCR0A = 0b01010010; // Timer 1 und 2 auf Phasecorrect PWM-Mode
// und toggle bei erreichen des Werte in OC0A bzw.
// OC0B
TCCR0B = 0b00001101; // WGM02-Bit setzen (Clear Timer on Compare - CTC)
// für toggle OC0A
// und Prescaler auf clk/1024 einstellen
OCR0A = 0b11111111; // Output-Compare-Register auf 255 stellen
OCR1A = 0b11111111;
OCR0B = 0b11111111; // Output-Compare-Register auf 255 stellen
OCR1B = 0b11111111;

DDRB = 0b11111111; // PortB auf Ausgabe stellen
GTCCR = 0b00000000; // Timer starten

while(1) {}


ein kleiner Tip wäre klasse. Als nächstes muss ich dann wohl noch den Modus ändern, damit ich eine PWM hinbekommen, im Moment blinkt nur eine LED schön gleichmäßig mit DutyCycle 50%.

Internette Grüße
Stefan

McJenso
27.01.2008, 14:25
Hallo,

die Schreibweise GTCCR = 0b10000001; ist nicht besonders übersichtlich.
Wenn du z.B.
GTCCR = (1<<TSM)|(1<<PSR0);
schreibst ist das deutlich besser zu lesen und es schleichen sich nicht so leicht Fehler ein. Prüfe einmal die Waveform Generation Bit's da scheint was nicht zu passen. Ich hab mir jetzt allerdings auch nicht alle Bit's angetan^w angesehen.

Gruß

Jens

grumpf
27.01.2008, 16:07
Hai,

danke für die prompte Antwort. Hast Recht, daran lags. Hab den Timer0 inzwischen zum laufen bekommen. Plage mich jetzt mit Timer1 rum. Da sind die Register und die Vorgehensweise anscheind wieder eine andere.

Die binäre Darstellung hab ich genommen, weil ich dann für mich besser die Registereinträge zuordnen kann. Die hier übliche und von dir vorgeschlagene Schreibeweise liegt mir persönlich nicht so.

Aber gleich noch mal eine andere, aktuelle Frage.
Wenn ich mir die Pinbelegung des Käfers so ansehe, frage ich mich grad, ob ich überhaupt vier PWM-Kanäle nutzen kann. Ich nutze im Moment
PB0 - OC0A
PB1 - OC0B

wenn ich das jetzt richtig verstehe liegen auf PB3 und PB4 die B-PWM-Kanäle des Timer1. Die A-Kanäle liegen aber auch aif PB0 und PB1 ?!
Bedeutet das nicht, dass ich vom Timer1 nur den B-Kanal verwenden kann?

Internette Grüße
Stefan

McJenso
27.01.2008, 18:12
Hallo,

irgendwie habe ich gerade ein dejavue. :)
Link (https://www.roboternetz.de/phpBB2/zeigebeitrag.php?p=342633&highlight=#342633)

Gruß

Jens

grumpf
27.01.2008, 19:58
Hai Jens,

ein Deja vu ? Das ist bestimmt ein Fehler in der Matrix :-b
War vor lauter Prescalern, Register und Bits wohl etwas abgelenkt.
Hatte nur heute unter http://www.mikrocontroller.net/topic/42166#new ziemlich am Ende gesehen, dass es angeblich doch gehen soll. Aber das ist wohl eher nicht ganz korrekt. Schade, vier PWM-Kanäle rausgeführt wären schon klasse....

Internette Grüße
Stefan