PT331C-Fototransistor mit Impedanzwandler betreiben

Der Everlight Opto PT331C ist ein mit 0,36€ (Stand: Oktober 2017 bei Conrad Elektronik) sehr günstiger Fototransistor für nahes UV-, sichtbares und nahes Infrarot-Licht (ca. 200-1200 nm). Das Absorptionsmaximum liegt etwa bei 800-900 nm.

Schließt man eine Spannung in Sperrrichtung des Fototransistors an, so beginnt ein lichtabhängiger Strom durch den Transistor zu fließen. Um den lichtabhängigen Stromfluss als Spannung mit einem A/D-Wandler auslesen zu können, z.B. mit einem Mikrocontroller, schließt man an den Kollektor des Fototransistors (äußerlich an der Abflachung des Gehäuses zu erkennen) den Pluspol der Spannungsquelle und an den Emitter einen Widerstand an, der auf der anderen Seite mit dem Minuspol der Spannungsquelle verbunden ist. Gemäß dem Ohmschen Gesetz ist dann der Spannungsabfall über dem Widerstand proportional zum Stromfluss durch den Fototransistor. Bei einer Spannung von 3.3 Volt hat sich ein Widerstandswert von 12 kOhm als geeignet erwiesen, um Tageslicht zu quantifizieren. Der Widerstand kann aufgrund des geringen Fotostroms allerdings nicht direkt mit dem Eingang des A/D-Wandlers verbunden werden. Ein Impedanzwandler muss zwischengeschaltet werden, um zu vermeiden, dass ein das Messergebnis verfälschend großer Anteil des Stroms in den A/D-Wandler anstatt durch den Messwiderstand fließt. Ein Experiment mit einem LM358 war erfolgreich.

Messaufbau: Der Oszilloskop-Tastkopf ist am Ausgang des Operationsverstärkers angeschlossen.

Ausgabe der oben aufgebauten Schaltung am Oszilloskop. Die Schwankung der Lichtintensität mit ca. 100 Hz rührt vermutlich von den Neon-Röhren im Raum her.

Veröffentlicht unter Arduino, Optik, Tagebuch | Verschlagwortet mit , , , | Hinterlasse einen Kommentar

Atmel XMEGA-A1 Xplained mal angesteckt

Die Platine Atmel XMEGA-A1 Xplained ist eine Entwicklungsplattform für den Atmega128A1 Mikrocontroller (und ähnliche). Sie beherbergt u.a. 8x LEDs, 8x Buttons, einen Lautsprecher, einen Temperatur- und einen Lichtsensor sowie 8MB SD-RAM. Angeschlossen wird die Platine über Mini-USB.

Unter Linux identifiziert sie sich als serieller Port:

$ lsusb
...
Bus 002 Device 081: ID 03eb:2122 Atmel Corp. XMEGA-A1 Explained evaluation kit
...
$ dmesg
...
usb 2-1.2: new full-speed USB device number 82 using ehci-pci
usb 2-1.2: New USB device found, idVendor=03eb, idProduct=2122
usb 2-1.2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
usb 2-1.2: Product: XPLAINED CDC
usb 2-1.2: Manufacturer: ATMEL
usb 2-1.2: SerialNumber: 123456789012
cdc_acm 2-1.2:1.0: ttyACM18: USB ACM device
...

Serieller Port… Das klingt vielversprechend – funktioniert das Board mit avrdude? Kann man die Arduino IDE zur Entwicklung verwenden? Augenscheinlich nein, in der Arduino IDE es gibt keinen Support für die MCU.

Aber AVR-GCC bietet mit der Option -mmcu=avrxmega7 eine (freie) Möglichkeit, Code dafür zu compilieren.

Die zweite onboard MCU (AT32UC3B1256) kann augenscheinlich nicht als Debugger genutzt werden. Sie dient offenbar nur als USB-zu-UART-Schnittstelle. Zum Debuggen gibt es einen separaten AVR-JTAG-Stecker auf dem Board.

Die Application Note AVR1927 beschreibt, wie die Software BatchISP aus dem FLIP-Softwarepaket genutzt werden kann, um Software mithilfe des UART-Bootloaders auf dem einzuflashen. Freie Software scheint es hierfür mit dem dfu-programmer ebenfalls zu geben.

Veröffentlicht unter Arduino | Verschlagwortet mit , , , , , | Hinterlasse einen Kommentar

CANtact-Firmware über USB flashen

Die Firmware des CANtact ist dankenswerterweise Open Source, sodass individuelle Änderungen möglicht sind. Allerdings muss eine selbst-compilierte Firmware erstmal in den STM32F042C6-Mikrocontroller eingespielt werden, bevor sie funktionieren kann. Der CANtact bietet im Wesentlichen zwei Möglichkeiten hierfür:

  • Über einen externen, an die SWD-Pins angeschlossenen MCU-Debugger
  • Über den im MCU ROM vorhandenen USB-Bootloader von ST

Hier wird demonstriert, wie der zweite Weg unter Linux funktioniert.

Zunächst muss das mit „BOOT“ gekennzeichnete Pfostensteckerpaar auf der Platine überbrückt werden. Steckt man danach USB an, identifiziert sich die Platine nicht mehr als CANtact, sondern startet im USB-DFU-Modus:

$ lsusb
...
Bus 001 Device 058: ID 0483:df11 STMicroelectronics STM Device in DFU Mode
...

Dann muss am PC die Software dfu-util installiert werden:

sudo apt install dfu-util

Es sollte nun möglich sein, die programmierbaren Speicherbereiche auf dem CANtact auflisten zu lassen:

$ dfu-util --list
dfu-util 0.9

Copyright 2005-2009 Weston Schmidt, Harald Welte and OpenMoko Inc.
Copyright 2010-2016 Tormod Volden and Stefan Schmidt
This program is Free Software and has ABSOLUTELY NO WARRANTY
Please report bugs to http://sourceforge.net/p/dfu-util/tickets/

Found DFU: [0483:df11] ver=2200, devnum=58, cfg=1, intf=0, path="1-1.1.2.4", alt=1, name="@Option Bytes  /0x1FFFF800/01*016 e", serial="FFFFFFFEFFFF"
Found DFU: [0483:df11] ver=2200, devnum=58, cfg=1, intf=0, path="1-1.1.2.4", alt=0, name="@Internal Flash  /0x08000000/032*0001Kg", serial="FFFFFFFEFFFF"

In dieser Anleitung gehe ich davon aus, dass die Firmware bereits erfolgreich compiliert wurde. Daraus resultiert (i.d.R. im Ordner cantact-fw/build/) die Datei CANtact-b0.bin. Diese kann nun in den internen MCU-Flash an dessen Start-Adresse 0x080000000 eingespielt werden:

# sudo dfu-util -d 0483:df11 -a 0 -D cantact-fw/build/CANtact-b0.bin -s 0x08000000
dfu-util 0.9

Copyright 2005-2009 Weston Schmidt, Harald Welte and OpenMoko Inc.
Copyright 2010-2016 Tormod Volden and Stefan Schmidt
This program is Free Software and has ABSOLUTELY NO WARRANTY
Please report bugs to http://sourceforge.net/p/dfu-util/tickets/

dfu-util: Invalid DFU suffix signature
dfu-util: A valid DFU suffix will be required in a future dfu-util release!!!
Opening DFU capable USB device...
ID 0483:df11
Run-time device DFU version 011a
Claiming USB DFU Interface...
Setting Alternate Setting #0 ...
Determining device status: state = dfuIDLE, status = 0
dfuIDLE, continuing
DFU mode device DFU version 011a
Device returned transfer size 2048
DfuSe interface name: "Internal Flash  "
Downloading to address = 0x08000000, size = 14876
Download        [=========================] 100%        14876 bytes
Download done.
File downloaded successfully

Nun wird die „BOOT„-Überbrückung wieder entfernt und das USB-Kabel abgezogen und wieder angesteckt. Danach bootet der CANtact die neue Firmware.

Wer auch normalen PC-Benutzern Rechte zum Firmware-Flashen geben möchte, muss zusätzlich unter /etc/udev/rules.d/ die Datei 49-st-usb-dfu.rules anlegen:

# 0483:df11 - ST's USB DFU bootloader
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="df11", MODE:="0666"
Veröffentlicht unter CAN | Verschlagwortet mit , , , , , , , , | Hinterlasse einen Kommentar

Inbetriebnahme des PCAN-USB unter Linux

Der PCAN-USB von Peak System ist ein USB-Adapter zum Verbinden des PCs mit einem CAN-Bus. Die Inbetriebnahme des Adapters unter Linux verlief problemlos. Folgendes Paket muss installiert sein:

Getestet wurde auf einem 64-Bit Debian-System mit Standard-Kernel Version 4.7.0-0.bpo.1-amd64.

Details zur Hardware finden sich auf der Wiki-Seite (siehe Link unten).

Folgende Befehle musste ich eingeben, um CAN-Frames vom Bus zu empfangen:

# Zuerst setze ich die Bus-Bitrate auf 1 Mbps
ip link set can0 type can bitrate 1000000
# Dann aktiviere ich das Netzwerk-Interface (in meinem Fall can0)
ifconfig can0 up
# Danach kann man CAN-Frames vom Bus empfangen
candump can0

Links:

Veröffentlicht unter CAN | Verschlagwortet mit , , , , , | Hinterlasse einen Kommentar

Vector CAN Panel in QtWidget umwandelbar?

Die Firma Vector bietet Hardware und Software an für die Analyse und Entwicklung von CAN-basierten Technologien, u.a. die Software Panel Designer, mit der im WYSIWYG-Stil graphische Oberflächen erstellt werden können, die CAN-Signale visualisieren.

Leider ist die Verwendung der Software nur mit einer kostenpflichtigen Lizenz möglich, was mich unmittelbar zu der Frage bringt: Geht das auch mit freier Software? Vielleicht mit QtCreator?

Veröffentlicht unter CAN | Verschlagwortet mit , , , | Hinterlasse einen Kommentar

Schlechte Darstellung des STM32F446RE-PLLCFGR-Registers in Eclipse’s Memory-View

Die Darstellung des PLL-Konfigurations-Registers PLLCFGR im Block „Reset and clock control“ (RCC) muss nachgebessert werden:

Die Darstellung des PLLCFGR-Registers eines STM32F446RE zur Laufzeit des Mikrocontrollers in Eclipse’s Peripheral Registers/Memory-View

Dargestellt werden nur die Konfigurationsparameter M, N, P und Q. Es fehlt R.

Darüberhinaus ist die Aufgliederung in einzelnen Bits unzwecksmäßig. Hilfreicher wäre es, die Parameter-Werte jeweils zusammengefasst auslesen bzw. schreiben zu können.

Mittig der oben konfigurierte PLL-Block, hier visualisiert von STM32CubeMX; Zu erkennen sind insbesondere die leicht lesbaren Konfigurations-Parameter M,N,P,Q und R.

Verwendet wurde das STM32F4xx_DFP-Pack Version 2.11.0 von Keil mit Eclipse 4.6.3 (Neon 3).

Veröffentlicht unter Bug reports & Feature requests | Verschlagwortet mit , , , , , , , , , | Hinterlasse einen Kommentar

Zeilensensor steckbrett-tauglich machen

Handelsübliche Flachbettscanner funktionieren, indem ein Schlitten die gesamte Länge des einzuscannenden Blattes abfährt und Zeile für Zeile einliest. Dabei wird jeweils eine Zeile in der vollen Breite auf einmal eingelesen, bevor der Schlitten die nächste Position anfährt. Das Einlesen passiert auf speziell für diesen Zweck vorgesehenen Leiterplatten, die im Schlitten eingebaut sind und über einen Zeilensensor verfügen.

Leiterplatte mit Zeilensensor, ausgebaut aus einem Flachbettscanner

Neben dem Zeilensensor ist i.d.R. auch die Spannungsversorgung, ein logischer Signal-Invertierer und drei Bipolar-Transistoren, welche die drei analogen Ausgangssignale für Rot-, Grün- und Blau-Wert eines Pixels, verstärken, auf der Platine vorhanden. Der Invertierer hat die Aufgabe, die Ansteuerung des Sensors zu vereinfachen, da solche Sensoren i.d.R. zwei invertierte Takte zur Ansteuerung erwarten.

Eine solche Platine eignet sich sehr gut, um mit einfachen Mitteln eine recht hochauflösende Sensor-Einheit für ein Spektrometer zu bauen. Daher habe ich mal eine solche Platine aus einem alten Scanner ausgebaut. Statt dem Flachbandkabel wollte ich Steckbrücken-Käbelchen verwenden, um mir die Inbetriebnahme zu vereinfachen:

Flachbandkabel von der Platine abknipsen

 

Mit der Entlötpumpe überschüssiges Lötzinn entfernt

Die Unterseite ist noch hübscher, als die Oberseite geworden

Statt des Flachachbandkabel-Sockels wurden Buchsenleisten aufgelötet

…und nochmal die Unterseite mit den neuen Stiftleisten

Veröffentlicht unter Optik | Hinterlasse einen Kommentar

SciPy error: object has no attribute ‚decorate‘

When using the linker cross reference table to graphviz dot file conversion script from https://balau82.wordpress.com/2013/11/24/analyzing-c-source-files-dependencies-in-a-program/, I get the error:

$ ./cref2dot.py
Traceback (most recent call last):
  File "./cref2dot.py", line 5, in 
    from networkx import MultiDiGraph, write_dot
  File "/usr/lib/python2.7/dist-packages/networkx/__init__.py", line 82, in 
    import networkx.linalg
  File "/usr/lib/python2.7/dist-packages/networkx/linalg/__init__.py", line 9, in 
    from networkx.linalg.algebraicconnectivity import *
  File "/usr/lib/python2.7/dist-packages/networkx/linalg/algebraicconnectivity.py", line 24, in 
    from scipy.sparse.linalg import eigsh, lobpcg
  File "/usr/lib/python2.7/dist-packages/scipy/sparse/linalg/__init__.py", line 112, in 
    from .isolve import *
  File "/usr/lib/python2.7/dist-packages/scipy/sparse/linalg/isolve/__init__.py", line 6, in 
    from .iterative import *
  File "/usr/lib/python2.7/dist-packages/scipy/sparse/linalg/isolve/iterative.py", line 84, in 
    def bicg(A, b, x0=None, tol=1e-5, maxiter=None, xtype=None, M=None, callback=None):
  File "/usr/lib/python2.7/dist-packages/scipy/_lib/_threadsafety.py", line 59, in decorator
    return lock.decorate(func)
  File "/usr/lib/python2.7/dist-packages/scipy/_lib/_threadsafety.py", line 47, in decorate
    return scipy._lib.decorator.decorate(func, caller)
AttributeError: 'module' object has no attribute 'decorate'

The error occurs in scipy/_lib/_threadsafety.py at

...
    def decorate(self, func):
        def caller(func, *a, **kw):
            with self:
                return func(*a, **kw)
        return scipy._lib.decorator.decorate(func, caller)
...

It occurs with Debian package python-scipy, version 0.10.1+dfsg2-1, maintained by the Debian Python Modules Team, and can befixed by changing the above return statement to:

...
        return scipy._lib.decorator.decorator(caller, func)
...
Veröffentlicht unter Bug reports & Feature requests | Verschlagwortet mit , , , , , , | Hinterlasse einen Kommentar

Arduino Nano-Klon IDE-tauglich machen

Es gibt 5V-Arduinos zu kaufen, die über einen CH340G USB-Seriell-Wandler mit dem PC verbunden werden können. Beim ersten Versuch, direkt mit dem Arduino IDE ein Sketch einzuflashen, trat bei mir zunächst das folgende Problem auf:

avrdude: Version 6.1, compiled on Sep 11 2014 at 20:00:34
         Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
         Copyright (c) 2007-2014 Joerg Wunsch
...
         Using Port                    : /dev/ttyUSB5
         Using Programmer              : wiring
         Overriding Baud Rate          : 115200
avrdude: wiring_open(): releasing DTR/RTS
avrdude: wiring_open(): asserting DTR/RTS
avrdude: Send: . [1b] . [01] . [00] . [01] . [0e] . [01] . [14] 
avrdude: ser_recv(): programmer is not responding
avrdude: stk500v2_ReceiveMessage(): timeout
...

Der Arduino hatte offenbar noch keinen Bootloader installiert.

Glücklicherweise gibt es das unten verlinkte Instructable. Bei dessen Anwendung kann es noch passieren, dass man (bei Verwendung eines Arduino Mega zur Programmierung) den folgenden Fehler bekommt:

avrdude: Device signature = 0x1e950f
avrdude: Expected signature for ATmega2560 is 1E 98 01
         Double check chip, or use -F to override this check.
avrdude: Send: Q [51]   [20] 
avrdude: Recv: . [14] 
avrdude: Recv: . [10] 

avrdude done.  Thank you.

Das bedeutet, dass der einzuflashende Bootloader nicht für den erkannten Ziel-Chip gedacht ist. Man muss dann unter Tools -> Board den Arduino Nano auswählen und erneut „Bootloader installieren“ klicken. Dann sollte sich die Ausgabe ändern zu:

avrdude: 1 bytes of lock written
avrdude: verifying lock memory against 0x0F:
avrdude: load data lock data from input file 0x0F:
avrdude: input file 0x0F contains 1 bytes
avrdude: reading on-chip lock data:

Reading | avrdude: Send: V [56] X [58] . [00] . [00] . [00]   [20] 
avrdude: Recv: . [14] 
avrdude: Recv: . [cf] 
avrdude: Recv: . [10] 
################################################## | 100% 0.02s

avrdude: verifying ...
avrdude: 1 bytes of lock verified
avrdude: Send: Q [51]   [20] 
avrdude: Recv: . [14] 
avrdude: Recv: . [10] 

avrdude done.  Thank you.

Links

Veröffentlicht unter Informatik | Verschlagwortet mit , , , , , , | 1 Kommentar

Ein VHDL-Editor für Eclipse

Warum ist es eigentlich so schwierig, gute Editoren für Verilog und VHDL zu finden?
Warum kann ich nicht einfach ein Plugin in mein Eclipse installieren und los geht’s?

Die vielversprechendste Lösung in dieser Richtung scheint mir veditor zu sein.
Leider funktioniert das anscheinend nur mit Eclipse 3.2.1, was auf meinem Computer wiederum nicht funktioniert.

Kann ich das Plugin einfach auf Eclipse 4.x portieren? Mal probieren!
Erster Schritt: Das SVN-Repo als git-Repo klonen. Dafür braucht man eine Autoren-Datei:

(no author) = no_author <no_author@users.sf.net>
aghoras = aghoras <aghoras@users.sf.net>
tadashi-k = Kobayashi Tadashi <tadashi-k@users.sf.net>
gowinex = Gowinex Mayhem <none@users.sf.net>
ngken = Ken Horn <ngken@users.sf.net>
clonextop = HyungKi Jeong <clonextop@users.sf.net>
jan_o = Jan Ortner <jan_o@users.sf.net>
abusse = Anselm Busse <abusse@users.sf.net>
simonmartineau = Simon Martineau <simonmartineau@users.sf.net>

Danach kann man es mit Autoren-Mapping klonen:

$ git svn clone svn://svn.code.sf.net/p/veditor/code/trunk veditor --authors-file=authors.txt
Veröffentlicht unter FPGA, Informatik | Verschlagwortet mit , , , | Hinterlasse einen Kommentar