Forum: Mikrocontroller und Digitale Elektronik ATtiny85 PWM an PB3 funktioniert einfach nicht!


von Jupp Strupp (Gast)


Lesenswert?

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?

von S. Landolt (Gast)


Lesenswert?

Im Datenblatt lese ich unter "Table 12-1. Compare Mode Select in PWM 
Mode" in der 3. Zeile: "/OC1x not connected".

von neuer PIC Freund (Gast)


Lesenswert?

Du rufst die Funktion
1
De_Init();
 auf, in der durch
1
TCCR1 = 0;
 der Timer wieder ausgeschaltet wird.

Das darf nicht sein!
;-)

von Draco (Gast)


Lesenswert?

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.

von Jupp Strupp (Gast)


Lesenswert?

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... :(

von Jupp Strupp (Gast)


Lesenswert?

@ Draco: deine antwort, kam nach meiner letzten... ich probiere es 
gerade mal aus...

von spess53 (Gast)


Lesenswert?

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

von neuer PIC Freund (Gast)


Lesenswert?

Setz doch mal einen Breakpoint in der mainloop. Lass  ein wenig laufen, 
stoppe und schau dir das OCF1B-Flag an.

von Jupp Strupp (Gast)


Lesenswert?

meine soic klammer hat gerade den geist aufgegeben... ich bekommt keine 
verbindung mehr zum tiny... :(

von Schubi Damdam (Gast)


Lesenswert?

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.

von Jupp Strupp (Gast)


Lesenswert?

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???

von S. Landolt (Gast)


Lesenswert?

Sicher, dass Sie sich PB4 anschauen? Wird für den richtigen Controller 
übersetzt? Bei mir läuft das.

von spess53 (Gast)


Lesenswert?

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

von Jupp Strupp (Gast)


Lesenswert?

@ 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?

von neuer PIC Freund (Gast)


Lesenswert?

Du musst den Quarz an PB3/PB4 ablöten und auf internen Takt stellen. 
Entsprechend die Fuses setzen.

scnr

von S. Landolt (Gast)


Lesenswert?

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?

von Jupp Strupp (Gast)


Lesenswert?

@ 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...

von Jupp Strupp (Gast)


Lesenswert?

ä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
Noch kein Account? Hier anmelden.