Hallo Ich will ein Rechtecksignal mit meinen PIC16F690 einlesen und dann den High Pegel bereich um einen bestimmten bereich verlängern. Das große problem ist das ich nicht weiß wie ich ein PWM Programmier und auch nicht wie ich das rechtecksignal einlesen soll. Das einzige was ich weiß ist wie man einen ADC Pogrammiert ich will das ganze in C programmieren Danke
Gast
#2385916
Hallo Marcel,
um das beschriebene Problem einfach zu lösen würde ich einfach mit einem
PIN das Signal Digital einlesen, wenn es auf high geht setzt Du einen
Digitalen Ausgang auf high. Je nach gewünschter Pulsverlängerung machst
Du den Ausgang Abfallverzögert zB 1ms. Den PWM Ausgang brauchst Du für
diese Anwendung nicht unbedingt.
Codemässig könnte das etwa so aussehen (ka wie der Syntax genau ist):
1
IF (PIN_SIGNAL == 1) THEN
SET PIN_OUTPUT HIGH
WHILE (PIN_SIGNAL==1)
WEND
PAUSE_1ms
SET PIN_OUTPUT LOW
GOTO 1
Gast
#2385924
Wozu dafür ein Mikrocontroller? Warum nicht einfach ein nachtriggerbares Monoflop, z.B. 74HC123?
Gast
#2385966
Also das sähe etwa so aus (der Einfachheit halber ein Pin als "Eingang" und einer aus "Ausgang" definiert..)
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
Gast
#2385978
ah.. der counter sollte noch zurückgesetzt werden.. also vor
1 | |
schreibst du einfach noch ein
1 | |
.. natürlich nach der Klammer -> }
Gast
#2386021
hallo dave, wenn ich deinen code richtig interpretiere bin ich nicht einverstanden: dieser generiert einen Puls mit bestimmter Länge sobald am Eingang eine 1 ist. Es geht aber darum einen bestehenden Puls zu verlängern. Ausserdem macht in der Schlaufe "while counter > x" keinen Sinn wenn Du counter erhöhst, ausser Du wartest auf einen Überlauf der variable counter. Grüsse martin
Gast
#2387038
Ok ignorier das bitte, das sollte natürlich counter < x heissen. Martin schrieb: > dieser generiert einen Puls mit bestimmter Länge sobald am Eingang eine > 1 ist. Es geht aber darum einen bestehenden Puls zu verlängern. Eingang: ____|--|_____|--|_____|--|_____|--|_____|--|_____|--|_____ Ausgang: ____|----|___|----|___|----|___|----|___|----|___|----|___ Genau das, was es sollte, oder nicht? Ausser natürlich, dass Signal, welches er "verlängern" will ist kein digitales aber dann macht es auch keinen Sinn mit einem µC zu arbeiten.. (tut es sowieso nicht meiner Ansicht nach.) Ein bisschen mehr Infos vom Threadsteller wären schon ganz hilfreich.
danke für die vielen antworten. das programm ist schon mal ein anfang ich würd nur gerne das signal immer um z.b 10% verlängern. danke
Gast
#2387141
Ist es denn ein regelmässiges Signal? Oder sind es unterschiedliche Rechtecke?
unterschiedliche es ändert sich sowohl die frequenz als auch die länge des high pegels daher kann ich keine feste zeit programmieren
Gast
#2387148
marcel ettenauer schrieb: > das programm ist schon mal ein anfang ich würd nur gerne das signal > immer um z.b 10% verlängern. Heißt das jetzt, dass zuerst die Pulslänge ausgemessen werden soll und daraus dann berechnet werden muß, wie lang die Verlängerung ist? Oder sind alle Pulse gleich lang und man kann eine fest Zeit als Verlängerung ansetzen. Vielleicht verrätst du mal, in welchem Zeitbereich sich das ganze abspielt? ns .. s .. min .. d???
Gast
#2387187
Ja auch in diesem Fall kannst du auf PWM verzichten denke ich.. Das Programm wird dadurch leicht länger. Weisst du ca. wie du so etwas zu programmieren hast?
Gast
#2387214
Und weil ich gerade Zeit hatte:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
Zur Erklärung: Die Variable x dient der Einstellung der Verlängerung.. willst du beispielsweise 10% Verlängern gibst du eine 10 ein... willst du 20% verlängern gibst du eine 5 ein etc.. Ist das so verständlich?
Gast
#2388558
Hallo, das gefällt mir nicht: Ausgang wird nicht zurückgesetzt beim Einstellen der Verlängerung müssen zwei Dinge beachtet werden: -Der Prozessor hat für das abarbeiten der Schleife wo der Zähler erhöht wird kaum genau gleich lang hat wie für die Schleife wo er verkleinert wird. -Wenn der Zähler durch x geteilt wird weiss ich nicht was mit dem Rest der Division geschieht.
Gast
#2388567
Na dann..
1 | |
am Ende des Programms. :P Nächstens: Hat der Prozessor länger eine Variable raufzuzählen als runterzuzählen? Martin schrieb: > -Wenn der Zähler durch x geteilt wird weiss ich nicht was mit dem Rest > der Division geschieht. Wie soll ich das verstehen?
Gast
#2388608
Hallo Dave,
Hat der Prozessor länger eine Variable raufzuzählen als runterzuzählen?
--> Nein, aber deine Schleifen sind unterschiedlich
Wenn der Zähler durch x geteilt wird weiss ich nicht was mit dem Rest
der Division geschieht.
--> Ein beispiel: Der Zähler steht nach dem Signal auf 13
dann kommt Zähler = Zähler / 10; (annahme x=10)
ich glaub nicht das der Block:
while (Zähler > 0){ (Zähler =1,3)
Ausgang =1;
Zähler --; }
saubere Resultate liefert
Grüsse
Gast
#2388617
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
Das mit dem Rest der Division ist unter Umständen gar nicht zu beachten oder nicht? Dazu müsste man ja erstmal wissen, wie schnell sein Signal ist. Resp. wie hoch die Frequenz ist.
Gast
#2388730
Hallo, ich weiss ich bin nervig ^^ Die erste IF Schleife ist glaub unnötig? Die zweite IF Schleife unnötig mit Potenzial für Fehler? Grüsse
Gast
#2389016
Ja dann lässt du sie weg :)
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.