atmel attiny PWM aktiviert sich nicht

Gast #926313
Lesenswert?

ich möchte beim attiny13 die interne Hardware-PWM einschalten. es kommt 
aber kein PWM-Signal.

hier ist der Code, mit dem ich es versucht habe:
----------------
.include "tn13def.inc"


main:

   ldi    r16, 0x1F
   out    DDRB, r16

   ldi    r16, 0x1F
   out        PORTB, r16


   ldi    r16, 180
   out    OCR0A, r16

   ldi    r16, 0xC3
   out    TCCR0A, r16

   ldi    r16, 0x09
   out    TCCR0B, r16


   ldi    r16, 255
   out    TCNT0, r16


loop:
      rjmp   loop
---------------


also es geht hauptsächlich um die mittleren 3 Register. die oberen habe 
ich hinterher drangeschrieben.

erst habe ich reihenfolge TCCR0A TCCR0B OCR0A versucht.
das ging nicht. danach habe ich OCR0A vor TCCR0A TCCR0B gemacht. am ende 
habe ich noch TCNT0 versucht.

es nützt nix. die PWM aktiviert sich nicht an dem betroffenen Pin.

dann habe ich zum schluß noch versucht, alle Port-Pins außer dem 
Reset-Pin auf 1 zu setzen (siehe die anweisungen ganz oben), um zu 
gucken, ob der PWM-generator den betroffenen ausgangs-Pin korrekt 
überschreibt. das funktioniert. es schalten alle Pinne auf 1 bis auf den 
PWM-Pin. der bleibt auf Null, wird also korrekt von dem PWM-generator 
überschrieben. aber der schaltet sich nicht ein. es ist kein PWM-signal 
auf dem PWM-Pin zu finden.

Wisst ihr, was ich verkehrt gemacht habe?

Der Microcontroller läuft mit internem Takt auf ca. 9 MHz, automatischer 
interner Oszillator. alle anderen Pins sind unbedrahtet, also nur die 
Pins alleine ohne angeschlossene zusatzsachen, mit dem Oszilloskop 
gemessen.
Gast #926345
Lesenswert?

ok hm d.h.,die register haben warscheinlich falsche inhalte. ist denn 
die reihenfolge richtig? in welcher reihenfolge müssen die register 
gesetzt werden?

also ich möchte die PWM erst überhaupt einmal nur ankriegen. ich 
verstehe die unterschiede der genauen PWM-auswahlen in dem datenblatt 
nicht ganz. entweder ich habe tomaten auf den augen, oder das datenblatt 
ist irgendwie schwer formuliert.

Ich weiß, daß ich mit CTC unterschiedliche frequenzen machen kann, Fast 
PWM ist was ganz normales, was den meisten standard-ansprüchen genügt.
Phase-Correct ist irgendein extra blabla, keine ahnung ab wann man das 
braucht.

ich vermute mal, daß Fast-PWM für mich völlig ausreicht.

ich möchte mit dem controller eine spule über einen transistor 
ansteuern.

das ti/to-verhältnis darf warscheinlich nicht 50/50 sein, sondern eher 
30/70 oder so. das verhältnis muß nur ungefähr sein.

wenn ich das verhältnis ändern könnte, ist das schon gut, besser wäre 
aber wenn ich die Frequenz verändern könnte und das verhältnis gleich 
lassen könnte.

dann müßte ich CTC nehmen, der kann aber nur 50/50 und kein 30/70, oder 
?

und so wie ich das richtig sehe, kann ich bei normaler PWM bei 9 MHz 
durch 255 maximal so 31 KHz PWM machen, oder ?

das ist mir zu wenig. könnte ich irgendwie die Timer, der von 0-255 
läuft, so einstellen, daß er nur bis 20 oder so läuft?

..aber das wären dann schon fortsetzungen. erstmal will ich überhaupt 
nur den PWM ankriegen, ann wenn das nicht geht..


aja und OCRA und OCRB ghören bei diesem controller glaubeich nicht 
zusammen, der OCRA ist für Pin1 und der OCRB für Pin2.

einen zweiten OCRA und OCRB für den 2. Pin gibt es nicht.

und wann muß ich jetzt überhaupt mit TCNT0 machen?

kann ich dort reinschreiben, daß der zähler nur von 0-20 oder so zählen 
soll, oder ist TCNT0 die speicherstelle, die permanent beim zählen 
umgeschrieben wird?
#926356
Lesenswert?

Friedrich Keil wrote:

> ok hm d.h.,die register haben warscheinlich falsche inhalte. ist denn
> die reihenfolge richtig? in welcher reihenfolge müssen die register
> gesetzt werden?

Die Reihenfolge ist erst einmal ziemlich schnuppe.

> das ist mir zu wenig. könnte ich irgendwie die Timer, der von 0-255
> läuft, so einstellen, daß er nur bis 20 oder so läuft?

Dann ist Mode 7 richtig aber der Ausgang falsch. Der zählt von 0 bis 
OCR0A und kippt den Ausgang wenn OCR0B erreicht ist. Naturgemäss kommt 
das Signal dann auch am Pin für OCR0B, also OC0B = PB1.

> und wann muß ich jetzt überhaupt mit TCNT0 machen?

Nix.
#926363
Lesenswert?

Friedrich Keil wrote:

> aja und OCRA und OCRB ghören bei diesem controller glaubeich nicht
> zusammen, der OCRA ist für Pin1 und der OCRB für Pin2.

Pin 1 ist bei meinem Datasheet Reset und Pin 2 hat auch nix mit dem 
Timer zu tun. Eher schon PB0,PB1, die liegen aber woanders.
Gast #926369
Lesenswert?

ja PB0 und PB1 natürlich, die sind bei mir Pin5 und Pin6, die sind schon 
richtig. außerdem wenn auf einem der anderen Pinne die PWM drauf wäre, 
hätte ich es ja gesehen.

aber hier bei mir im datenblatt steht auf Seite 70 das hier:
OCR0A
"The Output Compare Register A contains an 8-bit value that is 
continuously compared
with the counter value (TCNT0). A match can be used to generate an 
Output Compare
interrupt, or to generate a waveform output on the OC0A pin."

und

OCR0B
"The Output Compare Register B contains an 8-bit value that is 
continuously compared
with the counter value (TCNT0). A match can be used to generate an 
Output Compare
interrupt, or to generate a waveform output on the OC0B pin."


was stimmt denn dann jetzt? ist mein datenblatt falsch?
#926371
Lesenswert?

Friedrich Keil wrote:

> aber hier bei mir im datenblatt steht auf Seite 70 das hier:

Stimmt schon. Nützt dir aber wenig, weil OCR0A im Mode 7 noch eine 
weitere Bedeutung hat: wenn TCNT0 diesen Wert erreicht, wird der Timer 
auf 0 gesetzt.

Und jetzt rate mal, was am Ausgang OC0A passiert, wenn OCR0A Register 
den gleichen Wert hat wie der Timer-Endwert: nämlich garnix - "Setting 
the OCR0A equal to MAX will result in a constantly high or low output" 
und MAX ist in diesem Modus nunmal per Definition identisch mit dem 
Inhalt von OCR0A. Die Katze beisst sich da in den Schwanz.

M.a.W: Im Mode 7 ist der Pin OC0A nicht sinnvoll verwendbar. Dafür kann 
man festlegen wie weit er zählt. Und genau das willst du ja.

> was stimmt denn dann jetzt? ist mein datenblatt falsch?

Datenblatt ist ok, du hast bloss den Mode 7 nicht verstanden.
Gast #926398
Lesenswert?

ah ok prima, ich habe jetzt mal statt Mode7 den FastPWM Mode 3 
ausgewählt, da geht er ganz normal. also es funktioniert jetzt aber 
moment..

wenn ich jetzt den Mode 7 nehme, dann kann ich dann nur die Frequenz 
variieren und das Verhältnis bleibt immer 50/50 ?

weil im moment arbeitet er auf Mode 3 mit 32 KHz. wenn ich jetzt auf 
MOde 7 gehe, könnte ich höhere frequenzen aber könnte ich auch 
gleichzeitig irgendwie dann 30/70 als Tasverhältnis machen?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren