Moin! Ich werde langsam aber sicher bekloppt! Ich versuche seit einigen Stunden bei einem ATtiny85 an PB3 ein PWM Signal zu erzeugen... Kurz und knapp zu meiner Einrichtung, von der ich glaube, dass sie doch korrekt sein müsste: //config timer1 for PWM //PWM-mode | on match: Clear the OC1B output line GTCCR = (1<<PWM1B) | (1<<COM1B1)|(0<<COM1B0); //prescaler for timer 1=8 TCCR1 = (1<<CS12)|(0<<CS11)|(0<<CS10); //set value in OCR1B OCR1B = 128; DDRB = (1<<PB3); Warum passiert am PB3 einfach mal NICHTS?! was habe ich übersehen?
Im Datenblatt lese ich unter "Table 12-1. Compare Mode Select in PWM Mode" in der 3. Zeile: "/OC1x not connected".
Du rufst die Funktion
1 | De_Init(); |
auf, in der durch
1 | TCCR1 = 0; |
der Timer wieder ausgeschaltet wird. Das darf nicht sein! ;-)
1 | • Bit 6 – PWM1B: Pulse Width Modulator B Enable |
2 | When set (one) this bit enables PWM mode based on comparator OCR1B in Timer/Counter1 and the counter |
3 | value is reset to $00 in the CPU clock cycle after a compare match with OCR1C register value. |
und
1 | In Normal mode, the COM1B1 and COM1B0 control bits determine the output pin actions that affect pin PB4 |
2 | (OC1B) as described in Table 12-6. Note that OC1B is not connected in normal mode. |
und du clearst den Pin und toogle... ja das macht er halt einmal auf low... und dann? bleibt er low... und dann? Bleibt er immernoch low... um da ne PWM zu bekommen musst du ihn toogln. Aber wie gesagt, du musst auch - bei deiner Einstellung den OCR1C setzen und den PinB4 nutzen.
ok, das sehe ich ein... habe GTCCR angepasst (wobei ich alle modis schon durch habe) ... //config timer1 for PWM //PWM-mode | on match: Clear the OC1B output line GTCCR = (1<<PWM1B) | (0<<COM1B1)|(1<<COM1B0); //prescaler for timer 1=8 TCCR1 = (1<<CS12)|(0<<CS11)|(0<<CS10); //set value in OCR1B OCR1B = 128; DDRB = (1<<PB3); es funktioniert dennoch nicht... :(
@ Draco: deine antwort, kam nach meiner letzten... ich probiere es gerade mal aus...
Hi >ok, das sehe ich ein... habe GTCCR angepasst (wobei ich alle modis schon >durch habe) ... Das nutzt aber nur etwas, wenn sich der ATTiny im ATTiny15-Mode befindet. MfG Spess
Setz doch mal einen Breakpoint in der mainloop. Lass ein wenig laufen, stoppe und schau dir das OCF1B-Flag an.
meine soic klammer hat gerade den geist aufgegeben... ich bekommt keine verbindung mehr zum tiny... :(
S. Landolt schrieb: > Im Datenblatt lese ich unter "Table 12-1. Compare Mode Select in PWM > Mode" in der 3. Zeile: "/OC1x not connected". Ich lese Bücher von Herman Hesse. Deren Inhalt ist für die Funktion des TO genau so nützlich wie das, was Du im Datenblatt gelesen hast.
so, klammer wieder zusammengebastelt... ALLE kabel waren abgebrochen und nur noch vom schrumpfschlauch sporadisch auf kontakt. nebenbei habe ich nun auf PB4 umgestellt. DDRB = (1<<PB4); GTCCR = (1<<PWM1B) | (0<<COM1B1)|(1<<COM1B0); TCCR1 =(1<<CS12)|(0<<CS11)|(0<<CS10); OCR1B = 125; OCR1C = 255; naja, es geht trotzdem nix! verstehe ich es richtig, dass an PB3/4 kein fast pwm möglich ist???
Sicher, dass Sie sich PB4 anschauen? Wird für den richtigen Controller übersetzt? Bei mir läuft das.
Hi
>verstehe ich es richtig, dass an PB3/4 kein fast pwm möglich ist???
Lies endlich das gottverdammte Datenblatt.
Mit GTCCR funtioniert nur etwas, wenn sich der ATTiny im ATtiny15
Compatibility Mode befindet,
MfG Spess
@ spess53: ruuuuuhig... es ist sonntag! xD ich versuche datenblätter immer komplett, bzw kapitel für kapitel zu lesen. kapitel 13 habe ich bis jetzt ausgelassen, da es für mich uninteressant erschien. drucke es aber gleich aus und lege es unter mein kopfkissen ;). so, habs jetzt einfach wieder an BP0. das wollte ich zwar vermeiden, aber hier läufts wenigstens ohne probleme. für alle dies interessiert... //Set PB0 output DDRB = (1<<PB0); //Clear OC0A/OC0B on Compare Match, set OC0A/OC0B at BOTTOM (non-inverting mode) (DS: 11-3) | Non-inverting, MODE 3 (DS: 11-5). TCCR0A = (0<<COM0A1)|(2<<COM0A0)|(0<<WGM01)|(3<<WGM00); //no prescaling (DS: 11-6) TCCR0B = (0<<CS02)|(0<<CS01)|(1<<CS00); //Output Compare Register A (DS: 11.9.5) OCR0A = 100; würdest du mir denn auch so kurz verraten, warum es an PB3/PB4 nicht so fluppt?
Du musst den Quarz an PB3/PB4 ablöten und auf internen Takt stellen. Entsprechend die Fuses setzen. scnr
an Spess Wo genau steht das im Datenblatt, ich finde die Stelle nicht. Außerdem läuft bei mir das Programm von 17:35 (auf Assembler übertragen), bei low-fuse E2. Was habe ich übersehen?
@ neuer PIC Freund: es gibt keinen quarz und die fuses sind somit natürlich auch auf den internen oszillator gestellt. da fällt mir ein, dass ich die CKDIV8 fuse auch gesetzt habe...
ähm... was is das denn??? ... da ich den tiny recht langsam laufen lassen wollte, hatte ich den attiny15 comp. mode wohl "aus versehen" schon ausgewählt. laut avr studio hatte ich SUT_CKSEL = INTRCOSC_4MHZ_6CK_14CK_4MS. im mousover text steht halt, dass es der attiny comp. mode ist bei 6.4 MHz -was ich ehrlich gesagt aber nicht gelesen hatte und warum steht im drop_down menü [...]_4MHZ_[...] ??? naja... ging es deswegen nicht, oder hätte es so doch funktionieren müssen? verträgt es sich nicht mit CKDIV8?
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.