PWM Frage

  • 1
  • 2
  • 3
  • 4
  • Page 2 of 4
Harry
Moderator
Avatar
Gender:
Location: zwischen Augsburg und Ulm
Age: 59
Posts: 2134
Registered: 03 / 2003
Subject:

Re: PWM Frage

 · 
Posted: 05.04.2015 - 21:10  ·  #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
Attachments
PWM Frage
Filename: Pre1Res10_10_10.png
Filesize: 43.59 KB
Title:
Download counter: 123
PWM Frage
Filename: Pre1Res10_50_50.png
Filesize: 45.73 KB
Title:
Download counter: 128
PWM Frage
Filename: Pre1Res10_200_200.png
Filesize: 46.38 KB
Title:
Download counter: 128
PWM Frage
Filename: Pre1Res10_250_250.png
Filesize: 45.59 KB
Title:
Download counter: 122
PWM Frage
Filename: Pre1Res10_250_900.png
Filesize: 44.43 KB
Title:
Download counter: 126
Harald_K
 
Avatar
 
Subject:

Re: PWM Frage

 · 
Posted: 05.04.2015 - 23:39  ·  #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
Gender: n/a
Location: Wunsiedel Bayern
Age: 67
Posts: 766
Registered: 06 / 2013
Subject:

Re: PWM Frage

 · 
Posted: 15.04.2015 - 07:23  ·  #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
Gender:
Location: zwischen Augsburg und Ulm
Age: 59
Posts: 2134
Registered: 03 / 2003
Subject:

Re: PWM Frage

 · 
Posted: 15.04.2015 - 11:35  ·  #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
Gender: n/a
Location: Wunsiedel Bayern
Age: 67
Posts: 766
Registered: 06 / 2013
Subject:

Re: PWM Frage

 · 
Posted: 15.04.2015 - 11:45  ·  #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
Gender:
Location: Germany
Age: 24
Homepage: e-lab.de
Posts: 5558
Registered: 03 / 2002
Subject:

Re: PWM Frage

 · 
Posted: 15.04.2015 - 13:02  ·  #14
Hallo Frank,

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

rolf
TheBeginner
Schreiberling
Avatar
Gender: n/a
Location: Wunsiedel Bayern
Age: 67
Posts: 766
Registered: 06 / 2013
Subject:

Re: PWM Frage

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

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

mfg Frank
Harry
Moderator
Avatar
Gender:
Location: zwischen Augsburg und Ulm
Age: 59
Posts: 2134
Registered: 03 / 2003
Subject:

Re: PWM Frage

 · 
Posted: 15.04.2015 - 14:53  ·  #16
Hallo Rolf,

ich zitiere mich mal selber :D - hab ich auch noch nie gemacht ..... Post #9 dieses Threads:
Quote by 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
  • Page 2 of 4
Selected quotes for multi-quoting:   0

Registered users in this topic

Currently no registered users in this section

The statistic shows who was online during the last 5 minutes. Updated every 90 seconds.
MySQL Queries: 16 · Cache Hits: 15   142   157 · Page-Gen-Time: 0.034567s · Memory Usage: 2 MB · GZIP: on · Viewport: SMXL-HiDPI