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?
Das Arduinoshiftout()
ist eine Software/Bitbang-SPI-Implementierung. Sie können das anstelle der Spi-Bibliothek verwenden.
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.
Siehe unbedingt Shiftout und manuellen Spi-Bit-Bang
Ryantuck
Ryantuck
Passant
data = ~data
um Ihre 8-Bit-Datenvariable bitweise zu invertieren. Dezimal 177 in binär 0b10110001 würde zu 0b01001110 (78).