PWM Frage

  • 1
  • 2
  • 3
  • 4
  • Seite 2 von 4
Harry
Moderator
Avatar
Geschlecht:
Herkunft: zwischen Augsburg und Ulm
Alter: 60
Beiträge: 2155
Dabei seit: 03 / 2003
Betreff:

Re: PWM Frage

 · 
Gepostet: 05.04.2015 - 21:10 Uhr  ·  #9
@Harald: :confused5: :oops:

Ich hab mal ein paar Bilder gemacht. Oben ist der 8-Bit- unten der 10-Bit-PWM zu sehen.

Der Dateiname ist wie folgt aufgebaut:
PreXResY_aaa_bbb.png
X=Prescaler
Y=Resolution
aaa=Wert der 8-Bit PWM
bbb=Wert der 10-Bit PWM

Und der Code dazu:
Code

Program PWMTest;

{$NOSHADOW}
{ $WG}                     {global Warnings off}

Device = mega644, VCC=5;
{ $BOOTRST $07000}         {Reset Jump to $07000}

Import SysTick, PWMPort1A, PWMPort1B, PWMPort2A, PWMPort2B;

From System Import;


Define
  ProcClock      = 20000000;       {Hertz}
  SysTick        = 10;             {msec}
  StackSize      = $0100, iData;
  FrameSize      = $0100, iData;

  PWMPresc1      = 1;
  PWMRes1        = 10;
  PWMMode1       = fast, positive;

  PWMPresc2      = 1;
  PWMRes2        = 10;
  PWMMode2       = fast, positive;
Implementation

{$IDATA}

{------------------------------------------------------------------------------}
{ Type Declarations }
Type
{------------------------------------------------------------------------------}
{ Const Declarations }
Const
{------------------------------------------------------------------------------}
{ Var Declarations }
Var
{$IDATA}
{------------------------------------------------------------------------------}
{ functions }
Procedure InitPorts;
  Begin
    DDRD:=  %11110000;                      //
  End InitPorts;
{------------------------------------------------------------------------------}
{ Main Program }
{$IDATA}
Begin
  InitPorts;
  EnableInts;
  PWMPort1A:=100;                        //PWMTest;
  PWMPort1B:=100;                        //PWMTest;
  PWMPort2A:=100;                        //PWMTest;
  PWMPort2B:=100;                        //PWMTest;
  Loop
    EndLoop;
End PWMTest.


Und ein paar Fragen:
- wieso kann ich beim 8-Bit beim Define 10-Bit angeben, obwohl es kein 10-Bit ist ?
- wenn ich beim 8-Bit jedoch eine Zahl größer 255 angeben, bekomm ich die Fehlermeldung "Byte expected"
- wieso kann ich PWMPort0A und 0B nicht verwenden ? (Mega644)
- geht das nicht irgendwie schneller ?
- wie zuverlässig wäre es eine PWM per Task/Process mit einem SysTick von 0.1 zu erzeugen ? Das wären dann wohl 100µs = 10 kHz. Richtig ?

Gruss
Harry
Der an diesem Beitrag angefügte Anhang ist entweder nur im eingeloggten Zustand sichtbar oder die Berechtigung Deiner Benutzergruppe ist nicht ausreichend.
Harald_K
 
Avatar
 
Betreff:

Re: PWM Frage

 · 
Gepostet: 05.04.2015 - 23:39 Uhr  ·  #10
also warum du beim 8bit PWM und 10bit define keine Fehlermeldung bekommst, muß dir der Rolf erklären, der ist für den Compiler zuständig.

den Timer0 kannst du nicht nehmen, der ist Systick

und schneller ....
du kannst die Timer mit nem externen Takt versorgen, dann wirds schneller.
Oder du programmierst sie selber, dann kannst du auch kleinere Teilfaktoren als 8 bit wählen ... theoretisch geht dann 1, aber das ist kaum sinnvoll, da du ja über die Zählweite auch die mögliche Regelweite des PWM_Signals begrenzen tust.

und mit dem Systick .. sicher ginge da, aber sagen wir mal 8 bit, also 0..255 als PWM-Schaltwert macht bei 100us auch 25,6 ms Umlaufzeit. - sind irgendwas um 40 Hz.

außerdem ist das ne ganz nette CPU-Auslastung, wenn du alle 100us
- den PWM-Zähler hochzählen
- das Überlaufen abfragen und ggf. neu Laden und den Portpin setzen
- das Erreichen des PWM-Wertes abprüfen und ggf. den Port schalten
mußt in Software.

das ist ja das schöne an so nem Timer, daß der das alles in Hardware und ohne CPU-Zeit-Bedarf macht.
TheBeginner
Schreiberling
Avatar
Geschlecht: keine Angabe
Herkunft: Wunsiedel Bayern
Alter: 68
Beiträge: 776
Dabei seit: 06 / 2013
Betreff:

Re: PWM Frage

 · 
Gepostet: 15.04.2015 - 07:23 Uhr  ·  #11
Moin,
ne kleine Frage zum AtMega8 PDIP

Pin15 / OC1A
Pin16 / OC1B
Pin17 / OC2

Warum kann ich den Pin17 OC2 nicht Aktivieren ?
Import SysTick, PWMport1A, PWMport1B, >>PWMport2 ???<<

Der mega8 PDIP hat doch 2 einzelne PWM-Ports oder nicht ?



mfg Frank
Harry
Moderator
Avatar
Geschlecht:
Herkunft: zwischen Augsburg und Ulm
Alter: 60
Beiträge: 2155
Dabei seit: 03 / 2003
Betreff:

Re: PWM Frage

 · 
Gepostet: 15.04.2015 - 11:35 Uhr  ·  #12
Hi Frank,

könnte das daran liegen, daß der entsprechende Timer durch was anderes belegt ist ? Dazu kann vielleicht Harald oder Rolf was sagen.

Gruss
Harry
TheBeginner
Schreiberling
Avatar
Geschlecht: keine Angabe
Herkunft: Wunsiedel Bayern
Alter: 68
Beiträge: 776
Dabei seit: 06 / 2013
Betreff:

Re: PWM Frage

 · 
Gepostet: 15.04.2015 - 11:45 Uhr  ·  #13
Wegen dem SysTick ?

Peripheral Features
– Two 8-bit Timer/Counters with Separate Prescaler, one Compare Mode
– One 16-bit Timer/Counter with Separate Prescaler, Compare Mode, and Capture

Dann müsste der SysTick den 8Bit haben
und der 16bit den OC1A und OC1B

OC2 ???

mfg Frank
rh
Administrator
Avatar
Geschlecht:
Herkunft: Germany
Alter: 25
Homepage: e-lab.de
Beiträge: 5558
Dabei seit: 03 / 2002
Betreff:

Re: PWM Frage

 · 
Gepostet: 15.04.2015 - 13:02 Uhr  ·  #14
Hallo Frank,

der AVRco unterstützt nur PWMs in 16bit Timer. Der 3te Timer ist wohl ein 8bit Typ.

rolf
TheBeginner
Schreiberling
Avatar
Geschlecht: keine Angabe
Herkunft: Wunsiedel Bayern
Alter: 68
Beiträge: 776
Dabei seit: 06 / 2013
Betreff:

Re: PWM Frage

 · 
Gepostet: 15.04.2015 - 14:34 Uhr  ·  #15
Hallo Rolf, Danke....

Wird Zeit das ich mir mal andere Atmels zulege :3some:

mfg Frank
Harry
Moderator
Avatar
Geschlecht:
Herkunft: zwischen Augsburg und Ulm
Alter: 60
Beiträge: 2155
Dabei seit: 03 / 2003
Betreff:

Re: PWM Frage

 · 
Gepostet: 15.04.2015 - 14:53 Uhr  ·  #16
Hallo Rolf,

ich zitiere mich mal selber :D - hab ich auch noch nie gemacht ..... Post #9 dieses Threads:
Zitat geschrieben von Harry

Und ein paar Fragen:
- wieso kann ich beim 8-Bit beim Define 10-Bit angeben, obwohl es kein 10-Bit ist ?
- wenn ich beim 8-Bit jedoch eine Zahl größer 255 angeben, bekomm ich die Fehlermeldung "Byte expected"
- wieso kann ich PWMPort0A und 0B nicht verwenden ? (Mega644)
- geht das nicht irgendwie schneller ?
- wie zuverlässig wäre es eine PWM per Task/Process mit einem SysTick von 0.1 zu erzeugen ? Das wären dann wohl 100µs = 10 kHz. Richtig ?

...... evtl. den Original-Post anschauen - da sind Bilder dabei.

Gruss
Harry
  • 1
  • 2
  • 3
  • 4
  • Seite 2 von 4
Gewählte Zitate für Mehrfachzitierung:   0

Registrierte in diesem Topic

Aktuell kein registrierter in diesem Bereich

Die Statistik zeigt, wer in den letzten 5 Minuten online war. Erneuerung alle 90 Sekunden.
MySQL Queries: 15 · Cache Hits: 14   137   151 · Page-Gen-Time: 0.028995s · Speichernutzung: 2 MB · GZIP: ein · Viewport: SMXL-HiDPI