Gast
#1098232
Hier das erste Beispielprogramm, meine Frage kommt nach dem Programm.
Auf dem PWM- Kanal 3 soll am Ausgang P7.3 ein PWM Signal mit der
Frequenz 500Hz ausgegeben werden, solange P7.0 1 ist. Eine
angeschlossene Last soll mit 25% angesteuert werden wenn der Anschluss
P7.1 1 ist, sonst mit 75%.
fosz=20MHz Betriebsart: Edge Aligned
Hier meine Lösung:
PP3 20000KHz/0,5KHz=40000
PW3= 25% =1:3=30000 75%=3:1=10000 Vergleichswert=
10000
PWMCON0=0x8;
PWMCON1=0x8;
Void main()
{
DP7_3=1;
PP3=40000;
PWMCON0=0x8;
PWMCON1=0x8;
While(P7_0)
{
if (P7_1) PW3=30000;
else PW3=10000;
}
}
Jetzt kommt eine Aufgabe von meinem Prof. wo ich die Musterlösung
überhaupt nicht nachvollziehen kann und denke, dass er da irgendetwas
durcheinander gehauen hat mit Timern. Ich hätte die Aufgabe so gelöst
wie das obere Beispiel. Und nicht mit Vergleichswerten wie er dies getan
hat, da die Werte der Schattenregister doch nie erreicht werden, da
PP3=25536 kleiner ist als diese. Lasse mich auch gerne eines besseren
belehren
Das z.b. beide Aufgabenlösungen richtig sind.
Auf dem PWM- Kanal 3 eine 80c167 soll am Ausgang P7.3 ein PWM Signal
inder der Betriebsart (Edge-Aligned) mit der Frequenz 1Hz ausgegeben
werden, solange P7.0 1 ist. Eine angeschlossene Last soll mit 25%
angesteuert werden wenn der Anschluss P7.1 0 ist, sonst mit 50%.
fosz=40MHz
Muster Lösung:
PWMCON0=8;
PWMCON1=8;
Eingangsfrequenz 40000KHz
Grundfrequenz 1KHz
40000:1=40000
Anfangswert: 65536-40000=25536
PP3=25536
Vergleichswerte: 50% 65536-20000=45536;
25% 65536-10000=55536;
Void main()
{
DP7_3=1;
PP3=25536;
PWMCON0=0x8;
PWMCON1=0x8;
While(P7_0)
{
if (P7_1) PW3=45536;
else PW3=55536;
}
}