Hallo Gemeinde, ich möchte die Hardware-I2C auschalten um über die Pins noch einen SPI-Schaltkreis anzusteuern.Die I2C Pins am Arduino pro mini sind A4 und A5. Jetz habe ich softwaremässig eine SPI auf die gleichen Pins gelegt,mit dem Erfolg das SPI nur geht wenn I2C nicht intalisiert ist.Wie kann ich I2C abschalten?
:
Bearbeitet durch User
Wenn I2C nicht in der setup eingestellt wird, sind die Pins frei zur Verfügung. Hardware SPI geht über die Schnittstelle nicht.
>ich möchte die Hardware-I2C auschalten um über die Pins noch einen >SPI-Schaltkreis anzusteuern.Die I2C Pins am Arduino pro mini sind A4 und Das ist eine schlechte Idee. Es mag ja noch sein das I2C dein SPI nicht stört solange CS high ist. Die Frage ist was deine I2C slaves zum SPI auf SDA, SCL sagen. Ich würde das sein lassen.
Hallo Die Slaves tun nichts solange ihre Adresse nicht erscheint.Spanungen sind ja die selben.
>Die Slaves tun nichts solange ihre Adresse nicht erscheint.Spanungen >sind ja die selben. Und wer sagt dir das im SPI Datenstrom nicht willenlos Start, Stop und auch deine Slaveadresse auftauchen? Das wird nix.
Peter Bochow schrieb: > Hallo > Die Slaves tun nichts solange ihre Adresse nicht erscheint.Spanungen > sind ja die selben. Ich kenne gerade die Spec für I2C nicht ausreichend, aber was passiert, wenn die "Adresse" zu schnell rein kommt, und Clock-Stretching zuschlägt? Einer zieht aktiv auf LOW, der andere aktiv auf HIGH - und nun? Ich würde eventuell einfach eine weitere /CS nehmen, und bei der Hardware-SPI bleiben. - Oder wenn es unbedingt sein muss, die evtl. vorhandenen I2C -Slaves komplett trennen. Das Abschalten des TWI-Interfaces kann man auch direkt mit einem Registerzugriff erledigen, entsprechend des Datenblattes vom verbauten Controller (Atmega328?). Edit: Danke holger, daran dachte ich gerade nicht. ACK
:
Bearbeitet durch User
Peter Bochow schrieb: > Hallo Gemeinde, > ich möchte die Hardware-I2C auschalten um über die Pins noch einen > SPI-Schaltkreis anzusteuern. ??? wenn du keinen I2C Schaltkreis dran hast und <wire.h> nicht lädts sind die A4 und A5 doch normale Ports.
Marcel Papst schrieb: > Das Abschalten des TWI-Interfaces kann man auch direkt mit einem > Registerzugriff erledigen, entsprechend des Datenblattes vom verbauten > Controller (Atmega328?). > Das habe ich gesucht.Mein doppeltes Interface funktioniert nun.Ein IC mit I2C und ein IC mit SPI an den beiden selben Leitungen plus /CS bei SPI. an Holger Die Datenformate sind so unterschiedlich das ich da keine Sorge habe. Vielen Dank an alle.
Peter Bochow schrieb: > Das habe ich gesucht.Mein doppeltes Interface funktioniert nun.Ein IC > mit I2C und ein IC mit SPI an den beiden selben Leitungen plus /CS bei > SPI. Klasse dann verrate doch mal wie, könnte andere hier auch interessieren. Das ist ein Forum mit Austausch und keine Einbahnstrasse.
Man könnte ja auch einen dieser Pegelwandler für I2C nehmen, welchen man einseitig disablen kann. Somit wäre I2C-Bus im SPI-Betrieb abtrennbar und den SPI stört das gedudel ohne den passenden CS eh nicht.
Fragezeichen schrieb: > Man könnte ja auch einen dieser Pegelwandler für I2C nehmen, oder einen Analog Multiplexer der umschaltet (CD/HEF 4053) und bei SPI mit den Signalen CS/SS die I2C einfach trennt.
:
Bearbeitet durch User
Peter Bochow schrieb: > Marcel Papst schrieb: >> Das Abschalten des TWI-Interfaces kann man auch direkt mit einem >> Registerzugriff erledigen, entsprechend des Datenblattes vom verbauten >> Controller (Atmega328?). >> > Das habe ich gesucht.Mein doppeltes Interface funktioniert nun.Ein IC > mit I2C und ein IC mit SPI an den beiden selben Leitungen plus /CS bei > SPI. Um Folgefehler - je nach Umsetzung des Tipps - zu vermeiden, hoffe ich, dass du den Inhalt des TWCR sicherst, deine SPI-Routine arbeiten lässt, und anschließend das TWCR wieder zurücksetzt. - Nicht, dass es im nächsten Thread heißt, I2C funktioniert nicht mehr. Am besten wäre, dass du mal über den Code schauen lässt, sodass wir den entsprechenden Teil mal nachvollziehen können. OT: Aber kurz vorweg: Manchen Leuten hier kann man es nicht recht machen, sodass der Code von denen eventuell zerrissen wird. - Aber das hast du vielleicht auch schon gemerkt. /OT
Hallo, Ich habe die Library TWI und WIRE aus der Adruino IDE modifiziert,so habe ich jetzt Zugiff auf das Register TWCR über die WIRE Bibliotek
1 | WIRE-library: |
2 | //ausschalten des Buses um andere Sachen mit den Ports zu machen
|
3 | void TwoWire::TWIreleaseBus() |
4 | {
|
5 | twi_releaseBus() ; |
6 | }
|
7 | //einschalten des Buses
|
8 | void TwoWire::TWIenableBus() |
9 | {
|
10 | twi_enableBus() ; |
11 | }
|
12 | |
13 | TWI-library: |
14 | *
|
15 | * Function twi_releaseBus |
16 | * Desc releases bus control |
17 | * Input none |
18 | * Output none |
19 | */
|
20 | void twi_releaseBus(void) |
21 | {
|
22 | // release bus
|
23 | TWCR = _BV(~TWEN) | _BV(TWIE) | _BV(TWEA) | _BV(TWINT); |
24 | |
25 | // update twi state
|
26 | twi_state = TWI_READY; |
27 | }
|
28 | |
29 | void twi_enableBus(void) |
30 | {
|
31 | // release bus
|
32 | TWCR = _BV(TWEN) | _BV(TWIE) | _BV(TWEA) | _BV(TWINT); |
33 | |
34 | // update twi state
|
35 | twi_state = TWI_READY; |
36 | }
|
Peter Bochow schrieb: > Ich habe die Library TWI und WIRE aus der Adruino IDE modifiziert, wieso das denn? du kannst doch selber die Register lesen und schreiben.... Ich hatte mal eine zeitlang wire.h und die Fleury Lib zusammen genutzt, war aber doppel moppel http://homepage.hispeed.ch/peterfleury/avr-software.html#libs deswegen du hast auch trotz der wire.h vollen Zugriff auf die Register. Ich lese im Interrupt (10ms) an einem I2C LCD Port Tasten ( bis zu 8) aus um Ports zu sparen, evtl. I2C stretching 100-200µs stört mich alle 10ms nicht. Nur für gleichzeitige IRMP Abfrage muss ich den IRQ wieder im Interrupt freigeben. Funktionsweise: alle 64µs IRQ, IRMP Abfrage, Zähler zählt hoch bis 10ms gibt den IRQ wegen I2C stretching 100-200µs frei um keinen IR zu verlieren und fragt die I2C Tastatur ab.
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.