Blinker

From ThorstensHome
(Redirected from Das Elektronik Buch/Blinker)
Jump to: navigation, search

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.