PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : PCF8591 und MCP23017 bei fast i2c (400kHz) ?



HaWe
24.08.2016, 22:09
hallo,
wer weiß, ob man PCF8591 und MCP23017 bei fast i2c (400kHz) betreiben kann ?
Falls diese Typen nicht: mit welchen IC Varianten geht es eventuell? ( zB ggf PCA8591 statt PCF8591 ? )
Irgendwie kann ich keine genauen Links dazu finden.

RoboHolIC
24.08.2016, 23:19
Irgendwie kann ich keine genauen Links dazu finden.
Komisch, ich hatte die Informationen binnen fünf Minuten in den Datenblättern recherchiert.

Ich will sie dir aber nicht vorenthalten:
- Der MCP23017 ist für 100kHz, 400kHz und 1,7MHz spezifiziert.
- Der PCF8591 ist für 100kHz spezifiziert.

Wie immer gilt:
Die Spezifikation ist das eine - was eventuell unter nicht-deklarierten Umständen bei anderen Bastlern erstaunlich gut doch funktioniert, das ist was anderes.
Mehr ist dazu nicht zu sagen.

Doch, ja , vielleicht noch der Hinweis, dass der 400kHz-Betrieb -soweit ich mich erinnere- eine Umschaltung der Betriebsart erfordert, nicht allein eine schnellere Taktung der Clock-Leitung. Das hab ich aber bisher noch nicht benötigt.

HaWe
25.08.2016, 08:55
danke, ich habe nach den entsprechenden Stichworten gesucht aber nirgends was gefunden. Kannst du deine Fundstellen bitte mal verlinken?

Das mit dem MCP23017 ist schon mal gut, wenn er ohne Umschaltung mit 400 kHz liefe um so besser, aber muss man jetzt umschalten oder konfigurieren oder nicht, und wenn ja: wie?

Das mit dem PCF8591 ist schade, das macht ihn unbrauchbar für meinen Bus und meine Zwecke, denn der Bus soll auf 400kHz laufen (u.a. für Quadratur-Encoder und pwm). Gibt es zum PCF8591 eine 400 kHz (fast i2c) Alternative?

Wenn es ein ganz anderer IC mit ganz anderem Protokoll ist, bräuchte ich dazu allerdings auch ein WiringPi/C Programmierbeispiel (wäre dann was fürs Raspi Forum).

Ceos
25.08.2016, 08:56
Denk daran die Pull Up Widerstände zu verkleinern, im 400kHz Modus braucht es steilere Flanken!

HaWe
25.08.2016, 09:02
danke für den Hinweis! der Pi hat 2x 1.8k eingebaut, eventuell könnte man ja noch 2x 4.7k am Chip dazu schalten?
(Der MCP läuft dabei ja auf dem selben 3.3V Level, der PCF bräuchte eh noch welche auf 5V)

aber erstmal müssen ja die Muxer-Chips mit 400k laufen, nur wie...!?

Ceos
25.08.2016, 09:05
1.8k ist bereits ziemlich niedrig, das reicht eigentlich, wenn die Leitung aber länger (>30cm) wird wären zusätzliche 2.2k auf der anderen Seite nicht verkehrt, 4.7k könnten auch schon reichen, kommt halt stark auf die Kabellänge, Verlegungsart usw. an

HaWe
25.08.2016, 09:13
ja, danke, probier ich dann aus. Kabellänge zu den Muxer-Chips ist 10-20cm etwa, daran solls aber nicht scheitern.

Also nochmal die Frage zu den ICs:



Das mit dem MCP23017 ist schon mal gut, wenn er ohne Umschaltung mit 400 kHz liefe um so besser, aber muss man jetzt umschalten oder konfigurieren oder nicht, und wenn ja: wie?
Das mit dem PCF8591 ist schade, das macht ihn unbrauchbar für meinen Bus und meine Zwecke, denn der Bus soll auf 400kHz laufen (u.a. für Quadratur-Encoder und pwm). Gibt es zum PCF8591 eine 400 kHz (fast i2c) Alternative?
Wenn es ein ganz anderer IC mit ganz anderem Protokoll ist, bräuchte ich dazu allerdings auch ein WiringPi/C Programmierbeispiel (wäre dann was fürs Raspi Forum).

RoboHolIC
26.08.2016, 01:30
Das Datenblatt zum MCP23017 gibt es beim Hersteller, also www.microchip.com (http://www.microchip.com), dort ggf. die Suchfunktion bemühen, oder eben googlen nach "MCP23017 pdf". PDFs lassen sich fast immer per Textsuche auf die Schlüsselbegriffe absuchen.
Im Datenblatt findet sich i.d.R. eine Angabe der maximal zulässigen Clockfrequenz fCLK.

Die fast-Konfiguration beim MCP besteht (unter anderem ??) darin, die SlewRate-Control zu aktivieren; m.W. sorgt die dafür, dass die schnellen Flanken vor dem Durchstoßen des GND-Potentials abgebremst werden und ein Unterschwingen in den negativen Bereich verhindert wird.

Einen Wandler mit Fast-I2C zu finden, dürfte keine echte Hürde sein, vorschlagen kann ich aber grad nichts. Wandlungs-Raten oberhalb 10 kHz machen ja nur mit schnellerem Bus einen Sinn.

HaWe
26.08.2016, 09:49
ok, danke, aber in den Datenblättern finde ich nichts konkretes, das sagte ich doch schon, und darum geht es aber, denn ich brauche da praktische, handhabbare und handfeste Informationen. Gerade deine Vermutung um MCP23017 und einer extra Konfiguration von fast-i2c ist ja nicht bestätigt oder gelöst, und auch einen Ersatzchip für den PCF8591 mit fast-i2c hat noch keiner genannt, also in welchen "Datenblättern von den Herstellern" soll ich dann bitte gucken???
Also nochmal die Frage zu den ICs:


Das mit dem MCP23017 ist schon mal gut, wenn er ohne Umschaltung mit 400 kHz liefe um so besser, aber muss man jetzt umschalten oder konfigurieren oder nicht, und wenn ja: wie?
Das mit dem PCF8591 ist schade, das macht ihn unbrauchbar für meinen Bus und meine Zwecke, denn der Bus soll auf 400kHz laufen (u.a. für Quadratur-Encoder und pwm). Gibt es zum PCF8591 eine 400 kHz (fast i2c) Alternative?
Wenn es ein ganz anderer IC mit ganz anderem Protokoll ist, bräuchte ich dazu allerdings auch ein WiringPi/C Programmierbeispiel (wäre dann was fürs Raspi Forum).

RoboHolIC
26.08.2016, 18:11
Googeln mit "adu adc fast i2c" liefert beispielsweise A/D-Wandler mit I2C-Interface. Ich habe die Suchergebnisse nicht durchgegefilzt, aber man findet so zumindest die Hersteller dieser ICs. Damit hat man einen ersten Angriffspunkt bei der Suche.

Was den MCP23017 betrifft, da hatte ich dir aufgezeigt, wie du das Datenblatt finden kannst, hatte den Hersteller-Link expressis verbis benannt, mich allerdings mit dem Suchbegriff fCLK vertan: dieser Parameter wird nur bei der SPI-Variante dieses Chips verwendet.
Die drei Modi 100/400/1700kHz werden zwar benannt, eine Mode-Umschaltung hab ich aber nicht wiedergefunden (Irrtum oder anderer Chip - keine Ahnung mehr, woher dieser Erinnerungsfetzen stammt).
Das Bit zur Slew Rate Control-Schaltung heisst DISSLW, diese wird aber nicht näher beschrieben.


aber in den Datenblättern finde ich nichts konkretes, das sagte ich doch schon, und darum geht es aber, denn ich brauche da praktische, handhabbare und handfeste Informationen. Willst du auf der Basis einer Chip-Spezifikation anhand von Erfahrungsberichten was entwickeln?? Oder doch lieber gleich was Fertiges??? Wenn es letzteres ist, dann sei so ehrlich - dann bin ich nämlich raus.

HaWe
26.08.2016, 20:59
1.) ich habe ja in deinen mcp23017-Link/pdf ebenfalls gesucht, aber eben auch nichts über Frequenz-Umschaltung gefunden, daher meine Rückfrage. Verstehe ich jetzt richtig, dass für i2c alle Modi, insb. 100 u. 400 kHz, alle automatisch funktionieren, ohne Umschaltung?

2.) Mit dem PCF8591 bin ich trotzdem nicht weiter. Dass er nicht 400kHz schafft, hast du ja geschrieben (gefunden habe ich das auch nicht, sondern nur dass er 100kHz schafft). Das hieße also, man braucht einen als 400kHz-Ausführung. Welchen also? Bitte keinen ungenauen Google-Suchbegriffe, bitte genaue Angaben!

3.) Beim PCF8574 ist es ja so, dass dieser nur 100kHz kann, der PCA8574 hingegen auch 400kHz. Das ließe darauf spekulieren, dass, wenn es einen PCA8591 gäbe, dieser aus Namens-Analogiegründen ebenfalls dann 400kHz schaffte. Ob das allerdings zielführend ist...?

4.) Mit deinen Suchbegriffen "adu adc ..." kann ich übrigens auch nichts anfangen, aber ich brauche ja eh keine Suchbegriffe, sondern exakte IC-Namen.
Nochmal: ich brauche keine Hilfestellung für Suchbegriffe sondern exakte Antworten. Also bitte keine Suchwörter "wie ich was finden könnte" mehr!
Wenn du was gefunden hast, sag es (oder wer immer was weiß), dann kann man nach den Details weitersuchen.

5.) Mit deiner Frage zu "was fertiges... und dann Raus-Sein" kann ich ebenfalls nichts anfangen. Wozu ich die ICs brauche, habe ich oben geschrieben: als digitale und analoge Muxer am Pi. MCP23017 und PCF8591 habe ich hier rumliegen, Prototyping-HATs auch, beim Löten bekomme ich Hilfe, es kommen Schraubklemmen an die I/Os zur flexiblen Verkabelung. I2C Verbindung entweder über die Pi Stacking Header oder über 6x Stecker/Buchsen. Die MCPs scheinen ja nun wohl (hoffentlich) zu funktionieren, meine PCFs aber kann ich nun ja in die Tonne kloppen, den Ersatz suche ich bekanntlich - so sieht zumindest mein Plan A aus.

RoboHolIC
26.08.2016, 23:45
zu 1)
anscheinend ohne Umschaltung, obwohl das Datenblatt von verschiedenen Modi schreibt.
Man kann wohl in kritischen Konstellationen (?lange Buslkeitungen??) oder zur Geschwindigkeitsoptimierung per bit DISSLW etwas am Bustiming drehen.

zu 2)
Du willst etwas auf die Beine stellen, aber ich bin nicht dein Dienstmädchen.

zu 3)
Suche nach PCA8591 und prüfe gegebenenfalls das Datenblatt. Das ist zielführend.

zu 4)
Tut mir Leid.
Dann werde ich dir in Zukunft keine Hilfestellungen mehr geben.
Des weiteren gilt das zu 2) gesagte.

zu 5)
... dann bist du ja auf einem guten Weg mit deinem Projekt.

HaWe
27.08.2016, 09:45
dann vielen Dank für deine bisherigen Hinweise zum MCP23017.

Von Dienstmädchen war nicht die Rede, ich fragte: wer was weiß, nicht: wer für mich eine Suchdienstleistung durchführen kann.
Datenblätter kann ich nicht lesen, die massigen und verwirrenden Informationen erschlagen mich, und selbst wenn ich etwas punktuell fände (z.B. Frequenz), könnte ich nicht sicher sein, etwas entscheidendes dabei zu übersehen (z.B. zur Kompatibiltät). Daher auch meine Frage, wer was über die Fragestellung bereits weiß und kennt. Da sich ntl jeder zu irgendeinem Detail aus der Erinnerung täuschen kann (was ganz normal ist, wie z.B. deine Sache mit der Umschaltung), sind bei Antworten aber Links zu Referenzstellen notwendig und hilfreich (Quelle, Seite).

edit, wegen:
Suche nach PCA8591 und prüfe gegebenenfalls das Datenblatt. Das ist zielführend.
ein Datenblatt etc. über einen "PCA8591" finde ich nicht mit Angaben zu 400kHz (oder nicht) und zu elektrischer oder programiertechnischer PCF8591-Kompatibilität, selbstverständlich hatte ich danach auch längst selber schon gegoogelt.
- Du etwa?


Zum PCF8591:
gesucht wird also nach wie vor ein PCF8591-kompatibler IC für fast-i2c (400kHz).
(Kompatibel deshalb, weil es auch um die spätere Programmierung auf dem Raspi in C/WiringPi geht. Völlig andere Chips erstmal nicht, weil es dann wschl Programmierprobleme gibt - außer es findet sich wirklich nichts 100% PCF8591-kompatibles, dann muss man später auch in diesen anderen Richtungen suchen.)

Daher also an den Rest der Chip-Fachleute hier, denn so außergewöhnlich oder so unbekannt dürfte die Fragestellung doch wohl in Fachkreisen kaum sein:

Wer kennt einen zum PCF8591 kompatiblen Chip, der sich mit fast-i2c (400kHz) betreiben lässt?

Mxt
27.08.2016, 14:31
Ich weiß ja nicht, wo ihr sucht. Aber von der entsprechenden Produktauswahl beim Hersteller wird man ja nicht gerade erschlagen.
http://www.nxp.com/products/interface-and-connectivity/interface-and-system-management/i2c-bus-portfolio/i2c-dacs-and-adcs:MC_43674?tab=Products

Will heißen, der PCF8591 ist das einzige (letzte ?) lieferbare Bautteil aus dieser Familie. Da gibt es sonst nur noch einen anderen, aber wenn da kein "Buy Options" steht, kann man den eh vergessen.

HaWe
27.08.2016, 15:31
danke für die Info, dann ists mir klar, warum ich nichts finde für PCF8591 und 400kHz.
Dann kann man den also abhaken. Weil man es dann aber wohl sowieso mit ganz anderen ICs und mit anderen Protokollen zu tun bekommt:
Was schlägst du denn für einen grob vergleichbaren ADC vor für 400kHz, evtl. auch 8 oder 16 statt 4 pins, und programmierbar mit wiringPi / wiringI2C ?
8bit Auflösung reicht mir dabei an sich, da der nur für IR Sensoren u.ä. bestimmt ist im 0-150cm Bereich mit 1cm-Auflösung, und 1 Byte lässt sich schneller pollen als 2 mit MSB und LSB.

Mxt
27.08.2016, 15:45
Der große AD-Wandler Speziallist bin ich nicht, normalerweise reichen mir die im Mikrocontroller eingebauten.

Schon mal wichtig ist die Info, dass du anscheinend nur Eingänge brauchst. Der PCF8591 scheint wirklich der einzige AD-DA-Kombichip zu sein, den es als DIP-Gehäuse gibt.

Damit bin ich beim nächsten Problem. AD-Wandler mit I2C sind auch eher selten. Der am meisten verbreitete AD-Wandler am Pi scheint der MCP3008 zu sein, das ist aber ein SPI-Chip. Es gibt in dessen Familie auch welche mit I2C. Allerdings nur in sehr kleinen SMD-Gehäusen.

Das scheint bei den anderen Herstellern ähnlich zu sein. Kann auf die Schnelle keinen anderen I2C AD in DIP-Gehäuse finden.

HaWe
27.08.2016, 15:52
Danke erst mal, und ja, das stimmt, ich brauche tatsächlich nur die ADC, kein DAC. Die SPI Pins wollte ich nicht belegen (SPI deaktiviert beim Pi), da ich eh zu wenige GPIO Pins habe, und i2c-0 wollte ich auch nicht unbedingt nutzen, weil mir sehr viele davon abgeraten haben, denn i2c-0 wird intern für Pi Cam und verschiedene 3rd Party HATs benutzt und die funktionieren dann evtl. nicht mehr oder nicht mehr richtig.
Gut und sinnvoll wäre also tatsächlich nur ein 400kHz i2c-ADC.

Hoffentlich findet sich hier doch noch was...

Mxt
27.08.2016, 16:04
In SMD und ohne Wissen um WiringPi Nutzbarkeit habe ich z.B. bei Conrad die Nr. 1186803 gefunden. Ein 8-Bit AD Wandler, laut Datenblatt geht I2C bis 3,4 MHz.

HaWe
27.08.2016, 16:11
jap, als DIP wär der nicht schlecht, glaube ich! Programmierung müsste dann allerdings auch noch irgendwo genau stehen.

Mxt
27.08.2016, 16:12
Das hier habe ich gerade gefunden, der gleiche Chip auf Platine mit Quellcode
https://github.com/ControlEverythingCommunity/ADS7830

HaWe
27.08.2016, 16:33
klasse, wir kommen der Sache näher! :)
So eine Platine mit diesen Sonder-Steckbuchen ist jetzt nicht ganz einfach für mich anzuschließen, was ist das für eine Steckernorm?
Den Hersteller dieser Platine suche ich mal!
Danke nochmals für deine Vorschläge und Links!

Mxt
27.08.2016, 16:47
Solche Stecker hab ich auch noch nicht gesehen.

Conrad hätte übrigens mit der 1274813 eine Adapterplatine zu DIP. Muss man halt selber das IC und Pins anlöten.

Diese Platinen haben zwei Seiten, eine mit 1,27er Abstand die andere mit 0,65. Die breitere Variante habe ich erst vorgestern mit einem normalen Lötkolben gelötet. Daher halte ich auch die schmale mit etwas Übung für machbar. Was aber nicht heißen soll, dass ich mich dafür anbiete. ;)

HaWe
27.08.2016, 17:14
haha, ok, dann frage ich also doch nicht... ;)
aber jemanden der SMD löten kann den kenne ich hier nicht. 2,54 mm ist das höchste der Gefühle, und auch das hat schon Murks gegeben. Außerdem passen SMDs i.P. auch gar nicht auf meine 2.54mm Prototye HATs.
Bleiben also nur die großen DIP Gehäuse als Lösung, oder die komplette Platine (was wieder Löten spart) mit passenden Steckern.

021aet04
27.08.2016, 18:36
Bei dem ADS... Modul könnte man eventuell normale Sip-Leisten verwenden (Wenn ich mir die Klemmen ansehe könnte das ein 2,54mm Raster sein, habe nur am Foto geschaut). Ansonsten Stecker demontieren und normale Flachbandleitung mit Steckern im 2,54mm Raster anlöten.

Du könntest auch ein Modul bauen, mit eigener Logik (Mikrocontroller), der die Anpassungen,... übernimmt. Gleichzeitig wandelt dieser die Signale der Schnittstellen, somit wärst du auf keinen Bus beschränkt. Verbindung zwischen Pi un Modul mit Uart und am Modul einen beliebigen Bus (I2C, SPI, interne AD von uC,....).

MfG Hannes

HaWe
27.08.2016, 19:16
erinnert mich ein wenig an die Seeed Studio Buchsen wie hier auf dem Motorshield:
http://wiki.seeedstudio.com/wiki/Motor_Shield_V1.0
wo es diese ADC-Platine allerdings gibt, die mxt verlinkt hat, habe ich noch nicht herausgefunden

Mxt
28.08.2016, 08:52
Du könntest auch ein Modul bauen, mit eigener Logik (Mikrocontroller), der die Anpassungen,... übernimmt. Gleichzeitig wandelt dieser die Signale der Schnittstellen, somit wärst du auf keinen Bus beschränkt. Verbindung zwischen Pi un Modul mit Uart und am Modul einen beliebigen Bus (I2C, SPI, interne AD von uC,....).


Ja, so würde ich es auch machen.

Ich skizziere mal ein paar Lösungen mit Teilen aus meiner Bastelkiste:

Zunächst braucht der Pi einen freien USB-Port, also ggf. zusätzlichen Hub vorsehen.

Variante 1: Es wird nur eine "Außenstation" gebraucht
Vom Pi über USB-Kabel zu einem Mikrocontrollerboard, z.B. Teensy oder Arduino Micro.

Variante 2: Bis zu 3 Außenstationen
Ein Teensy mit kurzem USB-Kabel am Pi. An Serial1, 2 und 3 die Satelliten.

Variante 3a: Viele Außenstationen
Ein Teensy oder Arduino Micro mit kurzem USB-Kabel am Pi. An Serial1 und einem IO-Pin einen MAX485 (8pol. DIP-IC).
Alle Satelliten auch mit MAX485 und Controllerboard. Der Bus ist dann RS485, zum Programmieren braucht man nur Serial.

Variante 3b: Viele Außenstationen
Ein Teensy mit kurzem USB-Kabel am Pi. Daran ein MCP2551 (8pol. DIP-IC).
Alle Satelliten auch mit MCP2551 und Teensy. Der Bus ist dann CAN, zum Programmieren braucht man nur die bei Teensyduino enthaltene FlexCAN-Library.

HaWe
28.08.2016, 09:08
tja, schade, der SMD Chip fällt flach, weil SMD Chips keiner hier auf die HATs löten kann und die fertige Platine als Ersatz habe ich auch noch nirgends gefunden :(

Arduinos als Ersatz wären allerhöchstens mein Plan B, denn die haben keine mind. 8 analog-Ports (außer der Due), sie laufen (wenn überhaupt) nur schlecht mit dem Pi wegen clock stretching Problemen (Due geht grad so), und wenn sie laufen, dann auch nur bis 100kHz.
Damit können sie nicht auf i2c-1 mit den MCPs auf 400kHz laufen.
USB kommt aber nicht in Frage, da alle USB Ports am Pi belegt sind. Daneben nehmen dann die programmiermäßigen "logistischen" Probleme überhand, was der Grund ist, dass ich weg vom Due will (was ich schon mache und gemacht habe) und stattdessen "normale" schnelle i2c Chips als "reine Muxer " einsetzen will.

Andere Vorschläge für einen 400kHz ADC Muxer im 2,54mm DIP Format?

Mxt
28.08.2016, 09:42
Ich habe jetzt alle Hersteller durch, die ich kenne:

NXP: nur den bekannten
Microchip: DIP nur als SPI
ST: nur als Mikrocontroller
TI : kein DIP
LT : kein DIP
AD : nur ein 8-Bit Wandler als DIP, kein I2C, könnte man aber an einen MCP23017 hängen, AD7819. (Den hat auch TI als ADS7819)

HaWe
28.08.2016, 09:44
zu blöd, SMD geht ja nicht :(
koppeln mit MCPs ist mir wieder logistisch viel zu aufwändig, das macht keinen Sinn.
Dann schon lieber doch den i2c-0 zusätzlich aktivieren, was eigentlich nicht hätte geschehen sollen... :(