Forum: Mikrocontroller und Digitale Elektronik 3 Kanal Software-PWM


von Chris D. (d3_m0n)


Lesenswert?

Moin,

ich habe dieses Tutorial gefunden:
[[https://www.mikrocontroller.net/articles/Soft-PWM#Intelligenter_L.C3.B6sungsansatz]]

Da ich an einem MSP430G2553 3 P-Channel Mosfets betreiben will muss das 
Signal invertiert sein.

Da bitwise operators nicht meine Stärke sind bräuchte ich ein wenig 
hilfe:-(

Ich habe es schon selber versucht, habe dann aber nach 2 std 
aufgegeben:D

lg Chris

: Bearbeitet durch User
von Christian S. (roehrenvorheizer)


Lesenswert?

Hallo,

vielleicht kannst Du durch intensive Analyse des Programms etwas 
abschauen :

Beitrag "noch ein AVR Moodlight"

MfG

von Chris D. (d3_m0n)


Lesenswert?

hmm das ist hardcoded auf 8mHz:-(

von Falk B. (falk)


Lesenswert?

Chris D. schrieb:
> Moin,
>
> ich habe dieses Tutorial gefunden:
> 
[[https://www.mikrocontroller.net/articles/Soft-PWM#Intelligenter_L.C3.B6sungsansatz]]
>
> Da ich an einem MSP430G2553 3 P-Channel Mosfets betreiben will muss das
> Signal invertiert sein.
>
> Da bitwise operators nicht meine Stärke sind bräuchte ich ein wenig
> hilfe:-(
>
> Ich habe es schon selber versucht, habe dann aber nach 2 std
> aufgegeben:D

Bist du ein Troll oder wirklich so dämlich?
1
// invertierte PWM
2
    
3
    if (pwm_cnt == 0) {
4
        PWM_PORT = ~tmp;                        // Ports löschen zu Begin der PWM
5
                                                // zusätzliche PWM-Ports hier setzen
6
        pwm_cnt++;
7
    }
8
    else {
9
        PWM_PORT |= ~tmp;                        // Ports setzen
10
                                                // zusätzliche PWM-Ports hier setzen
11
        if (pwm_cnt == pwm_cnt_max) {
12
            pwm_sync = 1;                       // Update jetzt möglich
13
            pwm_cnt  = 0;
14
        }
15
        else pwm_cnt++;
16
    }

Aus PWM_PORT = tmp;

wird PWM_PORT = ~tmp;


und aus  PWM_PORT &= tmp;
wird PWM_PORT |= ~tmp;

von Chris D. (d3_m0n)


Lesenswert?

Also:

wenn du mich als dämlich beizeichnen willst dann lass uns das doch 
persönlich klären mann könnte sich zb. treffen und dann kann ich dir das 
genau zeigen;-)

Ich habe nur nach hilfe gefragt da ich mit bitwise zeugs noch nicht 
wirklich zutun hatte.

Trotzdem danke.

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Chris D. schrieb:
> wenn du mich als dämlich beizeichnen willst dann lass uns das doch
> persönlich klären mann könnte sich zb. treffen und dann kann ich dir das
> genau zeigen;-)

 Ahem.
 Und wenn du es ihm genau zeigst, heißt das automatisch, daß du nicht
 dämlich bist?

 P.S.
 Deine Frage hat ungefähr so viel Sinn wie:

 Ich habe gelernt wie ich eine LED einschalten kann, aber wie mache ich
 das verdammte Ding wieder aus ?

: Bearbeitet durch User
von Falk B. (falk)


Lesenswert?

Chris D. schrieb:
> hmm das ist hardcoded auf 8mHz:-(

Tja mein lieber Chris, man sollte schon mal die Augen aufmachen. Was 
glaubst du, was diese Zeilen hier bedeuten?
1
// Defines an den Controller und die Anwendung anpassen
2
3
#define F_CPU         8000000L           // Systemtakt in Hz
4
#define F_PWM         100L               // PWM-Frequenz in Hz
5
#define PWM_PRESCALER 8                  // Vorteiler für den Timer
6
#define PWM_STEPS     256                // PWM-Schritte pro Zyklus(1..256)
7
#define PWM_PORT      PORTB              // Port für PWM
8
#define PWM_DDR       DDRB               // Datenrichtungsregister für PWM
9
#define PWM_CHANNELS  8                  // Anzahl der PWM-Kanäle
10
11
// ab hier nichts ändern, wird alles berechnet
12
13
#define T_PWM (F_CPU/(PWM_PRESCALER*F_PWM*PWM_STEPS)) // Systemtakte pro PWM-Takt
14
//#define T_PWM 1   //TEST
15
16
#if ((T_PWM*PWM_PRESCALER)<(111+5))
17
    #error T_PWM zu klein, F_CPU muss vergrössert werden oder F_PWM oder PWM_STEPS verkleinert werden
18
#endif
19
20
#if ((T_PWM*PWM_STEPS)>65535)
21
    #error Periodendauer der PWM zu gross! F_PWM oder PWM_PRESCALER erhöhen.   
22
#endif

Vielleicht solltest du dich noch eine GEHÖRIGE Weile mit den wenn gleich 
etwas schnöden Grundlagen von C beschäftigen, bevor du die großen, 
glamourösen Projekte angehst. Ein Flugkaptän, der nicht mal weiß was 
Knoten und Meilen sind, ist irgendwie peinlich.

von Joe F. (easylife)


Lesenswert?

Chris D. schrieb:
> Da ich an einem MSP430G2553 3 P-Channel Mosfets betreiben will muss das
> Signal invertiert sein.

Die einfachste Methode wäre evtl. im Geiste die PWM Werte einfach anders 
herum zu verwenden.
0 wäre dann die hellste Stufe, 255 die dunkelste.
Dann brauchst du bezügl. der Investierung am Programm gar nichts ändern.

von Chris D. (d3_m0n)


Lesenswert?

Es ist immer die selbe Leier wenn man nicht 100% alles weiß und mal eine 
Frage stellt... ich habe nicht nach einer Antwort ohne Erklärung 
gefragt...

Naja und bekommen habe ich Hohn und Spott.

Hätte ich nach Bananen und Äpfeln gefragt würde ich das ganze ja 
verstehen aber gleich als dämlich bezeichnet zu werden...

Da bekomme ich richtigen Hass!

von Christian S. (roehrenvorheizer)


Lesenswert?

Von mir hast Du einen Link bekommen, alles andere nicht.

MfG

von Chris D. (d3_m0n)


Lesenswert?

Ja sry dich habe ich natürlich nicht damit gemeint:-)

Achja habe eben festgestellt das die antwort von Falk nicht richtig 
ist...

aus 00000XXX wird 11111XXX er stellt mir die nicht pwm pins auch um..

von Chris D. (d3_m0n)


Lesenswert?

möchte mir jetzt einer helfen...

https://www.mikrocontroller.net/articles/Soft-PWM

soll nur mit 3 kanälen auf einem port laufen und mir nicht die andere 
pins auch umstellen...

die invertierung ignoriere ich mittlerweile...

lg

: Bearbeitet durch User
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.