Hallo, ich baue gerade an einem Controllerboard für's Simracing. Es basiert auf einem Arduino Pro Micro (den Part möchte ich erst mal als fertige Komponente übernehmen) und besteht primär aus zwei Port Expandern (MCP23S17). Ich habe mich nun durch diverse Datenblätter gewälzt, Foren gelesen etc. und bin jetzt so weit, dass ich glaube alles beachtet zu haben. Nun bin ich aber noch recht neu in dem Bereich und bevor ich das Ganze nun in Platinenform wandel, würde ich mich sehr freuen wenn jemand mal drüberschauen könnte ob ich irgendwas vergessen oder falsch gemacht habe. Keine Sorge, ich erwarte keine genaue Analyse, aber vielleicht fällt einem ja direkt was auf, hier gibt es Leute die weit erfahrener sind als ich. Herzlichen Dank, Benjamin
Die SPI-Verschaltung ist schon mal falsch. Entweder getrennte CS, dann kannst du SI/SO/SCLK parallel verschalten. Oder eben in Reihe schalten (CS und SCLK parallel. MOSI->SI0, SO0->SI1, SO1->MISO. Und wenn da an den Porterweitzungen steht Encoder - das kann schnell recht sportlich werden, bei mehreren vielleicht sogar unmöglich. Kommt natürlich sehr auf die Frequenz an, also Auflösung und Drehgeschwschindigkeit. edit: nimm lieber einen AVR, der genug I/Os direkt hat und spar dir das mit den Porterweiterungen. Macht dir die Software leichter.
:
Bearbeitet durch User
Hallo, H.Joachim S. schrieb: > Die SPI-Verschaltung ist schon mal falsch. > Entweder getrennte CS, dann kannst du SI/SO/SCLK parallel verschalten. > Oder eben in Reihe schalten (CS und SCLK parallel. MOSI->SI0, SO0->SI1, > SO1->MISO. Nach meinem Verständnis können 8 MCPs an einem CS pin betrieben werden, da diese über die Addresse angesprochen werden können (A0-A2)... Jetzt hast du mich verwirrt. :-) > Und wenn da an den Porterweitzungen steht Encoder - das kann schnell > recht sportlich werden, bei mehreren vielleicht sogar unmöglich. Kommt > natürlich sehr auf die Frequenz an, also Auflösung und > Drehgeschwschindigkeit. Es handelt sich lediglich um Encoder die von Hand verstellt werden. In meinem Testaufbau hat das auch mit mehreren Encodern ohne Probleme funktioniert. > edit: nimm lieber einen AVR, der genug I/Os direkt hat und spar dir das > mit den Porterweiterungen. Macht dir die Software leichter. Mmmmh... ich habe bisher noch keinen gefunden, der nativ so viele I/Os zur Verfügung stellt und möglichst klein im Aufbau ist. Das ganze soll später in ein Lenkrad montiert werden. Danke für das Feedback! Benjamin
Benjamin K. schrieb: > da diese über die Addresse angesprochen werden können (A0-A2). Das dürfte nur für I2C-Betrieb gelten, nicht für SPI. Benjamin K. schrieb: > Mmmmh... ich habe bisher noch keinen gefunden, der nativ so viele I/Os > zur Verfügung stellt und möglichst klein im Aufbau ist. Ach komm, geht los beim alten ATMega64. Und massig andere.
Ok, ist auch im SPI-Betrieb adressierbar, interessant. Habe ich so noch nicht gesehen. Man muss eben doch ein bisschen lesen statt nur Bilder zu schauen :-). Hätten aber schon die Adressdekodiereinheit auch zur SPI zeichnen können...
An Reset würde ich einen 100nF Kondensator machen, damit die Leitung keine HF Signale empfängt.
H.Joachim S. schrieb: > Hätten aber schon die Adressdekodiereinheit auch zur SPI zeichnen > können... Das Blockdiagramm ist wohl so zu lesen, das je nach Typ einer der beiden gestrichelt umrahmten Blöcke vorhanden ist.
H.Joachim S. schrieb: > Ok, ist auch im SPI-Betrieb adressierbar, interessant. Habe ich so noch > nicht gesehen. Nein, sehe ich nicht so, bzw. nur beim MCP23017 (I2C). Der TO verwendet MCP23S17 (SPI), da haben A0-A2 keine Bedeutung - wie auch? Der TO braucht getrennte /CS-Leitungen. leo
Das geht durchaus bei SPI, aber A2 kann Ärger machen: ww1.microchip.com/downloads/en/DeviceDoc/80311a.pdf
Benjamin K. schrieb: > Mmmmh... ich habe bisher noch keinen gefunden, der nativ so viele I/Os > zur Verfügung stellt und möglichst klein im Aufbau ist. Kontakte kann man auch gut in einer Matrix abfragen. Machen alle größeren Tastaturen genau so. Damit sinkt der Bedarf an IO-Pins auf ca. 2*Sqrt(Kontaktzahl). Für deine 32 Kontakte brauchst du also bloss 12 IO-Pins (und könntest damit 36 Kontakte abfragen). Schon bei einem AVR-40Pinner bleiben also noch 20 IO-Pins frei für andere Zwecke...
Benjamin K. schrieb: >> edit: nimm lieber einen AVR, der genug I/Os direkt hat und spar dir das >> mit den Porterweiterungen. Macht dir die Software leichter. > Mmmmh... ich habe bisher noch keinen gefunden, der nativ so viele I/Os > zur Verfügung stellt und möglichst klein im Aufbau ist. Das ganze soll > später in ein Lenkrad montiert werden. Mit den Portextendern wirds ja noch größer als mit einem geeigneten Chip. Mega64 ist eine alte Kamelle, Mega2561 wäre das Ziel, wenn es weiter AVR sein muss. Oder z.B. https://www.olimex.com/Products/Duino/PIC32/PIC32-PINGUINO-MICRO/open-source-hardware Klar, das wird dann SMD werden, aber wenn das klein werden soll, wird es eh nicht anders gehen. Von Lochraster und DIL musst Du Dich bei Deinen Anforderungen eh verabschieden. Und: Du hast das schön Stiftleisten mit den Signalen gemalt. Schon mal überlegt, wie der Strom wieder zurückkommen soll ohne zuhehörige Ground-Leitung. Du brauchst einen Stromkreis, damit ein Signal empfangen oder gesendet werden kann. Und dabei sollte der Strom möglichst auf dem gleichen Weg wieder zurückfließen wie er hingeflossen ist, d.h. Signal und Ground sollen möglichst dicht beeinander sein. Sonst hast Du eine Spule mit einer Windung, und dadurch kannst Du Dir Störungen einfangen. Von der Strombelastbarkeit her würde ein Ground-Kabel reichen, aber das solltest Du aus Gründen der Störunempfindlichkeit nicht machen. Weiterhin ist es empfehlenswert, alles, was rein oder raus geht, vor Spannungsspitzen zu schützen. Du möchtest nicht unbedingt ein 64 Pin TQFP wechseln müssen. Zum Schutz nimmt man sogenannte TVS-Dioden, die in Sperrrichtung zwischen Signal und Ground geschaltet werden und direkt am externen Steckverbinder (oder nur wenige mm entfernt davon) sitzen. Für ein 5V-System kannst Du z.B. das hier nehmen. Sind nachher nur wenige Cent pro Stück. https://www.onsemi.com/pub/Collateral/ESD5Z2.5T1-D.PDF Wenn Du irgendwo Versorgungsspannung für LEDs, Encoder oder sonstwas rausgibst, wäre vielleicht eine Sicherung davor auch nicht das verkehrteste. Gibts auch in automatisch rückstellbar. Das sind dann beispielsweise solche Teile: https://www.littelfuse.com/~/media/electronics/datasheets/resettable_ptcs/littelfuse_ptc_1210l_datasheet.pdf.pdf Gibts in allen möglichen Größen. fchk
leo schrieb: > H.Joachim S. schrieb: >> Ok, ist auch im SPI-Betrieb adressierbar, interessant. Habe ich so noch >> nicht gesehen. > > Nein, sehe ich nicht so, bzw. nur beim MCP23017 (I2C). Der TO verwendet > MCP23S17 (SPI), da haben A0-A2 keine Bedeutung - wie auch? > Der TO braucht getrennte /CS-Leitungen. > > leo Laut DB ist SPI-Betrieb eher als I2C-over-SPI anzusehen. Das Protokoll ist immer nach I2C Logik inclusive Addressierung bis zu 8 Chips via A0..2 Pins. Allerdings muß man die Benutzung der Adresspins erst freischalten. Nach Reset hört der Chip nur auf Adresse 0x20 (oder 0x40 je nach Lesart analog I2C). Und offenbar gibt es einen Bug, der dazu führt, daß sobald der A2-Pin auf High liegt, die "Freischaltsequenz" an Adresse 0x24 sendet. Sprich, A2 ist immer aktiv.
> Ok, ist auch im SPI-Betrieb adressierbar,
Muss man aber laut Datenplatt erst einschalten, der Reset-Wert ist (wie
zu erwarten) "Adresspins interessieren nicht" (sie dürfen aber trotzdem
nicht floaten).
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.