Forum: Mikrocontroller und Digitale Elektronik Was übersehe ich bei diesem PWM


von Pier S. (bigpier)


Lesenswert?

Hallo Gemeinde ,
Proiere grad die PWM Kanäle des Timer1 vom ATMEGA 168 zu nutzen und es 
geht auch Prinzipiel !!
Es giebt jedoch ein aber , ich hab folgende einstellungen vorgenommen :
   TCCR1A |= (1<<COM1A1)|(1<<COM1B1)|(1<<COM1B0)|(1<<WGM10);
   TCCR1B |= (1<<WGM12)|(1<<CS10);
und so wie ich es aus dem Datenblatt entneme solte ich so ein fast PWM 
aktiviert haben. Somit mit einem 16 MHZ Quarz auf eine frequenz von 
62,5kH kommen aber ich mess mit meinem Oszi nur 31,25kH also genau die 
hälfte !!

Was mach ich schon wieder falsch ????


Danke gruß

Pier

von senex24 (Gast)


Lesenswert?

Läuft der uC wirklich mit 16 MHz?

von Pier S. (bigpier)


Lesenswert?

Ja ich hab die Fuse Bits auf externem Quarz gesetzt !! Mit dem Timer 1 
erzeugte Zeitbasis stimmt mit dem OSZI überein !!!

Gruß Pier

von senex24 (Gast)


Lesenswert?

Ich würde erstmal den Timer vergessen, das Oszilloskop weit weg stellen 
und dann eine LED im Sekundentakt blinken lassen.

von Tassilo B. (big_t)


Lesenswert?

Lasse mal (1<<COM1B0) weg. Wenn ich mir Tabelle 14-2 im Datenblatt 
angucke, glaube ich nicht, daß deine Kombination zulässig ist... Die 
rund 31kHz klingen sehr nach Toggle-Funktion statt gewünschter 
Fast-PWM...

Tassilo

von Johannes M. (johnny-m)


Lesenswert?

Tassilo Böhr wrote:
> Lasse mal (1<<COM1B0) weg. Wenn ich mir Tabelle 14-2 im Datenblatt
> angucke, glaube ich nicht, daß deine Kombination zulässig ist... Die
> rund 31kHz klingen sehr nach Toggle-Funktion statt gewünschter
> Fast-PWM...
Nö. COM1B1 und COM1B0 gesetzt heißt invertierter Mode für OC1B. COM1A1 
gesetzt und COM1A0 nicht gesetzt heißt nicht-invertierter Mode für OC1A. 
Das müsste eigentlich so stimmen.

Übrigens bezieht sich Tabelle 14-2 auf den 8-Bit-Timer 0. Hier geht es 
aber um Timer 1!

von Tassilo B. (big_t)


Lesenswert?

Also in meinem 168er-Datenblatt (Rev. 2545F-AVR-06/05) gehört Tabelle 
14-2 sehr wohl zum 16Bit-Timer 1 (wie auch das ganze Kapitel 14), 
komisch...

Trotzdem habe ich mich natürlich im Eröffnungsbeitrag verlesen und kann 
mir das (Fehl)Verhalten nun nicht so recht erklären.

Tassilo

von Johannes M. (johnny-m)


Lesenswert?

Tassilo Böhr wrote:
> Also in meinem 168er-Datenblatt (Rev. 2545F-AVR-06/05)
Aaaah, lad Dir mal ein aktuelles Datenblatt runter! Steht auf Deinem 
vielleicht noch "Preliminary Datasheet" drauf?

von Tassilo B. (big_t)


Lesenswert?

So isses... In der aktuellen Ausgabe ist es tatsächlich Kapitel 15 ;-)
Aber das hilft dem Pier ja auch nicht weiter...

Tassilo

von Pier S. (bigpier)


Lesenswert?

Ja ich Blicks nicht ganz !!
Es ist mir Absolut ein Rätsel die 2 Pwms gehn zawar schön so wie sie 
sollen gegenläufig aber die Frequenz ist die Halbe !!

Gruß Pier

von senex24 (Gast)


Lesenswert?

Pier S., am Ende des Holzweges im Kreis zu laufen, bringt Sie keinen 
Meter weiter. Sie müssen einen neuen Weg einschlagen, auch wenn der 
zuerst einmal unsinnig erscheint; zumindest werden Sie mit zunehmendem 
Abstand einen besseren Überblick über das Gelände gewinnen. Also:

1. woher kommt der Faktor 2 ?
  - falscher Systemtakt
  - irgendetwas mit PWM-toggle
  - irgendetwas mit 9-bit-PWM
  - Sie lesen oder interpretieren ein Messergebnis falsch

  Überprüfen Sie diese Punkte; verändern Sie absichtlich die Parameter 
und schauen Sie, was passiert.

2. reduzieren Sie den Code auf das absolute Minimum

3. stellen Sie das Ergebnis von 2. hier ins Forum

4. nehmen Sie einen anderen Controller

5. kontrollieren Sie das define-File

von senex24 (Gast)


Lesenswert?

(Nachdem die Nacht schon sehr früh langweilig wurde, der Kaffee aber 
noch lange nicht abgebaut war ...)

Hier meine Minimalversion, allerdings in Assembler:


.def  null  = r0
.def  tmp0  = r16

.cseg

.org  0
  clr    null
  sbi    DDRB,1
  sbi    DDRB,2
  ldi    tmp0,(1<<WGM10)+(1<<COM1A1)+(1<<COM1B1)+(1<<COM1B0)
  sts    TCCR1A,tmp0
  ldi    tmp0,(1<<WGM12)+(1<<CS10)
  sts    TCCR1B,tmp0
  ldi    tmp0,$80
  sts    OCR1AH,null
  sts    OCR1AL,tmp0
  sts    OCR1BH,null
  sts    OCR1BL,tmp0
  rjmp  pc

von Pier S. (bigpier)


Lesenswert?

So ich hab des Rätsels lösung!

Der Mega168 hat irgend einen defekt ! Uch hab meinen Code auf dem STK500 
getestet und dort gehts ! Jetzt muß ich irgendwie das SMD Teil von der 
Prototypplatine runter kriegen !!

Danke Euch für die Unterstützung

Gruß Pier

von Pier S. (bigpier)


Lesenswert?

Hallo,
auch wenn der Trend schon älter ist möchte ich nochmal um Eure Hilfe 
bitten .
Ich habe ein Verständnis Problem bei dieser PWM geschichte ! Wird der 
duty cycle des oben beschriebene PWM in irgend einer weise vom Program 
ablauf beeinflusst abgesehen vom wert des OCR1A/OCR1B !
Ich hoffe ich habe mich klar ausgedrückt!!

Vielen Dank für Eure Hilfe

Gruß

Pier

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.