Python-LPT-i2c-eepromChipkarte

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
sea-live
User
Beiträge: 440
Registriert: Montag 18. Februar 2008, 12:24
Wohnort: RP

Samstag 6. September 2008, 08:38

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
Bild
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
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

Samstag 6. September 2008, 11:55

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
sea-live
User
Beiträge: 440
Registriert: Montag 18. Februar 2008, 12:24
Wohnort: RP

Samstag 6. September 2008, 12:34

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
BlackJack

Samstag 6. September 2008, 13:15

GiveIo.sys sollte eigentlich beim Windows-Installer mit installiert werden.
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

Samstag 6. September 2008, 14:55

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
>>> 
sea-live
User
Beiträge: 440
Registriert: Montag 18. Februar 2008, 12:24
Wohnort: RP

Samstag 6. September 2008, 19:17

so alle treiber scheinen nun istalliert
jedenfals läuft die init mal durch

Code: Alles auswählen

import I2C

i = I2C.BusI2C() 

print "init ok "
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
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

Samstag 6. September 2008, 21:51

Gern geschehen!
sea-live
User
Beiträge: 440
Registriert: Montag 18. Februar 2008, 12:24
Wohnort: RP

Sonntag 7. September 2008, 13:58

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 )
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

Sonntag 7. September 2008, 15:19

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. :wink:

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
sea-live
User
Beiträge: 440
Registriert: Montag 18. Februar 2008, 12:24
Wohnort: RP

Sonntag 7. September 2008, 15:27

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"

Antworten