hallo leute, ich habe ein kleines problem mit einem at90can. dabei möchte ich eine pwm realisieren um ein transistor anzusteuern. als erstes habe ich diesen post verinnerlicht Beitrag "PWM AT90CAN128 an OCR2 unc OCR0". das hat soweit auch funktioniert. mit dem timer0 habe ich mich schon beschäftigt jedoch kann man bei dem für eine fasenkorrekte pwm keine werte vorgeben zur zählung oder?. nun bin ich bei timer 1, dieser kann das und ich bin der meinung, dass ich ihn wie folgend richtig konfiguriert habe: TCCR1A = 0b01010111; TCCR1B = 0b00010010; aber so funktioniert es nicht. es kommt keine pwm raus. hätte vllt jemand eine idee was ich falsch gemacht habe? meine nächste frage geht im datenblatt auf die COMnA1/COMnB1/ COMnC1 und 0 register. in den tabellen ist nicht gezeigt welches bit des registers nun dazu gehörig ist zu welchem modi. in allen tabellenheadern stehen alle namen. wäre nett wenn das jemand näher erläutern könnte. deshalb habe ich die bits 01 01 01 entsprechend gleich genutzt für COM danke im voraus liebe grüße tim
Hi >und ich bin der meinung, dass ich ihn wie folgend richtig konfiguriert habe: >TCCR1A = 0b01010111; >TCCR1B = 0b00010010; Meinst du, das jemand Lust hat das zu auseinander zu sortieren? Tue dir und anderen einen Gefallen und benutze die übliche Schreibweise TCCR1A = (1<<xyc)|(1<<xyz)... MfG Spess
ok danke für die schnelle antwort. du hast recht das ist nicht fein leserlich, mein fehler ich hoffe das kann man nun besser interpretieren: TCCR1A = (01 << COM1A1/0) | (01 << COM1B1/0) | (01 << COM1B1/0) | (1 << WGM11) | (1 << WGM10); TCCR1B = (0 << ICNC1) | (0 << ICES1) |(0 << reserved) | (1 << WGM13) | (0 << WGM12) | (0 << CS12) | (1 << CS11) | (0 << CS10); die COM habe ich wie gesagt alle auf 01 gesetzt weil mir eine richtige bezeichnung in den datenblättern fehlte oder ich sie nicht gesehen habe. ich möchte eine phasecorrect pwm nach tabelle13-3 dake im voraus :)
entschuldige das war ein schnellentwurf. nun aber compilergerecht :) TCCR1A = (0 << COM1A1) | (1 << COM1A0) | (0 << COM1B1) | (1 << COM1B0) |(0 << COM1C1) | (1 << COM1C0) |(1 << WGM11) | (1 << WGM10); TCCR1B = (0 << ICNC1) | (0 << ICES1) | (1 << WGM13) | (0 << WGM12) | (0 << CS12) | (1 << CS11) | (0 << CS10);
Hi
Als Erstes: Wozu brauchst du Phase Correct PWM? Für deinen Zweck reicht
Fast PWM.
>(0 << COM1A1) | (1 << COM1A0)
Ist falsch. Du brauchst COM1n = 10 oder 11. Bevorzugt 10. COM1n = 11 ist
invertierte PWM.
Und nicht vergessen, die OC-Pins auf Ausgang setzen.
MfG Spess
hi, du hast recht eine fast-pwm reicht wohl. ich habe demnach für fast-pwm den COM1n = 10 gesetzt für compare match at top. das klappt soweit auch jedoch habe ich einen minimalen puls TCCR1A = (1<<COM1A1)|(0<<COM1A0)|(1<<COM1B1)|(0<<COM1B0)|(1<<COM1C1)|(0<<COM1C0)| (1<<WGM11)|(1<<WGM10)); TCCR1B = (0<<ICNC1)|(0<<ICES1)|(0<<WGM13)|(1<<WGM12)|(0 << CS12)|(1<<CS11)|(0<<CS10); den pin habe ich auf ausgang: DDRB |= (1 << DDB6); desweiteren habe ich den zähler für TOP gesetzt mit OCR1A = 0x00FF; und wielange der puls dauern soll TCNT1 = 0x00FF; auf dem oszi sind nur winzig kleine pulse zu sehen, wie kann ich die pulslänge beeinflussen, dachte dafür ist TCNT zuständig danke im voraus
Hi >auf dem oszi sind nur winzig kleine pulse zu sehen, wie kann ich die >pulslänge beeinflussen, dachte dafür ist TCNT zuständig Nein. Von TCNT lässt du die Finger. Deine Impulsbreite wird durch die OC-Register bestimmt. Lies mal das im Datenblatt unter 'Modes of Operation' nach. MfG Spess
danke spess, ich bin grad etwas mit OCR1A und OCR1B am drehen wegen der pulsbreite...aber die logik der register ist mir noch nicht ganz geheuer... da werde ich noch etwas rumtesten ... aber danke schonmal bis hierher edit: also ich habe OCR1A als TOP wert festgelegt aber dieser hat null relevantnis. wenn ic hden auf 0 setze habe ich eine PWM obwohl TOP=0 ja ein dauer 0 signal wäre... also ich bin etwas verwirrt was dies betrifft, ich hoffe da kann mir jemand nochmal kurz helfen
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.