MCP23S17 Bit für Bit auslesen

OP #5964060
Lesenswert?

Hallo werte Kollegen,

ich stehe mal wieder auf dem Schlauch…
Ich habe mehrere MCP23S17 und möchte diese Bit für Bit auslesen und dann 
Integer Werte (0 bzw 1 )in einem Array ablegen um diese zu bearbeiten um 
sie später auf andere MCP´s zu schreiben.
Hier habe ich natürlich auch wider das Problemchen diese Integer wider 
zusammenzusetzen und zu schreiben…

Die Programiersprache ist C für den MBED.

Hat mir jemand einen Lösungsansatz?

Mit Bits und Bytes kenne ich noch gar nicht aus, seid also nachsichtig 
mit meiner Unkenntnis.

In diesem sinne Danke ich euch für eure Hilfe

Euer Dirk
Gast #5964071
Lesenswert?

Schau Dir an was SPI bedeutet und wie es im MCP23S17 realisiert ist.

Stichwort: Es werden immer komplette Ports eingelesen, A, B oder A und B

Auch das Schreiben erfolgt Byteweise.

Falls Du Port A UND Port B als Inputs konfiguriert hast kannst Du beide 
in einem 4 Byte Zyklus einlesen wenn der Registercounter auf 
AutoIncrement steht.
#5964487
Lesenswert?

Dirk S. schrieb:
> Ich habe mehrere MCP23S17 und möchte diese Bit für Bit auslesen und dann
> Integer Werte (0 bzw 1 )in einem Array ablegen

Das ist doch Unsinn. Diese IC werden über SPI angeschlossen, das ist auf 
einer gewissen Ebene in der Tat "Bit für Bit". Allerdings mit

> Programiersprache ist C

kriegst du aus dem SPI immer nur Worte von 8 (oder mehr, hängt vom µC 
ab, den du nicht nennst) Bits raus. Wenn du die in Einzelbits zerlegen 
willst, kannst du das natürlich tun. Auch wenn es mir wenig sinnvoll 
erscheint.

> Mit Bits und Bytes kenne ich noch gar nicht aus, seid also nachsichtig

Warum soll ich nachsichtig sein, wenn du - statt an deiner Unkenntnis zu 
arbeiten und etwas zu lernen - hier im Forum Fragen stellst, deren 
Antwort du in praktisch jedem C-Lehrbuch nachlesen könntest? Soll ich 
wirklich glauben, daß du eine Antwort lesen und dir Mühe geben wirst sie 
zu verstehen, wenn du die gleiche Antwort anderswo nicht lesen willst?

Na egal, lies hier: Bitmanipulation
#5964776
Lesenswert?

Hallo,

@ TO:

du musst wissen was für dich besser ist. Willst du wirklich Bit für Bit 
auslesen und schreiben, dann geht das nur mittels Bit-Banging. Sprich 
ohne die SPI Hardwareeinheit des µC.

Möchtest du das der SPI Hardwareinheit überlassen, dann kannst du nur 
Byteweise lesen und schreiben. Natürlich auch mehrere Bytes 
hintereinander. Dann kannst du hinterher (bzw. vorher) die Bits 
aussortieren (bzw. einsortieren).

Ich würde sagen, versuche es erstmal mit Bit-Banging, weil das erstmal 
einfacher ist. Du musst erstmal nichts konfigurieren. Wenn das läuft, 
machste das nochmal mit der SPI Hardwareinheit, dann biste "of Speed". 
:-)
Gast #5964791
Lesenswert?

Dirk S. schrieb:
> Hat mir jemand einen Lösungsansatz?

1. C lernen
2. Wikipedia SPI Artikel lesen und verstehen
3. Datenblatt des MCP lesen und verstehen
4. Datenblatt des verwendeten µC lesen und verstehen

Natürlich könnte ich jetzt die Punkte 1 bis 4 durchführen.
Aber das hilft dir nicht aufs Pferd.
Keinen Millimeter.

Denn: Selber lesen, macht selber schlau.
#5964846
Lesenswert?

Alles einfach. Jeder Datenaustausch mit MCP23S17 braucht 3 bytes per 
SPI.
CS runter - IC-Adresse mit bit wr/rd + Register-Adresse + Date (lesen 
oder schreiben) - CS rüber. Byte lesen, erwünschte bit ändern, byte 
zurück schreiben. 3x 3 bytes pro bit. Wenn man nicht gleich alle 8 
manipulieren will.

Es kann auch sinnvoll sein, Variablen, byte pro MCP23S17-Register, zu 
deklarieren und dort aktuelle Zustand von MCP23S17-Port lagern. Dann 
braucht man nur in var etwas zu ändern und dann per SPI schreiben (außer 
wenn man Pin-Eingang zu lesen braucht). Ähnlich wie mit HC595. Das geht 
3x so schnell als mit Lesen.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren