Hallo, Ich habe hier eine Art Frankenstein-Board. Bestehend aus Arduono Mega, RAMPS 1.4, RAMPSXB und, um 9 TMC2130 anzusteuern, ein Board mit 2 PCF8574 für das CS der TMC. Leider ist das mit den Pin definitionen für Marlin nicht ganz einfach. Aus diesem Grund suche ich ein einfaches Programm, wrlches für jeden Arduono Pin die 'Funktion' (also z.B. 'D3 odrr A8) per Software-Seriell ausgibt. Klar, könnte ich auch selbst schreiben, aber warum das Rad neu erfinden? Dahet die Frage, ob evtl. schon jemand sowas geschrieben, oder gefunden hat?
Jürgen schrieb: > Dahet die Frage, ob evtl. schon jemand sowas geschrieben, oder gefunden > hat? Vielleicht kannst du das verlinkte Bild mit OCR umwandeln und per Copy-Befehl auf der seriellen Schnittstelle ausgeben. https://diyi0t.com/wp-content/uploads/2019/08/Arduino-Mega-Pinout.png
Wow. Das Progtamm soll für jeden Pin die ID, welche im Programm hinterlegt ist, am entsprechenden Pin seriell ausgeben. Durch kann ich im Platinengewusel ,it einem CH340 o.ä. und einem PC mit Terminalprg rausfinden, wrlchet pin mot fem ensprrchrnden Kontakt vetbundrn ist. Aber ich merke schon, mit Hilfe ists schwer... ;) <- das ist ein Smiley!
Hallo, ich habe noch nicht verstanden was du von wo nach wo übersetzen möchtest? > Aus diesem Grund suche ich ein einfaches Programm, welches für jeden > Arduono Pin die 'Funktion' (also z.B. 'D3 oder A8) per Software-Seriell > ausgibt. Wenn du "auf" Arduino laut Arduinopinnummerierung sagst Pin 5, dann ist das D5, wobei man das 'D' weglässt. Also was möchtest du wirklich wissen?
Veit D. schrieb: > Also was möchtest du wirklich > wissen? Er möchte den C/C++ Bezeicher des Pin, so wie ich es verstanden habe. Also bei Angabe der 13 möchte er LED_BUILTIN ausgegeben sehen. Oder auch SCLK. Aua, Mehrdeutigkeiten drohen!
Er möchte verbindungen auf dem board tracen, darum soll jeder pin per softwareserial regelmässig seinen namen ausgeben.
Jürgen schrieb: > Aus diesem Grund suche ich ein einfaches Programm, > wrlches für jeden Arduono Pin die 'Funktion' (also > z.B. 'D3 odrr A8) per Software-Seriell ausgibt. Das ist schwierig, weil die meisten Pins unterschiedliche Funktionen haben können. Teilweise sogar mehrere davon zu unterschiedlichen Zeiten. Die AVRs haben keine Mapping-Register, die man einfach auslesen könnte; die Peripherie greift sich ihre Pins, wenn man sie einschaltet. Verschiedene AVRs haben dann noch unterschiedliche Mappings (bei manchen AVRs liegt z.B. CKOUT auf PB0, bei anderen auf PB1). Und: Wie soll die Software rauskriegen, ob ein beliebiger Pin als GPIO benutzt wird, oder mit einer Software-Funktion (z.B. Soft-Serial)? Um einfach den Pin-Namen auf seine Arduino-Nummer zu mappen, kannst du eine Excel-Tabelle nehmen und das alles da eintragen (mit einer zusätzlichen Spalte pro AVR-Typ). Das ist sinnvoller, als es den uC machen zu lassen.
Jürgen schrieb: > Arduono Mega, RAMPS 1.4, RAMPSXB Das ist alles genormt, da musst Du nichts mehr "rausfinden": https://reprap.org/wiki/RAMPS_1.4 https://reprap.org/wiki/RAMPSXB Musst halt ein bisschen runter Rollen, dort sind alle Defines! Jürgen schrieb: > ein Board mit 2 PCF8574 Und das musst Du Dir sowieso selber schreiben, aber dafür gibt es fertige Bibliotheken! Gruss Chregu
Jürgen schrieb: > Bestehend aus Arduono Mega, ... Meinst du vielleicht einen gewöhnlichen Arduino Mega? Falls ja, könnte ein Mod vielleicht wenigstens den Titel des Threads korrigieren, damit die Forumgssuchfunktion nicht ins Leere läuft.
Ich suche einfach ein Programm, welches an jedem Pin z.B. seriell dessen Bezeichnung ausgibt. Ob das jetzt Arduino like beispielsweise 'D6', '6' oder 'A4' ist, ist zweitrangig. Kann ein beliebiger String sein. Die serielle Ausgabe soll von einem externem Gerät (PC, Terminalprogramm) angezeigt werden und ich kann die Info weiterberwenden. Ist meine Erklärung jetzt verständlicher?
Jürgen, nochmal, diese Informationen findest Du in den Defines. Diese Shields sind genormt. Wir haben Dein Anliegen alle langsam verstanden. Aber es hilft Dir nichts. Vorallem wenn Du jetzt noch Eingänge als Ausgang definierst, und dort Sachen ausgibst, geht sicher was kaputt. Und falls es wider aller Erwartungen sowas gibt, was Du suchst, geht das sicher nicht für irgendwelche I2C Expander. Gruss Chregu
Jürgen schrieb: > Das Progtamm soll für jeden Pin die ID, welche im Programm hinterlegt > ist, am entsprechenden Pin seriell ausgeben. kannst ja deinen Bootloader erweitern der das für für dich erledigt, die Pin Config In/Out oder ADC MUSS in deinem Hauptprogramm ins EEPROM geschrieben werden. Das klappt aber nur wenn nichts an den Ports angeschlossen ist. Sonst würde dein Jürgen schrieb: > Software-Seriell ja gegen andere ICs arbeiten. Irgendwie logisch das das nicht funktioniert wenn pulldowns oder pullups angeschlossen sind oder ein anderes IC ein high ausgibt, soll dein Jürgen schrieb: > Software-Seriell das überrennen? (wer wird gewinnen?)
Jaja. Shields sind genormt. War mir wohl entfallen... Ich würde es aber eher als 'Quasi-Standard' bezeichnen. Zumindest für den 'Bus' und einem Teil det Abmasse. Dann habe ich ja zum Glück immer noch die Möglichkeit, aus 4 verschiedenen, mehr oder wemiger guten Dokus, eine zu machen, oder ich programmier es halt selbst.
Joachim B. schrieb: > kannst ja deinen Bootloader erweitern der das für für dich erledigt, die > Pin Config In/Out oder ADC MUSS in deinem Hauptprogramm ins EEPROM > geschrieben werden. Woher weiss der Pin denn, wohin er geroutet ist? Genau darum geht es mir nämlich und nicht um die (interne) Funktipn im μC! Das kann ich auf den Boards nachschauen, durchpiepsen, oder eben so machen, dsd z.B. auf DigitalOut 14 immer 'D14', evtl. abwechselng invertiert/nicht invettiert, sowie der Rehie nach entsprechend auf allen anderen Pins, und dann mit einem USB Seriell Wandler die mögöichen Ziele abtaste und schaue, was das Terminalprogramm an dem der USB/Seriell Wandler (und nicht der Arduino) hängt, an Text ausspuckt.
Jürgen schrieb: > Woher weiss der Pin denn, wohin er geroutet ist? schrieb ich doch: Joachim B. schrieb: > die > Pin Config In/Out oder ADC MUSS in deinem Hauptprogramm ins EEPROM > geschrieben werden. das kann auch der Bootloader auslesen und senden, sowie den Namen das Programms, nutzt aber nichts wenn dein Arduino ohne Trennung an dem Programmer/USB2seriell hängt, die Pins können oft nur gegen den USB Chip auf low gezogen werden, wer gewinnt da? Du wolltest ja jeden PIN als SOFT seriell aus nutzen, was nur geht wenn, wenn sie eben frei sind und auf einem Arduino ist das nur beim mini pro so
Jürgen schrieb: > Ich suche einfach ein Programm, welches an jedem Pin > z.B. seriell dessen Bezeichnung ausgibt. Achso, du willst auf einem 40pinner einfach 36 Soft-UARTs laufen lassen, die einfach die Nummer rausblasen. Das kannst du dir schnell schreiben (mit Templates oder Makros). Allerdings solltest du aufpassen, dass du das nicht mit Pins machst, an denen Ausgänge von irgendwelchen Chips angeschlossen sind. Denn das gibt Kurzschlüsse. Ich empfehle dir trotzdem, das einfach einmalig pro Board durchzuklingeln und dann auf einen Zettel (oder in eine Tabelle) zu schreiben.
Joachim B. schrieb: > die Pins können oft nur gegen den USB Chip > auf low gezogen werden, wer gewinnt da? In der Regel befindet sich ein Widerstand in den Tx und Rx Leitungen zwischen µC und USB-UART Wandler. Dieser sollte den Rauch vermeiden, das ist sein Zweck. Ob das auch bei allen Clonen und Nachbauten so ist? KA! Bei den mir bekannten, ja, aber das heißt nicht viel.
Arduino Fanboy D. schrieb: > In der Regel befindet sich ein Widerstand in den Tx und Rx Leitungen > zwischen µC und USB-UART Wandler. > Dieser sollte den Rauch vermeiden, das ist sein Zweck. wie du schriebst i.d.R. > Ob das auch bei allen Clonen und Nachbauten so ist? > KA! ich habe welche ohne R, keine Chance da was sinnvolles anzuschliessen, ich versuchte es ja wollte einen Rx vom AVR als Ausgangspin nutzen nach der Programmierung, der Tx Ausgangspin vom USB Wandler hielt den aber fest auf high!
Endlich wurde ich verstanden. :D Glücklicherweise gibt es in meinem Setup keine Möglichkeit, das 2 Ausgänge gegeneinander arbeiten. Analogeingängr und Endschalter bleiben frei, Stepsticks werden nicht gesteckt, genauso alle anderen Sachen, wie z.B. LCD. Ausserden gibts ja auch die entgegengesetzte Möglichkeit, alles als Eingang zu schalten und evtl. Pegeländerungen am Arduino über dessen serielle Schnittstelle mitzuteilen. Das wäre evtl bei den Analogeingängen notwendig, da diese fest beschaltet sind und eine serielle Ausgabe einfach 'wegfiltern' könnten. Das kommt abet dann erst später...
Jürgen schrieb: > Endlich wurde ich verstanden. :D wie denn? Jürgen schrieb: > Glücklicherweise gibt es in meinem Setup keine Möglichkeit, das 2 > Ausgänge gegeneinander arbeiten. doch JEDER übliche Arduino hat einen USB Wandler, somit fällt Rx am µC schon mal unter nicht frei! Jürgen schrieb: > Arduono Mega sorry, welcher Arduino Mega wird nicht über einen USB zu ser Umsetzer angesprochen ausser der Mini pro 328p?
:
Bearbeitet durch User
Glücklicherweise sind das auch dir einzigen beiden Pins, dessen Belegung bekannt ist und somit nicht ins Schema 'unbekanmte Belegung herausfinden' reinpassen.
Jürgen schrieb: > Glücklicherweise sind das auch dir einzigen beiden Pins ich mein ja nur, das war in deiner Fragestellung nicht vorgesehen! Selbst die LED_buildin ist da nicht frei!
:
Bearbeitet durch User
Hallo, wenn du zum Schaltvorgang den Namen ausgeben möchtest, dann könnte ich mir sowas vorstellen. Die Tabelle und das Array füttern ist deine Fleißarbeit. Danach mußte nur noch im Code digitalWrite(...) durch digitalWriteName(...) ersetzen. Ggf. noch Serial durch dein SoftwareSerial.
1 | // https://www.mikrocontroller.net/topic/492220#new
|
2 | |
3 | enum class state : byte {RELEASE, DEBUG}; |
4 | const state debugging = state::DEBUG; // Namen anzeigen ja/nein |
5 | |
6 | const char d0[] PROGMEM = "D0"; |
7 | const char d1[] PROGMEM = "D1"; |
8 | const char d2[] PROGMEM = "D2"; |
9 | const char d3[] PROGMEM = "D3"; |
10 | |
11 | const char* const tableName[] PROGMEM = {d0, d1, d2, d3}; |
12 | |
13 | struct PinDaten |
14 | {
|
15 | char name[3]; // maximale Textlänge + 1 |
16 | };
|
17 | |
18 | PinDaten pinname; |
19 | |
20 | const byte ANZAHL_NAMEN = (sizeof(tableName) / sizeof(tableName[0])); |
21 | |
22 | void setup() |
23 | {
|
24 | Serial.begin(9600); |
25 | Serial.println(ANZAHL_NAMEN); |
26 | |
27 | // Testausgabe
|
28 | for (int i = 0; i < ANZAHL_NAMEN; i++) |
29 | {
|
30 | strlcpy_P(pinname.name, (char*)pgm_read_word(&(tableName[i])), sizeof(pinname.name)); |
31 | Serial.println(pinname.name); |
32 | }
|
33 | pinMode(3, OUTPUT); |
34 | digitalWriteName(3, LOW); |
35 | }
|
36 | |
37 | void loop() |
38 | {
|
39 | |
40 | }
|
41 | |
42 | |
43 | void digitalWriteName(const byte pin, const bool pegel) |
44 | {
|
45 | if (pin >= ANZAHL_NAMEN) return; |
46 | |
47 | digitalWrite(pin, pegel); |
48 | |
49 | if (debugging == state::DEBUG) |
50 | {
|
51 | strlcpy_P(pinname.name, (char*)pgm_read_word(&(tableName[pin])), sizeof(pinname.name)); |
52 | Serial.print(pinname.name); |
53 | Serial.print('\t'); |
54 | if (pegel) Serial.println(F("H")); |
55 | else Serial.println(F("L")); |
56 | }
|
57 | }
|
Veit D. schrieb: > wenn du zum Schaltvorgang den Namen ausgeben möchtest, dann könnte ich > mir sowas vorstellen. das verstehe ich nicht, 1. er will doch wissen ob dieser Name in oder out gesetzt ist! Jürgen schrieb: > Aus diesem Grund suche ich ein einfaches Programm, wrlches für jeden > Arduono Pin die 'Funktion' (also z.B. 'D3 odrr A8) per Software-Seriell > ausgibt. Funktion wäre In oder Out oder ADC Nicht alle sind frei und deswegen geht auch nicht immer: Jürgen schrieb: > Ich suche einfach ein Programm, welches an jedem Pin z.B. seriell dessen > Bezeichnung ausgibt
Hallo, ah menno, jetzt ist mir alles klar. :-) Er müßte eine Tabelle erstellen und für jeden Pin das zugehörige Directionregister eintragen. Dann kann er das entsprechende Bit abfragen. Nur erschließt sich mir der Sinn nicht komplett. Im Programm ist doch festgelegt welcher Pin welche Funktion hat, damit sehe ich das im setup, welcher Pin was macht.
:
Bearbeitet durch User
Veit D. schrieb: > Nur erschließt sich mir der Sinn nicht komplett mir ja auch nicht, ich schaue auf den Controller und ins Datenblatt und weiss welche Pins das sind und was sie können, ADC oder digital, Reset oder Rx Tx oder PWM. Die Funktion legt ja auch da fast nur das Programm fest und die Beschaltung.
Wenn ich sowas lösen müsste, dann mit einem SoftSerial-Makro:
1 | #define WRITE_PIN(P,N) do { \
|
2 | DDR##P |= (1 << N);
|
3 | PORT##P |= (1 << N); |
4 | uint8_t* port = #P; |
5 | // start-bit für port
|
6 | delay_us(bitpause); |
7 | for(int i = 0; i < 7; i++) { |
8 | // bit takten
|
9 | }
|
10 | // stop bit
|
11 | |
12 | uint8_t* pin = #N; |
13 | // und das gleiche für pin
|
14 | } while(0); |
15 | |
16 | int main() |
17 | {
|
18 | while(1) { |
19 | /* das hier kann man ja mit kopierpaste beschmieren */
|
20 | WRITE_PIN(A,0); |
21 | WRITE_PIN(A,1); |
22 | ...
|
23 | WRITE_PIN(D,7); |
24 | }
|
25 | }
|
Und nein, ich hab das nicht getestet.
:
Bearbeitet durch User
Da es ja wohl so einfach ist, hier ein paar Bilder. Die Pinbelegungrn haben dann Zeit bis morgen (ist ja nicht kompliziert...). Aber den vorgestellten Code werde ich mir mal in einer ruhigen Stunde ansrhen. Übrigens: Von wem stammt das mit dem Namen zum Schaltvorgang? Mir geht es einfach mur darum, das 'Dn' in gewissen Zeitabständen den String 'Dn' ausgibt. Habe eventuell eine Möglichkeit gefunden, den onboard USB-seriell Wandler zu nutzen. Da ich ja nur TX brauche, könnte ich an RX, sofern der R verbaut ist, einen Takt ausgebrn und die anderen, als Eingänge geschalteten, Pins, nutzen und auf Pegeländerungen achten. Dadurch kann ich an RX (mit entsprechend anderer Pin Konfiguration) eine Strippe (mit Schutz-R) pappen und die Eingänge entsprechend antasten. Über den, in seiner Funktion beibehaltenrn TX bekomme ich dann eine Ausgabe und weiss wie ich die eigentliche Software (Marlin) zu konfigurieren habe.
Jürgen schrieb: > Da es ja wohl so einfach ist Du ironisch, ich auch ironisch Jürgen schrieb: > hier ein paar Bilder Naja, eher Verschmierungen... Ich versteh echt Dein Problem nicht. Diese "Shields" und der "Arduono" ist dokumentiert! Da muss man echt nichts auspiepsen! Gruss Chregu
Jürgen schrieb: > hier ein paar Bilder wow, die taugen echt fürs MoMa in NYC. Mal ehrlich, hast du dir deine moderne Kunst mal angesehen? Da kann man nur sagen "schöne Bilder" https://thomas-tremmel.de/mein-nachbar-kurt/schoenes-bild
Also bei mir stellt sich vage der Verdacht ein, dass unser TO... ein TROLL ist! Gruss Chregu
Also ich finde, die Quaöität der Bildet entspricht voll dem der meisten Antworten. Ich habe mehrfach versucht zu etklären, worum es geht. Keiner hat irgendwas nachgefragt, aber alle haben fleissig reininterpretiert. Zeigt mir wieder aufs neue, das die Profis in zu hohen Regionen denken und man als (fortgeschrittener) Anfänger besser sein eigenes Ding macht oder woanders.... Trotzdem werde ich bei weiteren <problemen auch hier wiedet posten, da, wenn man eine passende Lösung, mit Hilfe der Profis, findet, die Qualität derselben doch recht hoch ist.
Christian M. schrieb: > Diese "Shields" und der "Arduono" ist dokumentiert Schaltplan RAMPSXB (das ist ein Shield für RAMPS, mit Eagle Dazeien, aber sonst mässiger Doku), ohne Eagle installieren zu müssen. Der Import in KiCAD ist für mich nicht zufriedenstellend.
Die Bilder sollten auch nur zeigen, wie komplex das ganze mittlerweole ist.
Jürgen schrieb: > Keiner hat irgendwas nachgefragt, > aber alle haben fleissig reininterpretiert. Hast du meinen Ansatz wenigstens ausprobiert? Ich sehe keine Antwort deinerseits dazu.
Jürgen schrieb: > Trotzdem werde ich bei weiteren <problemen auch hier wiedet posten, da, > wenn man eine passende Lösung, mit Hilfe der Profis, findet, die > Qualität derselben doch recht hoch ist. Das ist natürlich voll Scheisse, diese hohe Qualität! Gruss Chregu
S. R. schrieb: > Hast du meinen Ansatz wenigstens ausprobiert? > Ich sehe keine Antwort deinerseits dazu. Nein. Aber das ist mir auch egal, weil ich glaube das du mir nicht die Antwort gibst die ich will.
Jürgen schrieb: > das du mir nicht die Antwort gibst die ich will. Du hast Dich in eine Sackgasse verrannt. Das ist ein häufiger Fehler bei Anfängern, aber auch bei Profis. Noch schlimmer ist aber noch Deine Forderung, genau die Antwort zu hören, die Du willst. So wirst Du nie weiterkommen. Man kann Dir nicht helfen! PLONK! Gruss Chregu
Jürgen schrieb: > Nein. Aber das ist mir auch egal, weil ich glaube das du mir nicht die > Antwort gibst die ich will. Das ist allerdings unterste Schublade, wenn man unter falschen Namen, irgendwrlchen Durchfall postet.
Jürgen schrieb: > Ich habe mehrfach versucht zu etklären, worum es geht. Keiner hat > irgendwas nachgefragt, aber alle haben fleissig reininterpretiert. Um nachzufragen, müßte man wenigstens im Ansatz eine Idee haben, was Dein eigentliches Problem ist. Das ist mir bisher bei keinem Post von Dir gelungen. Ich weiß ja nichtmal, was dieses "Marlin" oder ein "Frankenstein-Board" sein soll.
Hallo, > Übrigens: Von wem stammt das mit dem Namen zum Schaltvorgang? Hier komme ich mir ehrlich gesagt verarscht vor. > Mir geht es einfach mur darum, das 'Dn' in gewissen Zeitabständen den > String 'Dn' ausgibt. Hier fehlt mir der Sinn dafür. Wenn eine Ausgabe ohne jeden Grund aller x [Zeit] erfolgt, was hilft dir das? Wenn du das wirklich so haben möchtest, dann programmiere es. Aller paar ms wird irgendwas auf die Serielle geschrieben. Ohne jeden Bezug aber sinnfrei. > Ich habe mehrfach versucht zu etklären, worum es geht. Keiner hat > irgendwas nachgefragt, aber alle haben fleissig reininterpretiert. Nachfragen gibt es, nur leider keine brauchbare Erklärung für das eigentliche Problem. Das heißt, wir wollen nicht wissen wie du machen möchtest, wir wollen wissen was dein eigentliches Problem ist. Letzteres ist bis heute absolut unklar. Ansonsten kommen falsche Ideen und Antworten bei raus.
Jürgen schrieb: >> Hast du meinen Ansatz wenigstens ausprobiert? >> Ich sehe keine Antwort deinerseits dazu. > > Nein. Aber das ist mir auch egal, weil ich glaube > das du mir nicht die Antwort gibst die ich will. Du willst auf jedem Pin eine SoftSerial, die den Pin-Namen rausbläst. Hab ich skizziert. Wenn du was anderes hören wolltest, dann drücke dich deutlicher aus. Seufz. Undankbarkeit ist der Welten lohn.
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.