Forum: Mikrocontroller und Digitale Elektronik I2C IO-Expander mit mind. 4Bits zur freien Adressvergabe.


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Dominic F. (do_dome)


Lesenswert?

Hallo, ich suche einen I2C-IO-Expander(mind. 4 Ausgänge) mit mindestens 
4 Bits zur freien Adressierung (benötige 10 Expander). Sonst keine 
Einschränkungen. Danke.

: Bearbeitet durch User
von Dietmar S. (df8de)


Lesenswert?

Eine Mischung aus PCF8574 und PCF8574A sollte deine Anforderungen 
erfüllen.

von Carsten-Peter C. (carsten-p)


Angehängte Dateien:

Lesenswert?

Moin,
vielleicht kannst Du einen ATtiny nehmen. Mit dem ATtiny2313A/4313 
hättest Du 15 oder 16 freie Pins. Ev. ATtiny24/44/84 oder ATtiny25/45/85 
mit dementsprechend weniger Pins gehen natürlich auch. Den Adressbereich 
kannst Du frei wählen. Die angehängte SW habe ich vor längerer Zeit bei 
http://www.avrfreaks.net gefunden. Ist aber nicht mehr da. Über den 
I2C-Bus liest und schreibst Du direkt den SRAM- Speicher. Nun brauchst 
Du nur noch ein kleines Programm, das die gewünschten Ein und Ausgänge 
in den SRAM schreibt bzw. liest. Auch PWM oder ADC liese sich so nutzen. 
Das Programm PowerMCU.asm läuft sehr zuverlässig.
Gruß
 Carsten

von Pat A. (patamat)


Lesenswert?

Dietmar S. schrieb:
> Mischung aus PCF8574 und PCF8574A

Ebenso auch PCA9554 und PCA9554A.

von Ob S. (Firma: 1984now) (observer)


Lesenswert?

Carsten-Peter C. schrieb:

> Die angehängte SW habe ich vor längerer Zeit bei
> http://www.avrfreaks.net gefunden.

Das Programm alleine nützt ihm nichts. Das verwendet reichlich 
proprietäre Makros. Die sind sehr wahrscheinlich in der "avr.inc" 
deklariert, die vom Programm referenziert wird, die du aber nicht dazu 
gepackt hast.

> Nun brauchst
> Du nur noch ein kleines Programm, das die gewünschten Ein und Ausgänge
> in den SRAM schreibt bzw. liest.

Nein, braucht er nicht. Alle IO-Register sind auch im SRAM-Space 
gemapped und lassen sich mit den üblichen Instruktionen zum SRAM-Zugriff 
dort ansprechen. D.h.: wenn das Programm an sich funktioniert, kann man 
alleine damit auch auf die PORTx-, DDRx- und PINx-Register zugreifen. 
Deren Adressen im SRAM-Space entsprechen den Adressen im IO-Space + 
0x20.

von Gerhard O. (gerhard_)


Lesenswert?

Moin,

Seht euch mal den PCA9655E(9654E) an. Mit geeigneter Kombination der 
Adress-Pins (siehe Table 6) lassen sich bis zu 64 Adressen einstellen. 
Manko: 8/16-bits

https://www.onsemi.com/pdf/datasheet/pca9655e-d.pdf

Vielleicht gibt es noch mehr von der Sorte mit weniger IO.

Gerhard

: Bearbeitet durch User
von Carsten-Peter C. (carsten-p)


Lesenswert?

Ob S. schrieb:
> Das Programm alleine nützt ihm nichts. Das verwendet reichlich
> proprietäre Makros. Die sind sehr wahrscheinlich in der "avr.inc"
> deklariert, die vom Programm referenziert wird, die du aber nicht dazu
> gepackt hast.

Moin,
Du hast Recht, das sind nur die Treiber für den Slave I2C.
Die Dateien "tn2313def.inc" und "avr.inc" findet man leicht im 
AtmelStudio und müssen in das Verzeichnis kopiert werden, wo Deine .asm 
sich befindet. Danach lassen sich die Daten aus und vom SRAM lesen und 
beschreiben. Ob auch andere Bereiche adressierbar sind, habe ich nicht 
probiert. Es sollte einfach sein, einen Port abzufragen und ins SRAM zu 
schieben und umgekehrt. Wenn Du nicht damit zurecht kommst, kann ich Dir 
gerne behilflich sein.
Gruß
 Carsten

Beitrag #7638186 wurde vom Autor gelöscht.
von Ob S. (Firma: 1984now) (observer)


Lesenswert?

Carsten-Peter C. schrieb:

> Du hast Recht, das sind nur die Treiber für den Slave I2C.

Das war ja soweit auch richtig und gut.

> Die Dateien "tn2313def.inc" und "avr.inc" findet man leicht im
> AtmelStudio

Die "tn2313def.inc" ja, das ist das, was Atmel/Microchip liefert.

Aber die "avr.inc" nein. Die ist proprietär, also von irgendwem selbst 
geschrieben. Wahrscheinlich von dem, der die darin deklarierten Makros 
dann in seinem Programm genutzt hat. Wer auch immer sie geschrieben hat, 
sie ist jedenfalls nicht im Lieferumfang irgendeines AtmelStudios.

> Wenn Du nicht damit zurecht kommst, kann ich Dir
> gerne behilflich sein.

Ich komme locker damit zurecht, sogar ohne die fehlenden Makros. Ich 
kann mir leicht zusammenreimen, was darin stand.

Aber der TO, dem du diese Lösung empfohlen hast, der kann das vermutlich 
nicht. Der braucht sehr wahrscheinlich diese "avr.inc", um überhaupt 
eine Chance zu haben, damit etwas anfangen zu können. Also wenigstens so 
weit, dass er ein Programm überhaupt erstmal assembliert bekommen würde.

Ob er dann in der Lage sein würde, den funktionierenden Slave auch 
sinnvoll bezüglich seiner eigentlichen Zielstellung zu nutzen, ist schon 
wieder eine andere Frage. Die Software würde es aber immerhin hergeben.

von Carsten-Peter C. (carsten-p)


Angehängte Dateien:

Lesenswert?

Moin,
ich habe den Treiber empfohlen, weil ich damit gute Erfahrungen gemacht 
habe. Ich nutze das Atmel Studio 6.2 (vorher 6.0) unter Win XP. Dort war 
die Datei noch zu finden. Ich nutze das für meinen Dimmer 
(Beitrag "4-fach Dimmer 2Stromstoßschalter Schaltuhr"), für das Datensammeln 
des Stromzählers, des Gaszählers und einer Temperaturregelung. Mann kann 
eben damit nicht nur Ports bedienen (PWM, AC, ADC, Counter, EEPROM, Uhr 
usw.). Wenn jemand daran Interesse hat, gebe ich es gerne weiter. Nur 
aufräumen werde ich das nicht. Da der TO sich nicht weiter gemeldet hat, 
wird das wohl nicht interessant für ihn sein.
Gruß
 Carsten

von Ob S. (Firma: 1984now) (observer)


Lesenswert?

Carsten-Peter C. schrieb:

> ich habe den Treiber empfohlen, weil ich damit gute Erfahrungen gemacht
> habe. Ich nutze das Atmel Studio 6.2 (vorher 6.0) unter Win XP. Dort war
> die Datei noch zu finden.

Nur deshalb, weil sie irgendwer irgendwann mal dorthin kopiert hat. 
Standardmäßig wurde sie von Atmel niemals ausgeliefert.

Sieht man übrigens auch leicht am Inhalt: Das ist zu erheblichen Teilen 
offensichtlich von jemandem geschrieben worden, der eine Akku-zentrierte 
Architektur gewohnt war und Probleme hatte, die Vielfalt der Register 
eines AVR8 zu beherrschen. Der hat sich halt defs und Hilfs-Macros 
geschrieben, die es ihm erstmal einfacher machen. Und ziemlich 
schreibfaul scheint er auch gewesen zu sein. Viele der Makros dienen 
auschließlich dazu, Codezeilen einzusparen, verbergen aber dabei z.B. 
benutzte Register. Wer sowas will, soll besser gleich C verwenden...

Warum sollte Atmel sowas liefern?

> Ich nutze das für meinen Dimmer
> (Beitrag "4-fach Dimmer 2Stromstoßschalter Schaltuhr"), für das Datensammeln
> des Stromzählers, des Gaszählers und einer Temperaturregelung.

Wie schon gesagt: daran, daß das funktioniert, bestand kein Zweifel. Um 
für den TO aber wenigstens möglicherweise nutzbar zu sein, braucht er 
halt diese "avr.inc", sonst bekommt er den Kram nicht übersetzt.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.