Spinkit.dll und Python WAR:iowkit.dll und Python?

Dies ist das deutsche Forum für alle Themen um den IO-Warrior. Beiträge bitte nur in Deutsch.

Moderator: Guido Körber

calli
Posts: 37
Joined: Sat Sep 17, 2005 6:35 pm

Post by calli »

Ich stelle mich zu blöd an einen (verfügbaren) Vergleichstyp für den BC307 aus dem Datenblatt zu finden. Kann mich da jemand auf die richtige Spur stupsen? Da ich kein Elektroniker bin bin ich auch nicht sicher was der Transistor leisten können muss. Wichtig ist wahrscheinlich das er den Strom den die Drehinkrementregler brauchen schalten können muss. Aber wieviel ist das? Der BC307 kann nur 100mA schalten?

Danke,
Carsten
Guido Körber
Site Admin
Posts: 2876
Joined: Tue Nov 25, 2003 10:25 pm
Location: Germany/Berlin
Contact:

Post by Guido Körber »

So ungefähr jeder PNP Kleinsignaltransistor sollte den Job tun.
calli
Posts: 37
Joined: Sat Sep 17, 2005 6:35 pm

Post by calli »

Danke!

Übrigens ist es im Datenblatt recht schwierig zu erkennen wohin der Pfeil am Emiter zeigt. Ein Elektronik-Kundiger sieht es sicher am Schaltplan.

Carsten
Last edited by calli on Mon Jan 23, 2006 3:14 pm, edited 1 time in total.
HappyAura
Posts: 68
Joined: Sun Feb 27, 2005 2:13 pm

Post by HappyAura »

ich hab den bc 557 verbaut, mit dem erfolg, dass die hintergrundbeleuchtung von meinem Display geflackert hat. warum weiß ich leider nicht genau. hab das ganze jetzt umgangen, indem ich für die beleuchtung 5v vom PC Netzteil abgreife und mein USB damit in Ruhe lasse. Der fehler trat sowohl beim 500mA als auch beim 100mA Mode auf.

Der fehler muß nicht zwingend am Transistor liegen, ist aber durchaus möglich. evtl aber auch and er Ansteuerung von stilCD

Edit:
habt ihr schon mal StilCD ausprobiert? traten ähnliche probleme auf?

Gruß Martin
calli
Posts: 37
Joined: Sat Sep 17, 2005 6:35 pm

Erste Erfolge!

Post by calli »

Hallo,

dank http://starship.python.net/crew/theller/ctypes/ und der Hilfe des Maintainers von ctypes konnte ich heute die spinkit.dll von Python aus benutzen.

Code: Select all

# ---------------------------------------------------------------------------------------
# cmspinkit.py
# SpinWarrior Python Bindings v0.1
# 2. Februar 2006
# Carsten Wartmann (cw(at)imago-viva(Punkt)de)
# Requirements: ctypes, http://starship.python.net/crew/theller/ctypes/
#               tested only on Win/Python2.3 so far
# ---------------------------------------------------------------------------------------

from ctypes import *
from ctypes.wintypes import BOOL


class SpinkitPyData:
    def __init__(self):
        self.Handle = -1
        self.Spins = [0,0,0,0,0,0]
        self.Buttons = [False,False,False,False,False,False,False]

SPINKIT_HANDLE = c_void_p 
class SPINKIT_DATA(Structure):
    _fields_ = [("Device", SPINKIT_HANDLE),
                ("Spins", c_int * 6),
                ("Buttons", BOOL * 7)]
SPINKIT_DATA_SIZE = sizeof(SPINKIT_DATA)

class SpinKit(object):

    def __init__(self):
        self.Handle = -1

     
    def SpinKitOpenDevice(self):
        "Open Spinkit Device"
        self.Handle = windll.spinkit.SpinKitOpenDevice()

    def SpinKitCloseDevice(self):
        "Close Spinkit Device"
        windll.spinkit.SpinKitCloseDevice(self.Handle)

    def SpinKitGetNumDevs(self):
        "Get Number of Devices"
        return(windll.spinkit.SpinKitGetNumDevs())
    
    def SpinKitGetDeviceHandle(self,devicenum):
        "Get Devices Handle (Untested!)"
        return(windll.spinkit.SpinKitGetDeviceHandle(devicenum))

    def SpinKitGetSerialNumber(self):
        "Get SerialNumber"
        ser=create_unicode_buffer("xxxxxxxx")
        windll.spinkit.SpinKitGetSerialNumber(self.Handle,ser)
        return(ser.value)
     
    def SpinKitVersion(self):
        "Get Spinkit Version"
        return(c_char_p(windll.spinkit.SpinKitVersion()).value)  
    
    def SpinKitReadImmediate(self,data):
        "Read Immediate"
        datac=SPINKIT_DATA()
        if windll.spinkit.SpinKitReadImmediate(self.Handle,pointer(datac)):            
            data.Device=self.Handle
            i=0
            for spin in datac.Spins:
                data.Spins[i]=spin
                i=i+1
            i=0
            for button in datac.Buttons:
                data.Buttons[i]=button
                i=i+1
            return(True)
        else:
            return(False)
Testprogramm:

Code: Select all

import cmspinkit

sk=cmspinkit.SpinKit()
sk.SpinKitOpenDevice()

print "Spin or press a button, CTRL-C to break"
print
print "Num Devs: ",sk.SpinKitGetNumDevs()

print "Version : ",sk.SpinKitVersion()

print "Chip Serial",sk.SpinKitGetSerialNumber()
print


data = cmspinkit.SpinkitPyData()

while 1:
    if sk.SpinKitReadImmediate(data):
        print "Spins: ",data.Spins, "Buttons:",data.Buttons

sk.SpinKitCloseDevice()

Noch nicht ganz komplett und dazu hätte ich auch eine Frage:

BOOL SPINKIT_API SpinKitRead(SPINKIT_HANDLE devHandle, PSPINKIT_DATA SpinData)

und

BOOL SPINKIT_API SpinKitReadImmediate(SPINKIT_HANDLE devHandle, PSPINKIT_DATA SpinData)

Haben ja die gleichen Aufrufparameter, in dem Delphi Beispiel hat SpinKitRead aber noch einen Pipe Parameter? Ansonsten ist es doch so das ersteres erst zurückkommt wenn es wirklich einen Spin oder Button gab zweiteres sofort/nach timeout.

BOOL SPINKIT_API SpinKitSetTimeout(SPINKIT_HANDLE devHandle, ULONG timeout);

timeout ist in msec? (looks so)

Ich kenne ja den IOW nicht, daher nur mal so wofür sind die CMSend* Funktionen?

Gruß,
Carsten
Robert Marquardt
Posts: 543
Joined: Mon Dec 01, 2003 6:09 pm

Post by Robert Marquardt »

Das ist ein Fehler der Delphianbindung. Es gibt keine zweite Pipe am SpinWarrior.
Die CM-Funktionen sind nicht Teil des SpinKit APIs. Sie sind nur vorlaeufig in dieser Vorversion enthalten.

Wir haben uns gerade dazu entschlossen dieses API nochmals zu ueberarbeiten.
Die Funktion SpinKitReadImmediate wird in SpinKitReadNonBlocking umbenannt.
Dies ist eine Angleichung an das naechste IowKit API und auch wesentlich intuitiver zu verstehen.
Die Delphi-Anbindung wird natuerlich auch korrigiert.

SpinKitRead liest blockierend (bis Timeout so gesetzt) waehrend SpinKitReadNonBlocking sofort zurueckkehrt, wenn keine Daten vorhanden sind.

Ich hoffe den neuen Download bis morgen anbieten zu koennen.
calli
Posts: 37
Joined: Sat Sep 17, 2005 6:35 pm

Post by calli »

Hallo,

ich wollte nur mal vermelden, das ich die Python Anbindung auch auf Linux zum laufen gebaracht habe (also auch den Spinwarior in einer vmware-Maschine mit Debian Linux!).

Es waren ein paar kleine Änderungen nötig, da die Doku von ctypes doch recht Windows zentriert ist. Wie man dann das Skript wirklich PLatformunabhängig schreibt da muss ich noch etwas forschen, das hat aber eher niedrige Priorität.

Solange die Überarbeitung nur Namen ändert habe ich nix dagegen ;-)

Gruß,
Carsten
Post Reply