Difference between revisions of "Blinker"
Line 1: | Line 1: | ||
− | Für [[das Elektronik Buch]] möchte ich einen Blinker bauen. | + | Für [[das Elektronik Buch]] möchte ich einen Blinker bauen. Ich nehme die Platine, schließe den DTR Port an das Experimentierfeld an, dort wird der Strom über eine LED an den GND Port zurück geschickt. Dann kommt der Software-Teil: |
+ | |||
So schnell wie möglich blinken: | So schnell wie möglich blinken: | ||
<pre> | <pre> | ||
Line 52: | Line 53: | ||
./a.out | ./a.out | ||
− | Dauert immer noch 4 Sekunden. | + | Dauert immer noch 4 Sekunden. Meine Vermutung ist, dass das Umschalten des DTR Ports schon Hardware-mäßig eine gewisse Zeit dauert. TX umzuschalten, dauert dagegen kürzer, da es ja im Laufe der Jahre immer mehr optimiert wurde. Vergesst nicht, die serielle Schnittstelle wurde ursprünglich gebaut, um Telefone zu bedienen. |
+ | |||
+ | Wenn ihr so schnell "blinken" wollt, dass ihr die LED "dimmen" könnt, muss ein anderer Ansatz ran. Eine Lösung beschreibe ich unter [[Dimmer]]. |
Latest revision as of 08:47, 5 April 2020
Für das Elektronik Buch möchte ich einen Blinker bauen. Ich nehme die Platine, schließe den DTR Port an das Experimentierfeld an, dort wird der Strom über eine LED an den GND Port zurück geschickt. Dann kommt der Software-Teil:
So schnell wie möglich blinken:
import serial,glob for devices in glob.glob("/dev/ttyUSB*"): garbage=42 # appease python conn = serial.Serial(devices, baudrate=9600) while True: conn.setDTR(False) conn.setDTR(True)
Ok, das flackert... Also mal ausprobiert, wie lange 1000 Schaltoperationen auf DTR dauern:
import serial,glob,time for devices in glob.glob("/dev/ttyUSB*"): garbage=42 # appease python conn = serial.Serial(devices, baudrate=9600) print time.time() for i in range(1,1000): conn.setDTR(False) conn.setDTR(True) print time.time()
Dauern 4 Sekunden bei mir... das ist zu lange. Probieren wir es in C.
blink.c
#include <sys/ioctl.h> #include <fcntl.h> int main() { int port, i, status1, status2; port=open("/dev/ttyUSB0", O_RDWR|O_NOCTTY|O_NONBLOCK); ioctl(port, TIOCMGET, &status1); status2=status1; status1 |= TIOCM_DTR; status2 &= ~TIOCM_DTR; for (i=1;i<1000;i++) { ioctl(port, TIOCMSET, &status1); ioctl(port, TIOCMSET, &status2); } }
Compilieren mit
gcc blink.c
Ausfuehren mit
./a.out
Dauert immer noch 4 Sekunden. Meine Vermutung ist, dass das Umschalten des DTR Ports schon Hardware-mäßig eine gewisse Zeit dauert. TX umzuschalten, dauert dagegen kürzer, da es ja im Laufe der Jahre immer mehr optimiert wurde. Vergesst nicht, die serielle Schnittstelle wurde ursprünglich gebaut, um Telefone zu bedienen.
Wenn ihr so schnell "blinken" wollt, dass ihr die LED "dimmen" könnt, muss ein anderer Ansatz ran. Eine Lösung beschreibe ich unter Dimmer.