Hi ich will einen Puls variabler länge in Mikrosekunden bereich generieren und das aus Windows über python. Wie mache ich das am geschicktesten? Ich habe mir so ein USB Relay geholt. Aber da bin ich eher in Millisekunden Bereich. Danke
:
Mat. K. schrieb: > Wie mache ich das am geschicktesten? Du schließt einen Microcontroller mit entsprechender Software und Schnittstelle an, und gibst diesem via Python die Anweisung, den Puls zu generieren.
Es geht nicht. Alleine schon die (Zwangs-)Latenzen der Schnittstellen und des Betriebssystems verhindern so etwas. Da hier aber noch einige Salamischeiben runtergeschnitten werden müssen, werfe ich einfach mal als externe Lösung einen externen, über den PC angesteuerten Funktionsgenerator in den Raum. Ob das jetzt eine Lösung von NI oder Agilebnt/Keysight ist, kann die Salami entscheiden. Wurstfachverkäufer
Was ist entscheidend? Genaue Pulslänge oder genauer Pulszeitpunkt? Wie genau muss es dann sein? Wie oft muss sich der Puls wiederholen? Fragen über Fragen…
Hi was muss ich tun: ich habe eine STM32 PCB und habe einen PIN auf external interrupt geschlatet. Für testzwecke will ich auf diesem Pin PC gesteuert Pulse geben und einen Interrupt auslösen. Aktuell generiere ich diesen Signal über einen USB Relay. https://www.amazon.de/HALJIA-Module-Control-Switch-Intelligent/dp/B075F6J6WL Über python mache ich kurz den relay auf/zu und generiere damit einen Puls. Das schmeisst dann den Interrupt in mein STM32 an. Aber ein USb Relay erzeugt keinen saubereb Puls und der ist auch viel zu lang. Was meint ihr?
> Über python mache ich kurz den relay auf/zu und generiere damit > einen Puls. Auf jedenfall prellt dein Relais und erzeugt vermutlich gleich mehre IRQs. Olaf
Löt das Relais aus und steuere ein Monoflop an, das Dir einen sauberen Puls macht.
Nimm einen beliebigen µC, z.B.: Arduino xxx mit USB-Schnittstelle
Du könntest auch ein UM245R von FTDI nehmen und als Signal das WR or RD anzapfen. https://www.mouser.de/ProductDetail/FTDI/UM245R?qs=Xb8IjHhkxj4TWAlYgWlsig%3D%3D&mgh=1&vip=1&gclid=EAIaIQobChMIyoyTkcS0-gIVxvV3Ch2T1gh0EAQYAiABEgK18fD_BwE
erzeuge den Takt auf einem anderen Pin und brücke die solange..
Ein USB - Digital Wandler, z.B FTDI. Gibsts z.B bei Denkovi. Nach USB hast Du z.B ein RS232 Signal. Damit dann per Terminal, oder eben dann in VBA programiert einen NE555 triggern, der die eingstellte Impulsbreite hat. - fertig
Kann man Windows überhaupt echtzeitfähig machen? Unter Linux sollte es gehen. Mit spezieller Realtime Distro.
Dieter D. schrieb: > Kann man Windows überhaupt echtzeitfähig machen? Unter Linux sollte es > gehen. Mit spezieller Realtime Distro. Wozu sollte der OP das brauchen? Die wirkliche Arbeit macht so oder so NICHT Windows und der PC sondern externe Hardware. Das hier war schon der richtige Tip. Einfach, preiswert und schnell. Beitrag "Re: wie erzeuge ich von einem windows laptop aus einen 1 mikrosekunden puls mit 3.3 Volt"
Dieter D. schrieb: > Kann man Windows überhaupt echtzeitfähig machen? Unter Linux > sollte es > gehen. Mit spezieller Realtime Distro. Auch mit echtzeit-Linux kann man keine Mikrosekunden-Pulse erzeugen, und selbst RTOSe für Mikrocontroller bieten so eine Auflösung nicht. Daher muss man solche Pulse über einen Timer/PWM-Kanal erzeugen, das können praktisch alle Mikrocontroller. Die Frage ist also: Wie kritisch ist das "wann", also wie viel Zeit darf vergehen von der "Anfrage" aus der PC-Software bis zur tatsächlichen Erzeugung des Pulses? Wenn das nicht allzu kritisch ist, ist ein Mikrocontroller mit USB-Anbindung wahrscheinlich die einfachste Lösung. z.B. meine USB-Implementation nehmen, und in der Behandlung von SETUP-Paketen die beispielhafte Ansteuerung der LEDs durch ein Starten eines Timers ersetzen: https://github.com/Erlkoenig90/f1usb/blob/e4c59124cb3ee5183861591dd7ed84101c703790/src/usb.cc#L602 Die STM32-Timer haben einen "One-Pulse-Mode", mit dem man bequem einzelne Pulse abgeben kann. An diese Stelle die entsprechenden 3 Zeilen einfügen sei als Übung überlassen :) Hier ist zu sehen wie der Befehl vom PC aus gesendet wird: https://github.com/Erlkoenig90/usbclient/blob/master/src/main.cc#L177 Als wValue (hier: "ledData") könnte man sogar noch die gewünschte Pulslänge übertragen (16bit-Wert). Das funktioniert dann u.a. mit den weit verbreiteten billigen STM32F103-Bluepill-Boards.
Toll was hier wieder geboten wird. Kaum vergehen Minuten schon wird von Linux geredet was an der Anforderung des TO voll vorbeigeht: Mat. K. schrieb: > ich will einen Puls variabler länge in Mikrosekunden bereich generieren > und das aus Windows über python. Dass die Anforderungen viel zu ungenau sind ist klar, und der TO ist schon längst wieder eingepennt oder hat sich verzogen weil er das alles eigentlich gar nicht wollte. Wenn er wirklich was wollte würde er sich m.M. sehr kurzfristig wieder melden. ... Windows über python .... Kommandozeile über Visual Basic ...
Mat. K. schrieb: > was muss ich tun: ich habe eine STM32 PCB und habe einen PIN auf > external interrupt geschlatet. Für testzwecke will ich auf diesem Pin PC > gesteuert Pulse geben und einen Interrupt auslösen. > Aktuell generiere ich diesen Signal über einen USB Relay. > https://www.amazon.de/HALJIA-Module-Control-Switch-Intelligent/dp/B075F6J6WL > Über python mache ich kurz den relay auf/zu und generiere damit einen > Puls. Das schmeisst dann den Interrupt in mein STM32 an. > Aber ein USb Relay erzeugt keinen saubereb Puls und der ist auch viel zu > lang. > Was meint ihr? Ich meine, dass Dir mit einem Kasterl mit zwei AA-Zellen und einem sauber entprelltem Taster besser gedient wäre. Der Entprellung würde ich noch ein 1us-Monoflop nachschalten. Wenn ich mir sowas basteln wollte, würde ich den zeitbestimmenden Kondenser austauschbar machen und Masse/0V sowie die Signale in original und invertiert nach außen legen.
Der PC kann den Puls als UART seriell. Heute kaum selber, aber also USB zu RS232. Z.B. mit 1 MBaud und Zeichen von 0x00 bis 0xff kannst Du 1..9 µs-Pulse erzeugen. Je nach Ausführung brauchst Du dann noch eine Z-Diode, einen Spannungsteiler oder 2 Climb-Dioden an Deine Versorgung um daraus 0/3V zu machen.
A. S. schrieb: > Der PC kann den Puls als UART seriell. Heute kaum selber, aber also USB > zu RS232. Z.B. mit 1 MBaud und Zeichen von 0x00 bis 0xff kannst Du 1..9 > µs-Pulse erzeugen. Und wann genau soll dein Puls daherkommen? Nach einer msec oder nach zweien? Ist ja nicht so wichtig, gell?
Beitrag #7204777 wurde von einem Moderator gelöscht.
Mat. K. schrieb: > ich will einen Puls variabler länge in Mikrosekunden bereich generieren > und das aus Windows über python. Wieviele Schritte? Von 1T bis 10T gibts per TxD eines FT232 bei passender Baudrate.
A. S. schrieb: > Z.B. mit 1 MBaud und Zeichen von 0x00 bis 0xff kannst Du 1..9 > µs-Pulse erzeugen. Du hast das Parity-Bit vergessen.
Beitrag #7204784 wurde von einem Moderator gelöscht.
Beitrag #7204786 wurde von einem Moderator gelöscht.
Jack V. schrieb: > Du schließt einen Microcontroller mit entsprechender Software und > Schnittstelle an, und gibst diesem via Python die Anweisung, den Puls zu > generieren. Der Bus Pirate könnte sich vielleicht dafür eignen. http://dangerousprototypes.com/docs/Features_overview
:
Bearbeitet durch User
Wenn eine manuelle Bedienung OK wäre, dann nimm so ein Timer Modul: https://de.aliexpress.com/item/32839042221.html Da kannst du einstellen, wie lang der Impuls sein soll, wie viele Impulse zu haben willst und wie lang die Pause dazwischen sein soll. Per Tastendruck startest du dann den Durchlauf. Die Bedienung ist ein bisschen Tricky, für einige Funktionen muss man Tasten gedrückt halten. Ich bin damals aus der Beschreibung keines Händlers nicht schlau geworden, hatte aber eine bessere (mit Bildern für Analphabeten) im Netz gefunden.
:
Bearbeitet durch User
Jeden Tag wird's schlimmer schrieb im Beitrag #7204786: > Auch unter Windows ist eine Baudrate ein Baudrate! Und der 'Puls', wenn man es denn so nennen will, der aus 0x00 bis 0xff und dem unvermeidlichen Start und Stopbit zusammengefriggelt ist, kommt irgendwann in den nächsten xxx ms, nachdem das Script sendet, der virtuelle Com Port Treiber das zu einer USB Übertragung zusammenbastelt und der USB-Uart das wieder zu einer Pulsfolge am TX gewandelt hat. xxx ms ist nicht zuletzt davon abhängig wann das OS denn mal wieder einen Zeitschlitz zuteilt, was gerade im Hintergrund los ist und mit welcher Prio das läuft, und jittert mit mehreren ms vor sich hin. >Jeden Tag wird's schlimmer Ja, und die Vollidioten sind immer besonders laut.
Mein Modul war das zweite (mit 1x MOSFET Ausgang) auf https://de.aliexpress.com/item/1005002413506830.html Du brauchst aber eins mit Logik Ausgang
Hi Vielen Dank. Ich habe aus eurer Diskussionen alle Probelme die es so geben kann verstanden und habe mich für ein Arduino board mit USB entschieden. Danke
Wenn du einen STM32 hast hat der doch genug Timer die das locker können. PWM out und one pulse mode setzen und über einen externen Taster starten. Wenn du den TIM1 nimmst kannst du zusätzlich den repetition zähler benutzen und 1.. 255 impulse ausgeben. Die Zeiten kannst du fest vorgeben oder über Uart/USB einstellbar machen. Das geht schneller und genauer wie mit dem PC.
(prx) A. K. schrieb: > Du hast das Parity-Bit vergessen. Nicht vergessen, aber es überfordert einen Anwender, der noch nie was mit Sios gemacht hat (sonst wüste er das), für 10 aufeinanderfolgende Bits dann die Sio umzustellen (auf ODD Parity) und 0xff zu senden. Und sich dann zu überlegen, bei welchen anderen Werten er nicht zurückschalten muss (bei allen ungeraden µs-Impulsen, also 8, 6, 4, 2)
Beitrag #7204978 wurde von einem Moderator gelöscht.
Beitrag #7204986 wurde von einem Moderator gelöscht.
Falk B. schrieb: > Dieter D. schrieb: >> Kann man Windows überhaupt echtzeitfähig machen? Unter Linux sollte es >> gehen. Mit spezieller Realtime Distro. > > Wozu sollte der OP das brauchen? Die wirkliche Arbeit macht so oder so > NICHT Windows und der PC sondern externe Hardware. Das hier war schon > der richtige Tip. Einfach, preiswert und schnell. > > Beitrag "Re: wie erzeuge ich von einem windows laptop aus einen 1 mikrosekunden puls mit 3.3 Volt" Ja fein mein kleiner da hast du ja mal wieder erfolgreich gezeigt wie schlau du bist. Dass man das mit extra uC nicht braucht weiß sogar meine Oma du Leuchte.
Niklas G. schrieb: > Dieter D. schrieb: >> Kann man Windows überhaupt echtzeitfähig machen? Unter Linux >> sollte es >> gehen. Mit spezieller Realtime Distro. > > Auch mit echtzeit-Linux kann man keine Mikrosekunden-Pulse erzeugen, und Was wäre damit möglich?
Weil es heut eh nur regnet, hier eine Software für den STM32F103RB mit der das geht. Sie funktioniert mit dem STM32-Olimexino und sollte auch mit den diversen STM32F103-Bluepillboards gehen. Pin PC12 wird verwendet um den Pullup der USB-Verbindung zu aktivieren (nur auf dem Olimexino nötig, bei den BluePill-Boards offen lassen). Das Pulssignal wird auf PA1 ausgegeben. Das Gerät meldet sich am PC als WinUSB Device an, somit ist keinerlei Treiber-Installation/Konfiguration nötig. Sollte ab Win8 direkt funktionieren. Die Ansteuerung erfolgt über den Control EP 0, über Pakete mit bmRequestType=0x40, bRequest=1, wValue=Periodendauer in μs. Man sollte die Befehle nicht schneller senden als der Puls dauert (also ggf. ein Sleep einbauen), sonst verheddert sich der Timer. Über LibUSB kann man von Linux/Windows aus dann Puls-Befehle senden. Ein Beispiel für Python ist angehängt. Zuvor müssen die Abhängigkeiten installiert werden mit:
1 | python -m pip install -r requirements.txt |
Pulsdauern sind im Bereich 1-65534. Der Puls wird mit 1μs versetzt erzeugt, mir ist auf die Schnelle keine bessere Lösung eingefallen wie man im One Pulse Mode danach wieder automatisch auf "Low" geht (PWM Mode 2). Ich habe gerade kein Oszilloskop zur Hand, mag jemand prüfen ob die Pulslänge exakt richtig ist (Off-By-One-Errors bei der PWM-Konfiguration...)? Dieter D. schrieb: > Was wäre damit möglich? Wahrscheinlich Zeiten in Millisekunden-Bereich, außer man nutzt eben eine Timer-Peripherie.
:
Bearbeitet durch User
Hab jetzt mit dem Oszilloskop festgestellt dass natürlich ein Off-By-One-Error drin war. Im Anhang ist eine aktualisierte Version welche den Puls µs-genau ausgibt. Ich habe außerdem einen 2. Pakettyp hinzugefügt (bRequest=2) welcher das ACK erst nach Erzeugen des Pulses sendet, dadurch kehrt die Sende-Funktion auf dem PC auch erst danach zurück, sodass beim Senden weiterer Pulse keine Überschneidungen auftreten. Das entsprechend aktualisierte Python-Script ist im Anhang, über den "wait"-Parameter der send_pulse-Funktion kann man das nutzen. Etwas tricky wird der Timeout entsprechend gesetzt, damit es nicht zu früh abbricht. Den Sourcecode hab ich bei GitHub hochgeladen: https://github.com/Erlkoenig90/f1usb/tree/pulsegen
Mat. K. schrieb: > ich will einen Puls variabler länge in Mikrosekunden bereich generieren > und das aus Windows über python. > Wie mache ich das am geschicktesten? Besorg die einen USB-TTL-Wandler (vielleicht hast du ja schon einen), und dann: <code> import serial import time com = serial.Serial("COM4",1000000) while True: com.write(b'\xFF') time.sleep(0.001) </code> Dies erzeugt auf TXD Pulse mit 3.3V Hub und 1us Länge (bei mir min 1.008us, max 1.024us, mean 1.015us, sigma 2.2ns). Der Puls entspricht dem Startbit, die acht Startbits und das Stopbit sind im Ruhezustand. Allerdings sind die Pulse a) negativ (der Ruhezustand ist 3.3V und der Puls ist 0V) und b) nicht wirklich regelmäßig (die Zeit zwischen den Pulsen schwankt min 3.2ms, mean 15ms, max 17.8ms, sigma 490us). Die Pulslänge kann man mit der Baudrate anpassen. LG, Sebastian
Sebastian W. schrieb: > Allerdings sind die Pulse a) negativ (der Ruhezustand ist 3.3V und der > Puls ist 0V) Kann man leicht in der Konfiguration des Chips ändern, wenn er von FTDI ist. Und selbst wenn nicht, Inverter wurden schon erfunden.
Falk B. schrieb: > Kann man leicht in der Konfiguration des Chips ändern, wenn er von FTDI > ist. Falk, wie geht das? Meiner ist von FTDI, der Treiber unter Windows 10 ist FTDI 2.12.36.4 von 05.07.2021, und ich finde diese Konfigurationsmöglichkeit nicht auf Anhieb. In den Details der Treibereigenschaften sind allerdings einige kryptische UUIDs ... LG, Sebastian
Sebastian W. schrieb: >> Kann man leicht in der Konfiguration des Chips ändern, wenn er von FTDI >> ist. > > Falk, wie geht das? Mit einem extra Programm, FT_PROG https://ftdichip.com/utilities/
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.