Seite 1 von 1
Python-LPT-i2c-eepromChipkarte
Verfasst: Samstag 6. September 2008, 08:38
von sea-live
Guten Tag
ich fang mal wieder ein neues projekt an die Suche hat nur schemenhaft in python Antworten geliefert
Ziel des Projektes
Python GUI Oberfläche auf DESKTOP WINPC -- Eingabe einer Zahl ZB (4)
am Lpt port hängt das hier
EASY I2c Progger
anhand der ziffer
wird ein bestimmtes EEprom array erstellt und an den i2c am LPT ausgegeben.
Chipkarte ST24C16 mit 2048 KB
EDIT1:
ich hab mir mal pyparallel und pyi2c runtergeladen und installiert
pyserial hab ich ausgeklinkt in der initDriver
Fehlermeldung
I2C need you to install and start GiveIO.sys driver to use printer port.
wo bekomm ich die sys her und wo muss die hin
nun wo steht da welcher portpin am lpt das SDA und SCL ist
bitte um hilfe
aktuelles programm
danke
Code: Alles auswählen
#! /usr/bin/env python
#
# python lpt1 to I2C to 24C16
#
import I2C
i = I2C.BusI2C()
print log
Verfasst: Samstag 6. September 2008, 11:55
von HWK
Meine Vermutung:
SDA liegt ja an Pin 12, SCL an Pin 13. Das bedeutet bei der Centronicsschnittstelle PaperEnd bzw. Select. Mit pyparallel müsstes Du diese Pins über getInPaperOut und getInSelected abfragen können.
MfG
HWK
Verfasst: Samstag 6. September 2008, 12:34
von sea-live
12 und 13 sind die rückmeldungen
setzen ist databit 0 negativSCL und datenbit 1 negativ sda
ich will erst mal schreiben bevor ich lesen werde wenn überhaupt
diese giveio.sys macht mir probleme
Verfasst: Samstag 6. September 2008, 13:15
von BlackJack
GiveIo.sys sollte eigentlich beim Windows-Installer mit installiert werden.
Verfasst: Samstag 6. September 2008, 14:55
von HWK
Das Schreiben ist ja noch einfacher: Du setzt Bits 0 und 1 des Datenbytes entsprechend und schreibst unter pyparallel mit setData().
Ich hatte anfangs auch Probleme, pyparallel zum Laufen zu bringen. Habe mir da verschiedene Archive im Internet heruntergeladen und verschiedene Treiber installiert. Was es dann zum Laufen gebracht hat, weiß ich jetzt nicht mehr genau. Ich merke jetzt aber gerade, dass pyparallel bei mir auch nicht mehr läuft.
Code: Alles auswählen
Traceback (most recent call last):
File "<pyshell#1>", line 1, in -toplevel-
p=Parallel()
File "C:\Programme\Python24\lib\site-packages\parallel\parallelwin32.py", line 74, in __init__
self.ctrlReg = _pyparallel.inp(self.ctrlRegAdr)
WindowsError: exception: priviledged instruction
Möglicherweise liegt es daran, weil ich zwischenzeitlich das XP SP3 eingespielt habe.
Wenn es Dich interessiert, kann ich Dir das, was ich heruntergeladen habe, zumailen. Dann kannst Du es selbst damit noch mal probieren. Teil mir dann bitte eine eMail-Adresse mit.
MfG
HWK
Edit1: Die habe ich noch gefunden:
http://code.astraw.com/dlportio.html
http://neil.fraser.name/software/lpt/
Die laufen zumindest bei mir. Sind aber natürlich etwas weniger elegant als pyparallel.
Edit2: Ich hab pyparallel jetzt doch wieder zum Laufen gebracht. Ich hatte zwar giveio.sys in C:\windows\system32\drivers, ich musste es aber erst mit LOADDRV.EXE (
http://home.snafu.de/mgrafe/loaddrv.htm) starten (Deja-Vu). Dann lief es problemlos:
Code: Alles auswählen
>>> import parallel
>>> p = parallel.Parallel()
>>> p.getInSelected()
1
>>> p.getInBusy()
True
>>>
Verfasst: Samstag 6. September 2008, 19:17
von sea-live
so alle treiber scheinen nun istalliert
jedenfals läuft die init mal durch
wo bekomm ich infos über dieses modul weis da wer was
wenn ich in die i2cadresse 160 wordadresse 2 eine 10 reinschreiben will
Port config des Parallelprot i2c ändern
bin völlig überfragt
Verfasst: Samstag 6. September 2008, 21:51
von HWK
Gern geschehen!
Verfasst: Sonntag 7. September 2008, 13:58
von sea-live
ich komm eifach nicht weiter
es werden so 4 module geöffnet mit dem aufruf import i2c
er kommt auch durch
ich finde nur diese write funktion in keinem wie kann man funktionen aufstöbern in importdateien
Code: Alles auswählen
def _start(self):
self.bus.write( sda=1, scl=1 )
self.bus.write( sda=0, scl=1 )
self.bus.write( sda=0, scl=0 )
Verfasst: Sonntag 7. September 2008, 15:19
von HWK
So groß ist das I2C-Package ja nicht, dass man sich die Module nicht einmal komplett anschauen könnte. Ein bisschen Eigeninitiave wäre vielleicht gar nicht so schlecht.
Code: Alles auswählen
>>> import I2C
>>> d = I2C.drivers.lpt.Driver('LPT1')
>>> d.write(sda=1, scl=1)
>>>
Auch etwas mehr Mühe bei der Rechtschreibung würde das Verstehen Deiner Fragen erheblich erleichtern.
Nochmals gern geschehen
HWK
Verfasst: Sonntag 7. September 2008, 15:27
von sea-live
die Lösung für das obige Schaltungsbeispiel Lautet
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: iso-8859-15 -*-
import parallel
import time
p = parallel.Parallel(port=0)
#AcHTUNG die obige schaltung hat wenn lpt data 0 ist positives scl und sda
#wenn D0 oder D1 = 1 dann ist SDA =0 oder SCL = o
# D0 = (0=scl) 1=NotSCL
# D1 = 0=sda 1 = notSDA
# sda=1, scl=1 =setData(0)
# sda=1, scl=0 =setData(1)
# sda=0, scl=1 =setData(2)
# sda=0, scl=0 =setData(3)
def start():
p.setData(0)# sda=1, scl=1
p.setData(2)# sda=0, scl=1
p.setData(3)#( sda=0, scl=0
def stop():
p.setData(3)#( sda=0, scl=0
p.setData(2)# sda=0, scl=1
p.setData(0)# sda=1, scl=1
def ack():
p.setData(1)# sda=1, scl=0
p.setData(0)# sda=1, scl=1
time.sleep(0.01)
p.setData(1)# sda=1, scl=0
def send(value):
x=0x80
while x:
sda=(x & value) and 1
if sda == 1 :
p.setData(1)# sda=1, scl=0
p.setData(0)# sda=1, scl=1
p.setData(1)# sda=1, scl=0
else:
p.setData(3)#sda=0, scl=0
p.setData(2)# sda=0, scl=1
p.setData(3)#sda=0, scl=0
x=x>>1
def writeRegister(address, register, value,):
start()
send(address)
ack()
send(register)
ack()
send(value)
ack()
stop()
writeRegister(160,1,5)
time.sleep(2)
p.setData(0)
print " done"