myGully.com

myGully.com (https://mygully.com/index.php)
-   Programmierung (https://mygully.com/forumdisplay.php?f=67)
-   -   [C167] PWM generieren (https://mygully.com/showthread.php?t=2538337)

Boggie 03.01.12 11:21

[C167] PWM generieren
 
Hoi,
ich bin gerade dabei für die Schule PWM-Signal zu generieren.
Soweit funktioniert das auch, allerdings kann ich während der Ausführung nicht die Pulsweite festlegen. Am Ausgang liegt anschließend immer ein H-Pegel an.
Nächste Frage, wieso erhalte ich eine Grundfrequenz von 100Hz, wenn PP0 3125 ist? (erster Link Beispiel Seite 32)

PHP-Code:

#include <reg167.h>
#include <stdio.h>

sbit S1 P5^0;
sbit S2 P5^1;

void InitPWM0()
{
    
DP7 0x01;        //AUSGANG (PWM0)
    
P7 0x0;

    
PP0 3125;        //100Hz?
    
PEN0 1;        //AUSGABE
    
PM0 0;                      //PWM MODE
    
PW0 0.5 PP0;                 //50 PROZENT AKTIV
    
PTR0 1;        //STARTEN
    
IEN 1;
}

void ControlPWM0(int _PERCENT)
{
    
PW0 = ((100-_PERCENT)/100) * PP0;
}

void main()
{    
    
InitPWM0();
    
ControlPWM0(90);
    while(
1);


Bis jetzt hab ich zum Thema nur zwei Seiten gefunden, die mehr oder weniger hilfreich sind.
[Link nur für registrierte und freigeschaltete Mitglieder sichtbar. Jetzt registrieren...]

[Link nur für registrierte und freigeschaltete Mitglieder sichtbar. Jetzt registrieren...]

Ich bin was Microcontroller angeht, vorallem PWM totaler Anfänger, also bitte bei den Antworten berücksichtigen ;)

flotti 04.01.12 14:22

Nächste Frage, wieso erhalte ich eine Grundfrequenz von 100Hz, wenn PP0 3125 ist? (erster Link Beispiel Seite 32)

weil dein pwm ausgang erstmal mit 312500 Hz arbeitet, 312500 / 3125 = 100

warum er nach dem wechsel auf h geht kann ich dir nicht sagen, versuch doch mal neu zu inititialsieren

PHP-Code:

#include <reg167.h> 
#include <stdio.h> 

sbit S1 P5^0
sbit S2 P5^1

void InitPWM0(int percent

    
DP7 0x01;        //AUSGANG (PWM0) 
    
P7 0x0

    
PP0 3125;        //100Hz? 
    
PEN0 1;        //AUSGABE 
    
PM0 0;                      //PWM MODE 
    
PW0 = ((100-percent)/100) * PP0;           
    
PTR0 1;        //STARTEN 
    
IEN 1



void main() 
{
 while(
1){
     
int i 1;   
     
InitPWM0(50); 
     while(
i++);
     
InitPWM0(90); 
 }



Boggie 04.01.12 21:01

Danke, die 100Hz sind jetzt klar. :D
Meinen Fehler hab ich vorhin gefunden:

PW0 = ((100.0-percent)/100.0) * PP0;

Hatte .0 vergessen, deshalb war es anschließend immer 1*Grundfrequnz, da es als Integer behandelt wurde statt float :dozey:


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:56 Uhr.

Powered by vBulletin® (Deutsch)
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.