Kann Arduino MISO als Ausgang eingestellt werden?

Also habe ich eine Platine entworfen, die aus einem atmega328 besteht, der ein digitales Potentiometer (MCP4131) mit SPI steuert. Ich habe dummerweise den I / O des Potis mit dem MISO-Pin (Master-In, Slave-Out) auf dem Arduino anstelle des MOSI-Pins (Master-Out, Slave-In) verbunden. Die SS- und SCK-Pins sind korrekt verbunden. Unnötig zu sagen, dass ich den Topf nicht so verhalten konnte, wie er sollte, weil ich das Arduino nicht dazu bringen kann, mit ihm zu sprechen.

Ich habe versucht, in die Arduino SPI-Bibliothek zu gehen und in der Funktion begin() die Zeile zu ändern

pinMode(MOSI,OUTPUT);

Zu

pinMode(MISO,OUTPUT);

Aber das tut nicht den Trick. Auf meinem Oszilloskop kann ich die Bits sehen, die gesendet werden, wenn der Topf richtig angeschlossen ist (auf meinem Steckbrett). Wenn ich die Spur auf meiner Platine aufreißen und einen Jumper an den richtigen Pin des Arduino löten könnte, wäre das eine gute Problemumgehung. Aber ich würde es lieber in der Lage sein, es in Software zu tun.

Ich habe nicht viel Erfahrung mit SPI. Ich recherchiere gerade, habe aber nichts brauchbares im Netz gefunden. Irgendwelche Gedanken darüber, den MISO-Pin auf "MOSI" umzuschalten?

Antworten (3)

Das Arduinoshiftout() ist eine Software/Bitbang-SPI-Implementierung. Sie können das anstelle der Spi-Bibliothek verwenden.

Eindrucksvoll. Das war viel einfacher, als ich erwartet hatte. Danke!
Also eigentlich hat das Signal mit meinem Chip nicht funktioniert. Es sieht so aus, als ob 5 V die Standardeinstellung für MOSI sind, während 0 V die Standardeinstellung für shiftOut ist. Mein Oszilloskop zeigt, dass die Daten übertragen werden, aber der Topf antwortet nicht. Es scheint, dass alles gut wäre, wenn ich die an den Pot gesendete shiftOut-Nachricht umkehren könnte. Gedanken?
Es sollte nicht invertieren, aber verwenden, data = ~dataum Ihre 8-Bit-Datenvariable bitweise zu invertieren. Dezimal 177 in binär 0b10110001 würde zu 0b01001110 (78).

Wenn Sie das in den Mikrocontroller integrierte SPI-Modul verwenden möchten, müssen Sie die von ihnen gewählten Pins verwenden. Sie sind fest verdrahtet.

Sie können jedoch auch die gleichen Pins als Allzweck-I/O verwenden, was bedeutet, dass Sie sie ein bisschen schlagen können, anstatt die SPI-Bibliothek zu verwenden, aber das ist erheblich mehr Arbeit in der Software. Möglicherweise finden Sie irgendwo eine vorhandene Bibliothek, die Ihnen hilft, aber ich persönlich würde das PCB drehen oder modifizieren und es als gelernte Lektion bezeichnen.

Danke Karl. Ich werde einfach einen manuellen Poti anlöten und hoffen, dass die nächste Revision mit den Spuren zu den richtigen Pins funktioniert. Dann, wenn ich Zeit habe, werde ich das Bit-Banging herausfinden.

Siehe unbedingt Shiftout und manuellen Spi-Bit-Bang