Geschlechter gibt es noch lange

Immer wieder lese ich in irgendwelchen pseudo-wissenschaftlichen Artikeln, dass „das Y-Chromosom ja schwach wäre“, auf lange Sicht „Männer ja aussterben würden“ und es „irgendwann nur noch Frauen geben würde“. Als studierter Biologe ärgern mich solche Beiträge, da sie wissenschaftlicher Unfug sind und lediglich zeigen, dass der Autor von Biologie keine Ahnung hatte, speziell von Evolution. Da ich auf das Thema angesprochen wurde, möchte ich das für alle nicht-Biologen kurz ausführen:

Es gibt auf der Erde, mit abzählbar vielen Ausnahmen bzw. Spezialfällen, keine mehrzelligen Spezies, deren Lebensspanne unbegrenzt wäre. Das hat nicht zuletzt damit zu tun, dass die Individuen, selbst wenn sie nicht durch äußere Umstände zu Tode kommen, z.B. von Feinden gefressen werden, im Laufe ihres Lebens einer zumindest teilweise irreversiblen, qualitativen Degradation (gemeinhin „Alterung“) unterworfen sind, angefangen bei der Erbsubstanz DNA, bis zur Gewebe- und Organ-Ebene. Um weiter existieren zu können, ist in regelmäßigen Abständen eine Verjüngung erforderlich, die in Form einer Erneuerung des gesamten Individuums durch ebenjene Fortpflanzung von statten geht.

Arten, die über keine Geschlechter verfügen, haben in aller Regel nur die Möglichkeit, sich durch Methoden fortzupflanzen, die eher einer Klonierung gleichkommen, wobei ein Nachkomme resultiert, der mit dem Eltern-Tier genetisch (weitgehend) identisch ist und somit auch ungefähr dieselbe Fitness aufweist. Solche Arten entwickeln sich nur weiter, wenn durch natürliche Auslese die eher „unfitteren“ Individuen zugrunde gehen, während die „fitteren“ tendenziell überleben und sich weiter fortpflanzen.

Die Innovation, Geschlechter einzuführen, ist in diesem Kontext ein bedeutender, konzeptioneller Fortschritt:
1. Die Möglichkeit, die Gen-Kombinationen in einem Individuum mit denen eines anderen zu rekombinieren, führt zu einer stärkeren Aufspreizung in der Häufigkeitsverteilung von fitteren und unfitteren Individuen in der Folgegeneration. In der Folge kann eine gezieltere Auslese stattfinden, die nach einer geringeren Anzahl von Generationsabfolgen in verbesserten Gen-Kombinationen resultiert, als das ohne die Rekombination bzw. Aufspreizung möglich wäre.
2. Einen Partner zur Fortpflanzung zu benötigen, impliziert als Zwischenschritt eine Partnersuche. Diese Suche als integraler Bestandteil des Fortpflanzungmodus aber ermächtigt das Individuum -im Gegensatz zu ausschließlich natürlichen Auslese-Mechanismen- seine Intelligenz für das Herbeiführen evolutionärer Anpassungen heranzuziehen. Durch Nutzung seiner Intelligenz kann es z.B. seine Umwelt einzuschätzen und einen in dieser konkreten Umwelt fitten Partner gezielt auswählen. Diese Involvierung von Intelligenz in evolutionäre Mechanismen zieht eine drastische Vergrößerung evolutionärer Dynamik sowie Verkürzung der für evolutionäre Anpassungen und Fortschritte erforderlichen Anzahl von Generationsabfolgen nach sich und fördert außerdem die Evolution von Intelligenz, die dann wiederum auch zur Lebenszeit des Individuums zur Steigerung der Fitness zur Verfügung steht.

Man sieht also, aus vermeintlichen „Schwächen“ von Geschlechts-Chromosomen auf das „Aussterben“ von Geschlechtern zu schließen, ist Unfug.

Veröffentlicht unter Wissenschaft | Hinterlasse einen Kommentar

WS2811 bringt RGB LED-Streifen zum Leuchten

Heute wollte ich testen, ob der RGB-LED PWM Controller WS2811(S) sich ohne Weiteres von einem nRF51822 steuern lässt. Dazu habe ich, wie im Datenblatt empfohlen über einen Widerstand 12V angeschlossen und den GPIO-Pin des nRF51, der auf 3.3V läuft, direkt mit dem Dateneingang DIN verbunden. Als Leuchtquelle diente ein Abschnitt einer RGB-SMD-LED-Streifen-Rolle mit 3 LEDs.

Funktioniert hat es erstmal leider nicht. Zuerst war noch die Geschwindigkeit ein Problem, denn man muss den SET-Pin mit VDD verbinden, um auf 400kHz übertragen zu können. Schneller kann man zumindest per Bit-Banging mit dem nRF51 leider nicht übertragen.

Man sollte prüfen, ob der SPI-Master des nRF51 anstelle des Bitbanging genutzt werden kann – Das würde CPU-Resourcen sparen und das Timing genauer einhalten.

Am Ausgang des WS2811 kommen die überschüssigen Daten nicht heraus, wie man es von einem Schieberegister erwarten würde. Bei den angeschlossenen LEDs tut sich auch nichts. Das Timing halte ich vergleichsweise genau ein. Möglicherweise ist der Signalpegel nicht korrekt. Das Datenblatt sagt: mindestens mit 0.7*VDD übertragen. Wenn der Chip auch mit 3.3V funktioniert, sollte man ihn anstelle der 12V+Widerstands – Lösung lieber damit versorgen. Wenn das nicht funktioniert, muss der Signalpegel des nRF51-GPIOs gewandelt werden. Je nachdem, ob im Chip ein Pull-Up, Pull-Down oder kein Widerstand am Dateneingang DIN vorhanden ist, benötigt man hierfür mehr oder weniger Bauteile, auf jeden Fall wohl einen Transistor.

Nächste Schritte:

  • WS2811 mit 3.3V VDD testen, ob es dann schon funktioniert
  • wenn nicht, die Spannung am unverbundenen DIN messen, um interne Widerstände zu erkennen
  • und Transistor/Pegelwandler dazwischenschalten

Links:

Update 28. April 2016:
Wenn man den WS2811 mit 3.3V betreibt, dann klappt es auch mit der Kommunikation, die auf 3.3V-Pegel läuft und die angeschlossenen LEDs blinken, wie gewünscht.

Veröffentlicht unter Technik | Hinterlasse einen Kommentar

Elektrisch gesteuerter Flüssigkeitstransport

Das OpenDrop-Projekt begann vor etwa zwei Jahren damit, ein Gerät zu entwerfen, welches auf der Erkenntnis aufsetzt, dass kleine Flüssigkeitmengen mithilfe einer elektrischen Spannung bewegt werden können.

Dabei werden einige Millimeter große Elektroden so nebeneinander und/oder übereinander arrangiert, dass sich in ansteuerbarer Weise elektrische Felder räumlich gezielt anlegen lassen.

Der anziehende Effekt kommt zustande durch die Dielektrizität, die Polarisierung von Wasser-Molekülen, die sich im elektrischen Feld ausrichten, woraus eine anziehende Wirkung zwischen Flüssigkeit und Elektrode resultiert.

Die an die Elektroden angelegte Spannung kann Gleichspannung oder Wechselspannung sein. Der erforderliche Spannungshub liegt zwischen Hundert und Tausend Volt, 250 Volt sind praktikabel. Stromfluss wird vermieden, indem die Flüssigkeit galvanisch von der Elektrode isoliert wird.

Durch eine gesteuerte, zeitliche Abfolge von An- und Ausschalt-Vorgängen der Betriebsspannung an ausgewählte Elektroden, kann eine Flüssigkeit gezielt über eine Fläche bewegt werden. Sie lässt sich mit anderen Flüssigkeiten kombinieren und (wieder) aufteilen. So lassen sich beispielsweise unterschiedliche Edukte zu einer chemischen oder biochemischen Reaktion kombinieren, die automatisiert durchgeführt werden kann. Eine zusätzliche Temperatur-Steuerung erweitert das Repertoire durchführbarer (bio)chemischer Prozesse.

Die Flüssigkeit selbst bewegt sich in einem Gefäß, beispielsweise einem Zwischenraum zwischen zwei Flächen, die aus  Kunststoff, Glas, Metall, Holz oder anderem Material bestehen können. Auch runde Gefäße, wie Schläuche oder Kapillaren sind denkbar.

Die Elektroden können quadratisch, rechteckig, rund, aber grundsätzlich beliebig gestaltet sein.

Die Elektroden können planar sein. Insbesondere bei nicht-planaren Gefäßen, beispielsweise bei Kapillaren, kann es sich aber anbieten, sie nicht planar zu arrangieren, in diesem Beispiel um die Außenseite der Kapillare.

Die Bewegungsfähigkeit der Flüssigkeit wird verbessert, indem das Gefäß aus einem hydrophoben Material gefertig wird und/oder indem die an die Flüssigkeit angrenzende Oberfläche hydropob oder superhydrophob gestaltet wird. Dadurch kann u.a. die zum Betrieb erforderliche Spannung niedriger gewählt werden.

Die Bewegungsfähigkeit der Flüssigkeit wird auch verbessert, indem die Elektroden insbesondere an den Rändern so gestaltet werden, dass die Oberflächenspannung der Flüssigkeit durchbrochen wird, beispielsweise durch dreieckig oder rechteckig gezackte Elektroden-Ränder.

Veröffentlicht unter Wissenschaft | Hinterlasse einen Kommentar

Virtuell und physikalisch dieselbe Windows 7-Installation verwenden

Linux-Nutzer kommen leider zuweilen in die Verlegenheit, Windows-Systeme einsetzen zu müssen, weil eine bestimmte Software nur für Windows zur Verfügung steht. Glücklicherweise lässt sich für solche Zwecke Windows 7 in einer virtuellen Maschine (KVM) installieren, sodass man weiter unter Linux arbeiten kann und Windows sicher abgekapselt benutzen kann.

Diese Lösung hilft leider nicht bei Anwendungen, die zwingend OpenGL bzw. DirectX benötigen. Man erkennt solche Programme daran, dass Bereiche des Programmfensters, in denen man visuelle (3D-) Ausgaben erwartet, leer bleiben, was daran liegt, dass die Anwendung versucht, die Grafikkarte zum Rendern des Inhalts zu verwenden, was aber in der virtuellen Maschine nicht darstellbar ist. Ein Beispiel für solche Software ist Altium (etwa ab der Version 14).

Microsofts Software-Rendering-Lösung löste das Problem leider nicht.

Auch die Verwendung sowohl des Spice- als auch des VNC-Displayservers konnten keine Abhilfe schaffen.

Bleibt doch nur eine physikalische Windows-Installation. Nachdem Windows 7 unverhältnismäßig groß ist (>30GB), möchte man natürlich ungern zwei Windows 7-Installationen haben. Hier stellt sich die Frage: Lässt sich die physikalische Installation mit der virtuellen kombinieren, sodass dasselbe System physikalisch bootet, aber auch als virtuelle Maschine unter Linux eingesetzt werden kann?

Bei Linux-Installationen würde die Antwort lauten: Ja natürlich, das ist problemlos möglich. Unter Windows sieht es schon deutlich komplizierter aus.

Zwar gelingt es, die physikalische Festplatte als Medium für die virtuelle Maschine einzubinden und darauf Windows 7 zu installieren. Das installierte System bootet danach aber auch nur in der virtuellen Umgebung. Das Booten als physikalisches System bricht beim Windows-Logo ab. Im umgekehrten Fall, dem Booten des physikalisch installierten Windows 7 in der virtuellen Maschine, erscheint ein Bluescreen mit Fehlermeldung:

* STOP: 0x0000007B (INACCESSIBLE_BOOT_DEVICE)

Der Fehler kommt vermutlich dadurch zustande, dass sich der SATA-Controller zwischen Installation und Booten verändert: Einmal ist es der physikalische, einmal der virtualisierte, ein VirtIO-Gerät. Möglicherweise hilft die Installation eines VirtIO-Treibers unter Windows:

Vielleicht schafft auch die Version 4.4 des Linux-Kernels Abhilfe:

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

Primfaktorproduktdarstellung

Alle natürlichen Zahlen lassen sich als Produkt von Primzahlen ausdrücken. Damit ist folgende Darstellung für alle natürlichen Zahlen denkbar:

  • Eine Zahl besteht aus n Ziffern.
  • Ziffern haben von rechts nach links aufsteigend die Wertigkeit einer Primzahl.
  • Eine Ziffer steht für den Exponenten der Primzahl in der Primfaktorzerlegung der zu repräsentierenden Zahl.
  • Die Wertigkeit einer Zahl ergibt sich aus dem Produkt aller Primzahlen mit der jeweiligen Ziffer als Exponent.
  • Präfix „p“, um die Darstellung als Primfaktorprodukt auszudrücken.

Zahlen in der Primfaktorproduktdarstellung lassen sich verständlicherweise trivial in ihre Primfaktoren zerlegen. Die zugehörige Dezimalzahl ergibt sich durch Ausmultiplizieren der Primfaktoren. Umgekehrt ist eine Primfaktorzerlegung erforderlich, um eine Dezimalzahl als Primfaktorprodukt darzustellen.

Beispiel:
Primzahlen: 2,3,5,7,11,…
Dann ist die Primfaktorproduktdarstellung von Vierzehn:

14 = 7*2 = 7^1 * 5^0 * 3^0 * 2^1 = p1001

Rechenbeispiele:

7 * 2 = 14
p1000 * p0001 = p1001
2 + 3 = 5
p0001 + p0010 = p0100
7 + 2 = 9
p1000 + p0001 = p0020
8 : 2 = 4
p0003 : p0001 = p0002

Wie man sieht, entspricht die Multiplikation in der Primfaktorproduktdarstellung der Addition der einzelnen Ziffern, die Division entspricht der Subtraktion. Erlaubt man auch negative Ziffern, so erweitert sich der repräsentierbare Zahlenraum auf alle rationalen Zahlen außer Null.

8 : 7 = 1 + 1/7
p0003 : p1000 = p0 + p0/p1000

Um Ziffern größer als 9 oder negative Ziffern abzugrenzen, kann die entsprechende Ziffer durch eine runde Klammer abgegrenzt werden.

8 : 16 = 1/2
p0003 : p0004 = p000(-1)

Die Null ist so nicht darstellbar. Da eine Welt ohne Null realitätsfern ist, sei festgelegt, dass ein alleinstehendes „p“ dem Zahlenwert Null entspricht.

p = 0

Eine Zahl ist genau dann eine Primzahl, wenn ihre Primfaktorproduktdarstellung aus genau einer Eins und ansonsten ausschließĺich Nullen besteht.

Veröffentlicht unter Tagebuch | Hinterlasse einen Kommentar

Abwärme in den Blumenkasten

Eingebettete Systeme, wie NASe oder anderweitige Heim-Server finden sich ja mittlerweile in vielen Haushalten. Ihr wesentlicher Vorteil besteht darin, dass der Besitzer die (alleinige) physische Kontrolle über das System ausübt. Da sie ständig verfügbar sein sollen, sind sie i.d.R. auch permanent angeschaltet, was mit permanentem Stromverbrauch und der Erzeugung von Abwärme einhergeht. Ein recht klimaunfreundlicher Nebeneffekt bzw. eine Verschwendung immer dann, wenn das System eigentlich gerade nichts tut.

Grund genug, sich zu fragen: Was könnte man zumindest mit der Abwärme noch anfangen?

Langsam sind die warmen Tage vorbei und es wird herbstlich und kühler. Für die Pflanzen im Garten oder auf dem Balkon heißt dies: Rauhere Bedingungen, verlangsamtes Wachstum, einige werden mit fallender Temperatur eingehen.

Wie wäre es da, die eigene NAS oder den Heim-Server statt drinnen überflüssigerweise die Wohnung heizen zu lassen, im Blumenbeet oder -kasten zu deponieren, um wenigstens die Pflanzen warm zu halten?

Hm, man müsste die Systeme freilich wasserdicht verpacken bzw. konzipieren…

Veröffentlicht unter Tagebuch, Technik | Hinterlasse einen Kommentar

Altium scripting with Python

Altium’s Auto-Router is a pain, it doesn’t produce usable results even in trivial scenarios. I had the idea of scripting the routing of my board and found, that Altium supports scripting. However, they do not offer scripting in my preferred language (Python) and running the scripts seems to require Altium to be installed and running, which makes it pretty useless due to the lack of a Linux version of Altium. Looks like I have to hack some file manipulation together myself. So, how does Altium store data?

Altium uses Microsoft’s OLE2 Compound Document format for all it’s documents. I am having problems using the Python library for OLE documents, but Apache offers a Java library, that seems to be working well: org.apache.poi
Therefore for packing and unpacking the documents, I will make use of simple Java applets at first.

At least some of the content of Altium documents is text in a key-value associative manner, therefore it makes sense to use JSON as an intermediary format. Also, because this allows for JavaScript-based EDA tool generation lateron.

What has been done?

What’s to be done next?

  • Working unpacker and re-packer need to be implemented.
  • The combined knowledge of the three projects above should be boiled down into a well-commented library, which parses the JSON into Altium objects, that in turn may then be manipulated by scripts.

Repository:

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

Eine Datenbank kompatibler Display-Panele

Display-Panele, wie sie in Flachbildschirmen, TVs, Tablets und Notebooks zum Einsatz kommen, gibt es in vielen verschiedenen Kombinationen von Abmessung und Auflösung. Während diese Parameter trotz ihrer Vielfalt noch einigermaßen normiert sind, verwendet für die Anschlüsse auf der Display-Rückseite, über die das Panel intern mit dem Grafikausgang der jeweiligen Hauptplatine verbunden wird, jeder Hersteller eigene Buchsen, die unterschiedliche Pin-Anzahl und -Belegung aufweisen. Die Art der Bildübertragung ist dabei stets über unterschiedlich viele LVDS-Kanäle. Zu den LVDS-Leitungen kommen noch weitere für den Zugriff auf den Parameter-Speicher im Display (EDID).

Üblicherweise kommt der Endnutzer erst mit der LVDS-Schnittstelle in Berührung, wenn das Display beschädigt wird und ersetzt werden muss. Dabei passiert es mir nicht selten, dass ich eigentlich noch Displays aus anderen Geräten zur Verfügung hätte, insbesondere aus alten Notebooks. Aus der oben genannten Problematik, kann man aber nicht einfach defektes und funktionierendes Display gegeneinander austauschen, denn obwohl stets Flachbandkabel zum Einsatz kommen, selbst dann, wenn der Display-Stecker in die Display-Buchse passt, nicht notwendigerweise die gleiche Pinbelegung vorliegt.

Da wäre es hilfreich, die Display-Schnittstelle wäre einer Normierung unterworfen, sodass Displays unterschiedlicher Hersteller miteinander vertauschbar wären.

Primäres Ziel bei dieser Überlegung ist, den Endnutzer in die Lage zu versetzen, sein Endgerät selbst reparieren zu können. Eine Möglichkeit, dem Nutzer dabei zu helfen, könnte eine Datenbank sein, welche eine Korrelation zwischen einerseits Endgeräten, z.B. Notebooks, und andererseits Display-Panel-Modellen aufstellt, zusammen mit Informationen zu Abmessung und Auflösung des Displays, sodass man beispielsweise beim Defekt seines Thinkpad T42p Displays unmittelbar abrufen könnte, dass die Notebooks Dell Latitude C600 und Dell Inspiron 4000 kompatible Displays enthalten, es sich also lohnt, die Letzteren entsprechend auszuschlachten.

Außer für Thinpads gibt es eine solche Datenbank bisher leider scheinbar nicht.

Wünschenswert wäre natürlich auch, die Panel-Hersteller würden zu ihren Display-Daten stets auch Pin-Belegung und Bildübertragungs-Protokoll veröffentlichen. Leider ist das nicht die gängige Praxis.

Veröffentlicht unter Technik | Hinterlasse einen Kommentar

TI’s XDS100 v2 JTAG adapter

Texas Instruments offers a special JTAG adapter for programming some of their digital signal processors (DSPs). The adapter with the model number XDS100v2 from Spectrum Digital is sold as TMDSEMU100V2U-14T. The board is equiped with an FTDI FT2232H USB-serial converter, which connects to a Xilinx XC2C32A-VQG44 programmable logic IC (CPLD).

The adapter is supported by OpenOCD using interface configuration interface/ftdi/xds100v2.cfg.

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

FT2232D-based JTAG adapter interfaces with STM32F3 Discovery board

With the help of Paul Fertser from IRC channel #OpenOCD on oftc.net and the interface config file he kindly created for my JTAG adapter:

#
# www.100ask.org OpenJTAG
#
# http://www.100ask.net/OpenJTAG.html
#

interface ftdi
ftdi_device_desc "USB<=>JTAG&RS232"
ftdi_vid_pid 0x1457 0x5118

ftdi_layout_init 0x0f08 0x0f1b
ftdi_layout_signal nSRST -data 0x0200 -noe 0x0800
ftdi_layout_signal nTRST -data 0x0100 -noe 0x0400

… I was able to interface with a STM32F3 Discovery Board.

Foto…

More specifically, I interfaced with the STM32F303, the main microcontroller on the board. In order to do that, I I mapped the JTAG pins, referenced in the chip’s datasheet, to header pins available on the board:

  • TMS = PA13
  • TCLK = PA14
  • TDI = PA15
  • TDO = PB3
  • nTRST = PB4
  • 3.3V
  • GND

After connecting the corresponding adapter pins, I could verify the connection by successfully executing some OpenOCD demo commands:

$ openocd -f interface/ftdi/100ask-openjtag.cfg -f target/stm32f3x.cfg -c "reset_config none; init; reset halt; reset; reset halt; shutdown"
Open On-Chip Debugger 0.8.0 (2014-10-20-22:02)
Licensed under GNU GPL v2
For bug reports, read
        http://openocd.sourceforge.net/doc/doxygen/bugs.html
Info : only one transport option; autoselect 'jtag'
adapter speed: 1000 kHz
adapter_nsrst_delay: 100
jtag_ntrst_delay: 100
cortex_m reset_config sysresetreq
none separate
Info : clock speed 1000 kHz
Info : JTAG tap: stm32f3x.cpu tap/device found: 0x4ba00477 (mfg: 0x23b, part: 0xba00, ver: 0x4)
Info : JTAG tap: stm32f3x.bs tap/device found: 0x06422041 (mfg: 0x020, part: 0x6422, ver: 0x0)
Info : stm32f3x.cpu: hardware has 6 breakpoints, 4 watchpoints
Info : JTAG tap: stm32f3x.cpu tap/device found: 0x4ba00477 (mfg: 0x23b, part: 0xba00, ver: 0x4)
Info : JTAG tap: stm32f3x.bs tap/device found: 0x06422041 (mfg: 0x020, part: 0x6422, ver: 0x0)
target state: halted
target halted due to debug-request, current mode: Thread 
xPSR: 0x01000000 pc: 0x08000704 msp: 0x2000a000
Info : JTAG tap: stm32f3x.cpu tap/device found: 0x4ba00477 (mfg: 0x23b, part: 0xba00, ver: 0x4)
Info : JTAG tap: stm32f3x.bs tap/device found: 0x06422041 (mfg: 0x020, part: 0x6422, ver: 0x0)
Info : JTAG tap: stm32f3x.cpu tap/device found: 0x4ba00477 (mfg: 0x23b, part: 0xba00, ver: 0x4)
Info : JTAG tap: stm32f3x.bs tap/device found: 0x06422041 (mfg: 0x020, part: 0x6422, ver: 0x0)
target state: halted
target halted due to debug-request, current mode: Thread 
xPSR: 0x01000000 pc: 0x08000704 msp: 0x2000a000
shutdown command invoked
Veröffentlicht unter JTAG | Verschlagwortet mit , , , , | Hinterlasse einen Kommentar