Autor |
I2C Programmierung Suche nach: i2c (581) |
|
|
|
|
BID = 125145
slutz Neu hier
Beiträge: 20
|
|
Hallo Board,
ich möchte gerne mit einem i2C Interface eine Modellbahnanlage über den Computer steuern. Nur weiß ich momentan noch nicht wie ich die einzelnen Adressen über VB ansprechen kann. Kann mir da vielleicht jemand helfen?
Zur Info:
Anschluss des Interface an LPT1
gesteuert werden sollen ca. 30 Haltegleise / Signale
ca. 40-50 Weichen
Ich möchte dazu dann eine grafische Oberfläche Programmieren nur weiß ich eben nicht, wie ich die einzelnen ausgänge des i2C ansprechen kann.
Gruß
Stefan |
|
BID = 125160
MinceR Stammposter
Beiträge: 277
|
|
deine frage isn bissl verwirrend.
falls du wissen möchtest wie du mit Visual basic die ausgänge am lpt setzen und eingänge lesen kannst dann brauchste folgendes:
inpout32.dll heisst die datei. die musst du im windows system ordner haben. ansonsten ist das zugreifen meines wissens nach nicht möglich.
so du musst die datei inpout32.bas zu deinem projekt hinzufügen (irgendwo in der zip datei)
ach mal direkt: link zu zip ordner mit beispielen usw http://www.logix4u.net/inpout32_source_and_bins.zip
ein link zur erklärung der pins usw ist hier:
http://www.franksteinberg.de/progss.htm#TabelleSS
guck dir das mal an, ist eigentlich sehr einfach. wie gesagt nur inpout32.bas hinzufügen und inpout32.dll ins richtige windows system (oder wars system32?) dann kannste mit einfachen befehlen den port einlesen und ausgeben.
ach die pinne am lpt sind entweder nur ausgänge oder nur eingänge. musst also eine kleine platine löten damit du einen i2c bus steuern kannst. ist aber auch nur minimal.
hoffe dir geholfen zu haben.
MfG MinceR |
|
BID = 125171
MinceR Stammposter
Beiträge: 277
|
p.s. das was ich geschrieben hab ermöglicht dir erst mal die pinne auf 0/1 zu setzen und einzulesen.
wie du genau nen i2c bus ansprichst istn bissl komplizierter da es ja ein serieller bus ist und du bit für bit übertragen musst.
und ich hab gerade gelesen das man doch die data pins sowohl als ein als auch als ausgänge benutzen kann.. hät ich das mal eher gewusst.. :(
|
BID = 125211
SIGINT Stammposter
Beiträge: 381 Wohnort: Mönchengladbach
|
@MinceR: Das soll schon gehen,aber bei mir hat das unter Linux nicht funktioniert
Vielleicht geht das nur mit bestimmten IO Bausteinen.
@slutz:Es wäre nützlich,wenn du noch ein paar Infos posten würdest. Welches Interface nutzt du? Mit I2C-Bus Controller oder nur BitBanging?
Welche Adressen willst du ansprechen?!? Die Bausteine über ihre Adresse?
Bei Philips gibt es die genauen Spezifikationen zum I2C-Bus..
lies dir die man durch,dann sollten kaum Fragen offen beleiben.Und diese Fragen kann man schnell mit Google beantworten.
Gruß,
SIGINT
|
BID = 125305
slutz Neu hier
Beiträge: 20
|
Also ich habe mich im ersten Beitrag vielleicht etwas falsch ausgedrückt.
Ich habe einen I2C-Buscontroller mit angehängter Relaiskarte.
Den Schaltplan des I2C-Buscontrollers habe ich an diesen Beitrag angehängt. Den Schaltplan der Relaiskarte im nächsten Beitrag.
Ich möchte die Ausgänge an der Relaiskarte steuern. weis aber wie gesagt nicht wie.
Gruß
SLutz
|
BID = 125306
slutz Neu hier
Beiträge: 20
|
Schaltplan der Relaiskarte
|
BID = 125394
slutz Neu hier
Beiträge: 20
|
Übrigens der I2C Bus hängt nicht am Seriellen Anschluss sondern an LPT1 also parlell
|
BID = 125502
DonComi Inventar
Beiträge: 8605 Wohnort: Amerika
|
Ich steige da ehrlich gesagt nicht ganz durch. Wenn du, wie du sagstest, 40-50 Weichen steuern willst, warum benutzt du dann die Schaltung?
Damit kannst du doch nur 8 Sachen schalten.
An deiner Stelle würde ich das etwas anders machen: Ich würde die Ausgänge des Ports (Pin 2 - 9) erstmal mit 8 Widerständen auf Masse ziehen (Pull-down) und dann über einen oktal-Bustreiber (z.B. 74HCT244) an ein paar Binär-zu-Dezimal-Decodern anschließen.
Es gibt zwar meines Wissens nach keine 6-Bit-Dezimaldecoder, aber mit ein paar Logik-Gattern und Inhibit-Eingängen lässt sich bestimmt etwas mit dem 4-Bit-Decoder 4514 von Motorola anfangen.
Du kannst dann ein Byte per VB rüberschicken, meinetwegen 4, dann wird dort der Ausgang "4" aktiv.
Nachteil dieser Art ist sicherlich, dass immer nur ein Ausgang aktiv sein kann, aber das kann man mit RS-Speichern oder T-FlipFlops (erster Impuls an, zweiter Impuls aus) lösen.
Bin mal gespannt, ob jemand anderes eine andere Möglichkeit, vielleicht doch über I2C hat, aber das ist wie gesagt seriell.
Und einfach wird es bei 40-50 Kanälen auch nicht.
_________________
|
BID = 125504
slutz Neu hier
Beiträge: 20
|
Ich kann doch mehrere Relaiskarten an das Interface anschließen. Ich muss eben jeder der Karten eine andere Adresse geben.
Aber zu deiner Lösung: hast du mir da eventuell ein passendes Schaltbild? Kann ich da auch wieder Daten einlesen zwecks Rückmeldungen (Gleisbesetztmeldungen / Schaltanforderungen)?
_________________
[ Diese Nachricht wurde geändert von: slutz am 9 Nov 2004 11:00 ]
|
BID = 125672
Tim B. gesperrt
|
Ich würde die I2C lösung weiter verfolgen, da dieses System am flexibelsten für deine Anwendung und spätere Erweiterungen ist.
Ähnlich dem 8574 I2C->8 Bit Parallel Umsetzer IC wie auf der Relaiskarte gibt es in I2C Technik sicher auch 8Bit->I2C umsetzer, die ein auslesen von 8 Statussignalen über den I2C Bus ermöglichen. Die Philips Webseite hilft hier sicher weiter.
Das Ansprechen von I2C mittels dem als Philips Simpel-Interface bekannten Verhau von Open Collector Puffern am Parallelport bedarf unter Lunix/Windows9x nicht nur einer DLL (unter Windoof XP geht das dank des M$ Treiberkonzepts eh nicht mehr), sondern auch einer Sende/Empfangs Prozedur, deren Timing nicht unkritisch ist. Immerhin ist das I2c Protokoll eine serielle Übertragung bei der nicht zuletzt auch die zeitliche Abfolge der Flankenwechsel zwischen Data und Clock sehr wichtig sind.
Es gibt eine s.g. I2C FAQ, die ein entsprechendes Programmbeispiel in Visual Basic enthält. Das ganze lässt sich auch sehr gut auf ein GW oder QBasic portieren/ evtl. compilieren und auf den ältesten Rechnern unter DOS mit ausgezeichneter Stabilität betreiben. Außerdem: Google suchen hilft hier.
Ein wenig Infos gibt es auch hier:
http://home.welfen-netz.de/IngoGerlach/i2c_par/i2c_par.htm
Allerdings würde ich auf der PC->I2C Interface Seite den PCF8584 Chip von Philips in Betracht ziehen. Dieser Chip kümmert sich um das I2C Protokoll und Timing für Senden und Empfangen von I2C Daten und bietet zum PC hin eine zeitunkritische, parallele I/O Datenkommunikation. Entsprechende Bauanleitungen für Parallele Interfacekarten mit PCF8584 und zum PCF8584 passende DLLs sollten sich per Google-Suche und auf der PH Webseite finden lassen.
|
BID = 125821
MinceR Stammposter
Beiträge: 277
|
würde die dll unter windoof xp nicht funktionieren hätte ich es gepostet!
diese dll ist so konzipiert das sie unter xp/nt/2000 einen treiber installiert und somit den ausgang für sich belegt. alles in der dll verpackt. unter 98 ging das mit dieser dll schon was länger. die xp unterstützung ist mir auch seit ca 3 monaten bekannt. unter linux hingegen sollte ein zugreifen auf den lpt relativ einfach sein. (hab ich mir sagen lassen!!)
ja du musst dir eine funktion / procedure schreiben der du die adresse und den wert übergibst bzw ausliest. hab ich leider nicht für vb, und auch nirgends gefunden. für nen erfahrenen VB programmierer sollte es jedoch ein geringeres problem sein.
falls jemand sowas schon hat bitte mal melden. hätt ich auch gern
da es sich meines wissen beim i2c um einen syncronen datenbus handelt sollte zeitkritisch da meines erachtens nach keine probleme auftreten. als kompiliertes programm war das absolute maximum was ich (ohne sinnvoll was zu machen) auf ne tacktleitung kriegte ~80kHz vom LPT aus. wenn der ganze kram nacher nur mit mit nem scl von 1kHz arbeitet weil der rechner so beschäftigt ist isses doch auch egal. hauptsache der scl passt zum sda
was du da hast ist schon mal ein anfang aber wie gesagt, vorgefertigte programmroutinen hab ich noch nicht gefunden.. also solltest du schon was übung in VB und bus systemen haben um das hinzukriegen. wie der i2c bus arbeitet ist auch im datenblatt des PCF8574 drin.
@tim b.
der pcf8574 ist ein io expander. kannst also auch was damit einlesen. wenn ich das ausm datenblatt richtig verstanden hab musste den ausgang ein mal auf H setzen, dann das R/W auf 0 und dann kannste mit dem nachfolgenden byte bestimmen welcher als eingang geschaltet werden soll. ausgelesen werden dann alle. das ic was du noch gepostet hast ist sehr interressant, nur ich find es ist schwerer das ding via lpt als master zu benutzen als eine routine zu schreiben die nur daten sendet..
"80XX-type interface" und "68000-type interface" hab ich leider noch nix von gehört.. bin aber auch noch nicht so erfahren dadrin
@SIGINT: was für io bausteine meinst denn du? die pcf8574 gibts meines wissens in 2 ausführungen. da ist dann irgendwie was mit den adress bits um mehr i/o expander an den bus haun zu können. ich glaub die hiessen pcf8574a ???
MfG MinceR
[ Diese Nachricht wurde geändert von: MinceR am 9 Nov 2004 22:12 ]
|
BID = 125827
MinceR Stammposter
Beiträge: 277
|
jou ich hab das mit dem pcf8574a gerade gefunden. die adresse ist anders um 8 "normale" und zusätzlich 8 vom typ a ranhängen zu können.
zum bild: a. ist pcf8574 und bild b ist 8574a
|
BID = 125946
slutz Neu hier
Beiträge: 20
|
Hallo,
hab noch was anderes gefunden.
Ein 64-Bit IO USB-Device
Ich habe bei dieser Lösung mit einem USB Stecker 64 Ausgangskanäle und 64 Eingangskanäle. Außerdem gibt es schon eine Beispielsoftware in VB. Muss ich mir heute Abend mal noch in Ruhe genauer anschauen.
_________________
|