Hallo, ich habe ein I2C Netzwerk mit 3 ATMEGA328 aufgebaut. Einer ist der Master, 2 sind Slaves. Soweit passt die Kommunikation zw. Master und den Slaves. Jetzt möchte ich das Lesen von den Slave-Werten über Interrupts lösen. (Die Slaves sollen, wenn sie neue Werte haben, beim Master einen Interrupt auslösen, der dann die Werte abfragt) Dazu habe ich eine gemeinsame "Interrupt" Leitung an jeweils einen Pin der Mikrocontroller angeschlossen. Da ich die Mikrocontroller nicht "verschießen" will wollte ich euch fragen, ob folgende Vorgehensweise prinzipiell funktioniert: -Standardmäßig soll die Leitung auf High liegen, wenn ein Wert zum Auslesen ist, die Leitung auf Low. -Der angeschlossene PIN am Master ist immer Eingang, der Pull UP Widerstand aktiviert. (der Interrupt ist aktiviert) -Die angeschlossenen PINs am Slave sind standardmäßig als Eingang geschalten, wenn ein Interrupt ausgelöst werden soll, wird der Pin aus Ausgang geschalten. (und die Leitung auf LOW gezogen). Ich würde mich freuen, wenn jemand diesen oder ähnlichen Aufbau schon einmal realisiert hat und mir einen kurzes Feedback geben könnte, ob diese gemeinsame Interrupt Leitung funktionieren kann - der nicht. Danke, Günther
Und wie erkennt der Master, welcher Slave den Interrupt ausgelöst hat? ;-)
Hi >Die angeschlossenen PINs am Slave sind standardmäßig als Eingang >geschalten, wenn ein Interrupt ausgelöst werden soll, wird der Pin aus >Ausgang geschalten. (und die Leitung auf LOW gezogen). Genau so macht man es auch bei Soft-TWI. >-Der angeschlossene PIN am Master ist immer Eingang, der Pull UP >Widerstand aktiviert. (der Interrupt ist aktiviert) Der interne Pull-Up dürfte zu hochohmig sein. Sieh einen externen Widerstand vor. MfG Spess
Genau so habe ich das auch schon gemacht, allerdings mit einem externen Pull-Up, gleicher R wie SDA & SCL. Du kannst die Slaves dann pollen oder etwas komplizierter die "general call address" verwenden.
Du kannst die Leitung sparen und einfach die Datenleitung auf kurz Low ziehen umd dem Master mitzuteilen das ein Slave etwas loswerden muss. Einfach einen IrQ Eingang des Masters mit dran schalten und den IRQ außerhalb der I² Communication freigeben. natürlich sollte der Slave dann zuvor schauen das keinen Kommunikation auf dem I²Bus läuft. Dazu genügt es an der LK zu lauschen. und das muss er eh.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.