One-Shot Counter Reset

Umgang mit PSoC Logikkomponenten
Antworten
Thomas Barth
Administrator
Beiträge: 89
Registriert: So 5. Apr 2015, 21:46
Wohnort: Frankfurt/M
Kontaktdaten:

One-Shot Counter Reset

Beitrag von Thomas Barth » Do 10. Mär 2016, 12:07

Ich habe eine, eigentlich, einfache Aufgabe die ich einfach nicht in den Griff bekomme...

Ich möchte einen Pin für eine gewisse Zeit High setzen. Dieser Zeitraum soll mit Hardware im One-Shot Modus realisiert werden, d.h. ich trigger die Hardware einmal aus Software, der Pin bleibt für die in der Hardware konfigurierten Zeit high und wartet danach auf den nächsten Trigger aus der Software.

Der Ansatz meinerseits bisher:
Counter-Modul, TC an Pin, auf one-shot setzen und eine Clock dran.

Funktioniert auch.... genau ein mal. Bekomme es nicht hin das Modul in Software so rückzusetzen das er den nächsten Shot ausführt.

Parallel auch hier, mal gucken wo es zuerst gelöst wird:
http://www.cypress.com/forum/psoc-5-dev ... untertimer

Code: Alles auswählen

P_M_DERIVE(T_ALG.E_BH) := UC_16S_EN_16NS (TDB.T_ENTIER_16S
                                   ((1.0/C_M_LSB_BH) *
                                   G_M_INFO_DERIVE(T_ALG.E_BH)))

Reiner W.
Beiträge: 112
Registriert: Di 7. Apr 2015, 11:43

Re: One-Shot Counter Reset

Beitrag von Reiner W. » Do 10. Mär 2016, 15:00

Hallo Thomas,
Funktioniert auch.... genau ein mal. Bekomme es nicht hin das Modul in Software so rückzusetzen das er den nächsten Shot ausführt.
Hatte das mal mit einem UDB Timer gemacht. Wichtig war, die Komponente nach Timerablauf zu resetten (tc an reset).
Wenn du ihn allerdings per Software resetten willst, kannst du vlt. ein Control Register zwischenschalten.
Ist aus einem alten Project. Hab deshalb die Details nicht mehr so genau im Kopf. Zumal ich es dann rein in SW realisiert habe (Ressourcen-Mangel).
Falls du nicht weiter kommst, kann ich noch mal genauer nachschauen.

Gruß Reiner
OneShot.png
OneShot.png (333.89 KiB) 5825 mal betrachtet
Reiner W.

Thomas Barth
Administrator
Beiträge: 89
Registriert: So 5. Apr 2015, 21:46
Wohnort: Frankfurt/M
Kontaktdaten:

Re: One-Shot Counter Reset

Beitrag von Thomas Barth » Do 10. Mär 2016, 15:56

Hallo Reiner,

vielen Dank für deine Ideen!
Reset(bzw. reload Counter) bei TC kann man als Option in der Konfiguration einstellen, habe ich auch angehakt.
Das mit dem Control-Reg hatte ich auch schon in Betracht gezogen aber ich hoffe doch das es möglich ist das auch ohne externe Beschaltung zu lösen!

Bastel gerade einen CANopen-Stack und möchte die beschriebene Funktionalität eigentlich nur als Aktivitätsanzeige für receive/transmit/error LEDs (Ausschaltverzögerung um in SPS zu sprechen ;) ).
Ist daher nur ein Nebenkriegsschauplatz aber werde bei Gelegenheit deine Ansätze testen (derweilen hoffe ich auf einen einfachen call der den reset macht).


Liebe Grüße,
Thomas

Code: Alles auswählen

P_M_DERIVE(T_ALG.E_BH) := UC_16S_EN_16NS (TDB.T_ENTIER_16S
                                   ((1.0/C_M_LSB_BH) *
                                   G_M_INFO_DERIVE(T_ALG.E_BH)))

Reiner W.
Beiträge: 112
Registriert: Di 7. Apr 2015, 11:43

Re: One-Shot Counter Reset

Beitrag von Reiner W. » Do 10. Mär 2016, 20:29

Hallo Thomas,

da fällt mir ein, hatte vor einiger Zeit noch ein ähnliches Problem mit dem PSoC5. Das war ein Kantentaster für meine CNC. Der Trigger (Signal an einem Eingang) sollte einen definierten 100ms Impuls an einem Ausgang ausgeben. Also sozusagen einen nicht retriggerbaren Monoflop. Hatte das damals so gemacht:
MonoFlop.png
MonoFlop.png (124.55 KiB) 5822 mal betrachtet

habs grad mal extrahiert und getestet. Läuft mit einem nackten 059er Riegel.
NRT_Moniflop.cyprj.Archive01.zip
kleines Testbeispiel
(1.32 MiB) 212-mal heruntergeladen
Gruß Reiner
Reiner W.

Thomas Barth
Administrator
Beiträge: 89
Registriert: So 5. Apr 2015, 21:46
Wohnort: Frankfurt/M
Kontaktdaten:

Re: One-Shot Counter Reset

Beitrag von Thomas Barth » Mo 14. Mär 2016, 22:07

Hallo Reiner,

erstmal vielen Dank für deine Antwort!

Habe es jetzt ganz anders gelöst:
Unbenannt.PNG
Unbenannt.PNG (49.98 KiB) 5747 mal betrachtet
Zwar kann ich damit nicht mehrere LEDs "gleichzeitig" ansteuern, aber das ist ja auch keine hochgenaue Anzeige, sondern ein Indikator.

Code: Alles auswählen

P_M_DERIVE(T_ALG.E_BH) := UC_16S_EN_16NS (TDB.T_ENTIER_16S
                                   ((1.0/C_M_LSB_BH) *
                                   G_M_INFO_DERIVE(T_ALG.E_BH)))

Reiner W.
Beiträge: 112
Registriert: Di 7. Apr 2015, 11:43

Re: One-Shot Counter Reset

Beitrag von Reiner W. » Mo 14. Mär 2016, 22:14

Na super. Gut zu wissen, wenn man den Timer mal per SW triggern muss.

Gruß Reiner
Reiner W.

Antworten