Forum: Mikrocontroller und Digitale Elektronik I2C Slave Adressen dynamisch zuweißen


von CS (Gast)


Lesenswert?

Guten Tag zusammen,
wie der Betreff schon sagt möchte ich I2C Adressen der Slaves dynamisch 
zuweißen. Geplant ist, das eine neue Komponente eine Standard Adresse 
hat und im System dann vom Master die tatsächlich benötigte erhält. Als 
IDE wird Bascom mit Basic verwendet.

Prinzipiell klingt der Zusammenhang recht einfach. I2C Master schickt an 
I2C Slave mit default Adresse die benötigte I2C Adresse. Der Slave 
klingt sich aus und konfiguriert den Bus neu.

Dim I2c_adresse As Byte
I2c_adresse = 10

Config Twislave = I2c_adresse , Btr = 2 , Bitrate = 20000

zur Laufzeit könnte die I2C_adresse dann abgeändert und der Twislave neu 
konfiguriert werden. Beim Übersetzen zeigt Bascom keinen Fehler an. Der 
Master kann den Slave jedoch nicht erreichen.

Config Twislave = 10 , Btr = 2 , Bitrate = 20000

Mit dieser Anweißung kann eine Kommunikation stattfinden. Es liegt also 
nahe das Bascom eine Konstante benötigt.

Daher meine Frage, kann man diesen Zusammenhang elegant um gehen oder 
sieht Bascom dies nicht vor?

lg CS

von Duden (Gast)


Lesenswert?

Hallo!
Hast Du denn schon einen Pinsel?

von Rüdiger (Gast)


Lesenswert?

Machst ein MultiMaster - Master.

Dann lässt du die Slaves beim Einschalten kurz einen Master sein welcher 
den anderen Master anruft, einen Code für Adresszuweisung ausgibt, einen 
Code für seine Funktion ausgibt. Anschließen ein Repeated Start, Master, 
empfangen.


Der Master schaut in seine Tabelle und übergiebt die nächste freie 
Adresse an den Slave und schreibt in der Tabelle die funktion hinter die 
Adresse.


Zur Abmeldung weiß ich nicht wie man das machen sollte .. das gleiche 
gilt für das einschalten mehrerer Slaves.

von CS (Gast)


Lesenswert?

Ok...
Hab gerad eine einfache Methode raus gefunden. Da sich Bascom mit Hand 
und Fuß gegen die Änderung wehrt, greif ich direkt auf das Register zu.

Twar = New_i2c_adresse

Damit erhält der Slave die aktuell gewünschte Adresse. Problematisch ist 
jedoch der Einschaltmoment. Man muss die I2C Adresse in EEPROM schreiben 
und bei jedem Start neu laden. Dann sollte es funktionieren. Oder habe 
ich was übersehen?

mfg

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.