dies ist mein erstes Projekt. Ich habe einen Controller gebaut der über SPI mit single CS an 4 MCP23S17 mit nachgeschalteten 8 TXS0108 Level-Shifter hängen. Der Controller soll dann 8 AC-Servo driver (AASDF-15) ansteuern. Hier suche ich immer noch Info's wie man Impulse mit Anzahl Umdrehungen auf einen linearen Hub in mm. als Funktion abbildet. Angefügt der Auschnitt der Schaltung. Die Adressen der einzelnen MCP's sind entsprechend auch beschaltet.
Was brauche ich um einen base Sketch hierfür zu erstellen?
Im englischen Teil des Forum müssen die Beiträge und Diskussionen in englischer Sprache verfasst werden. Deswegen wurde diese Diskussion in den deutschen Teil des Forums verschoben.
Wenn Du SPI machst, werden die Adressen (A0-A2) nicht benutzt gebraucht, die sind normalerweise für I2C. Datenblatt Seite 2
[edit]
Der Chip hat einen Mischmasch bei Nutzung des SPI. Die AdressPins können da auch mit genutzt werden... (Datenblatt Seite 15) Muss ich nicht verstehen...
Damit relativiert sich meine Aussage von oben ....
Im Datenblatt im Abschnitt 3.3.2 steht "The MCP23S17 is a slave SPI device. The slave address contains four fixed bits and three user-defined
hardware address bits (if enabled via IOCON.HAEN)
(pins A2, A1 and A0) with the read/write bit filling out
the control byte. Figure 3-5 shows the control byte
format. The address pins should be externally biased
even if disabled (IOCON.HAEN = 0)."
Ich interpretiere das so das die Adressen gesetzt sein müssen. Oder sehe ich das falsch. Ausserdem habe ich gesehen in diversen Post das man dabei nur ein gemeinsame CS nutzen kann.
nur wenn man sich schon so was spezielles baut, dann würde ich mich durch die Register kämpfen und eine eigene Lib schreiben. Allein schon deswegen weil man dann für seinen Anwendungsfall genau das richtige implementieren kann, 8 bit oder 16 bit schreiben, continous oder nicht? Und nicht durch das Ildefonso bohren muss (also auch nicht durch die Schichten der Lib durch muss).
const uint8_t chipSelect = 5;
MCP23S17 mcp1(&SPI, chipSelect, 0); // letzte Stelle die Adresse von A0, A1 und A2
MCP23S17 mcp2(&SPI, chipSelect, 1);
Neuerdings unterstützt auch Adafruit MCP23S17. Wo man die durch die Adresseingänge eingestellte Adresse konfigurieren kann, habe ich aber noch nicht gefunden.
Las E-STOP1 nicht das sein, was ich vermute.
Warum hast Du den nicht gleich auf E-stop gelegt und machst da solche Umstände?
Die 470 halte ich für zu klein - ansonsten 4 Instanzen für die Ansteuerung bauen und gut ist.
E-Stop unterbricht das Impulse an den Controller gesendet werden eine Art Pause-Funktion. Der K-Switch unterbricht die Stromversorgung des Servo enables Input und ist der Not-Aus im richtigen Sinne. Wie meinst du das E-stop direkt auf E-Stop gelegt, das erschließt sich mir im Moment nicht, habe das es so gemacht weil ich bisher keine andere Lösung kenne
Habe im Arduino IDE, einen Sketch angelegt und würde nun gerne diesen anfangen zu befüllen, was brauche ich für alle inlcudes? Als board habe ich das ESP32 Dev Module ausgewählt. Wie gesagt ist mein erstes Projekt. Was muss alles in den Ordner wo der Sketch abelegt noch hin kopiert werden?
das klingt so als hättest du überhaupt keine Erfahrung mit der Programmierung unter Arduino.
Wenn das so ist: alles beiseite legen und Stück für Stück einzeln probieren.
bring mal das "Blink Without Delay" zum Blinken deiner LED am ESP32.
Solange das nicht funktioniert macht es überhaupt keinen Sinn einen Schritt weiter zu gehen.
ich habe bisher nur den vorhandene Sketches, bearbeitet und angepasst, z.B. für meinen 3D Drucker, aber da waren ja libaries, die ganzen h-files drin und es waren Mega2560 oder Mega due.
Der ESP32 ist hier komplett neu, ich habe schon mit µ-phyhton am ESP32 programmiert um darauf einen Webserver zu installieren und diverse Zustände auzlesen und auch SD-Karte anegbunden.
Den Controller habe ich selber entworfen und auch aufgebaut. Beruflich bin ich Diplom Elektrotechniker mit der Fachrichtung Elektronik, habe auch einen Abschluss als Radio und Fensehtechniker, zwar bin ich schon ein älteres Semester, aber einen sofort herunter zu Stufen und man(n) soll mit LED blinken anfangen wie ein Grundschüler im Technikunterricht, ist auch nicht die feine Art. Ich habe Mitte der 80er Assembler programmiert. Ich schreibe täglich Code in XML für Geräte die Internetverschlüsselung Routing und ähnliches machen.
Ich habe schon einen 4 Kanal Controller mit Mega 2560 gebaut an dem die AASD-15a laufen, jedoch sind diese direkt an den GPIO angeschlossen und es sind keine MCP und TXS-0108 im Spiel.
Es besteht durchaus Erfahrung und Wissen auf dem man aufbauen kann. Mir ist auch klar das man dies auch in µ-Phyton oder FreeRtOs oder C++ umsetzen kann. Ich möchte jedoch diese mit Arduino umsetzen um auch zwischen Mega2560 und ESP32 wechseln zu können bei Schaltungs Anpassungen ohne jedes mal alles neu schreiben zu müssen.
Deswegen hoffe ich, hier den richtigen Input und evtl. auch Lösungen zu bekommen und auch zu diskutieren, konstruktive Vorschläge oder wo ich was verbessern kann.
Hier der Sketch des 4 Kanal Controller mit Mega 2560.
Und Du siehst Dich täglich im Spiegel, wir aber nicht. Bitte bedenke, wir können Dich nur nach dem beurteilen, was Du hier schreibst!
Das mißverstehst Du!
Als ich mit dem ATtiny85, dem UNO und dem ESP32 angefangen habe, war der Blink-Sketch jeweils mein erster Versuch, dem µC ein Programm zu verpassen. Als das funktionierte, hatte ich ein paar Hürden überwunden. Die Frage ist also, hast Du diese Hürden für den ESP32 auch schon überwunden?
Wenn nein, müssen wir mit der Hilfe genau da ansetzen.
Es geht also darum, den Stand Deines Wissens hinsichtlich ESP32 abzufragen, denn davon lese ich leider bis jetzt noch nichts.
Dann hast Du vermutlich noch nicht bemerkt, die Arduino-IDE hat einen C++-Kompiler unter der Haube, OOP wartet auf Dich
Da sehe ich viele Dinge, die sich leicht übertragen lassen, allerdings werden da auch die Timer-Register direkt angesprochen. Der ESP32 ist aber eine ganz andere Prozessorfamilie, das muß also komplett neu.
Das Wissen über die Timer des ESP32 dürfte dünn gesäht sein. @MicroBahner hat die Programmbibliothek MobaTools auch für den ESP32 angepaßt, der sollte sich damit auskennen. Eventuell wäre auch die Nutzung dieser Bibliothek eine Möglichkeit, die Austauschbarkeit zwischen Mega2560 und ESP32 hinzubekommen.
Ich hoffe, Du hast dieses Projekt ohne Zeitdruck begonnen, es wartet eine Menge Arbeit auf Dich
In Deinem Programm finde ich
CN2 control signal connector
p3 - pwm signal
p4 - direction
Das deutet mehr auf einen Schrittmotor mit STEP und DIR hin. Welche Signale soll der ESP32 erzeugen?
Dieser Aufbau ist falsch der SPI ist kein Daisy Chain (schreibt man das so? Gänseblümchenkette)
SCLK, MOSI und MISO sind an allen Teilnehmern paralellgeschaltetund nicht im Ring wie Du das gezeichnet hast.
Jeder SLAVE ist inaktiv (Ausgänge Hochomig und Keine Datenübernahme) nur der durch SS aktivierte (in diesem Fall SS und ADRESSE) wird geschrieben und kann Dalten senden.
der MCP23S17 hat drei Adresspins, die auch bei SPI ausgewertet werden, weshalb acht MCP23S17 an einem SS-Pin hängen können. In dem verlinkten Thema habe ich es ausprobiert. SCK, MOSI, MISO und SS werden an Device #1 und #2 parallel angeschlossen.
Siehe Datenblatt MCP23017/MCP23S17 von 2007 "1.4.2 ADDRESSING SPI DEVICES
(MCP23S17)"