PWM-Frequenzwert vom PIC18 berechnen lassen

OP #3826658
Hallo,

Ich habe folgendes Problem:
Laut dem Datenblatt des PIC18F4520 lässt sich die PWM Periode so 
berechnen:
PWMPeriod = [(PR2)+1]•4•TOSC• (TMR2 Prescale Value)

Ich habe dann die Formel auf PRx= umgeformt, jedoch bekomme ich nun bei 
egal welchem Wert ich dieser Funktion übergebe immer eine PWM Frequenz 
von 490Hz.
Wenn ich den Wert allerdings selbst errechne und fix der Funktion 
OpenPWM1(); übergebe, bekomme ich das gewünschte Signal.
Meine Vermutung ist, dass die Rechnung aufgrund der Wertebereiche der 
verschiedenen Variablentypen nicht richtig funktioniert. Kann mir jemand 
diese Vermutung bestätigen und mir eine Lösung dazu vorschlagen? Danke!

Hier der Code:
1
#include <pic18f4520.h>
2
#include <plib.h>
3
#include <xc.h>
4
#include <pwm.h>
5

6
#pragma config OSC = INTIO67
7
#pragma config WDT = OFF
8
#pragma config LVP = OFF
9

10
#define DUTY_CYCLE  127
11
#define FOSC        8000000
12

13
unsigned char GetPRxValue(int frequency);
14
void Init();
15

16

17
void main(void)
18
{
19

20
    Init();
21

22
    while(1)
23
    {
24
        
25
    }
26
}
27

28
void Init()
29
{
30
    OSCCON=0x70;
31
    ADCON1=0x0F;
32

33
    TRISCbits.RC2 = 0;
34

35
    OpenTimer2(T0_PS_1_16);
36
    
37
    SetDCPWM1(DUTY_CYCLE);
38
    OpenPWM1(GetPRxValue(500));
39
}
40

41
unsigned char GetPRxValue(int frequency)
42
{
43
    unsigned char prescaler = 16;
44

45
    return (unsigned char)((1/frequency)/((1/FOSC)*prescaler*4))-1;
46
}
#3827261
Ich würde das aber nicht von einer Funktion sondern vom Präprozessor 
berechnen lassen, spart Zeit und vllt. auch die Float Funktionen.
Oder wenn es mehr als nur ein Wert, aber nicht allzu viele, könnte man 
eine Look Up Table anlegen.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 12 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.