Author Topic: Ardu3Core  (Read 57300 times)

MathiasW

  • Global Moderator
  • Hero Member
  • *****
  • Posts: 614
  • Karma: +13/-0
    • my Arduino page
Ardu3Core
« on: February 04, 2014, 10:07:01 AM »
Salut,

am Freaky Friday ist mir eine Idee gekommen, die ich gerne diskutieren möchte:
Wäre es sinnvoll, einen Arduino zu konstruieren, welcher den Mega Footprint verwendet, aber statt eines ATMEGA2560 drei ATMEGA328 einsetzt?
Der erste ATMEGA328 würde wie ein normaler Helvetino angeschlossen, die beiden anderen würden die nachfolgenden Pins verwenden. Alle drei CPU wären via I2C verbunden, die Reset via Oder-Gatter zusammengelegt, so dass eine gemeinsamer Reset sowie ein Einzelreset ausgelöst werden kann. Alle CPU würden den gleichen Quartz verwenden, so dass sie synchron laufen. Die Programmierung sollte über einen FOCA Anschluss erfolgen, wobei die jeweilige CPU über einen Schalter gewählt wird.
Aufgrund des beengten Platzes müsste auf die SMD Version der CPU zurückgegriffen werden, was aber kein so großes Problem sein sollte. Ich habe versucht, das Board mit DIL zu bauen, aber dann wird es zu eng für das Routing.
Den direkten Vorteil, den ich sehe ist, dass ich drei Aufgaben eine Projektes leicht parallelisieren kann und dass ich drei unabhängige Interrupthandler habe. So könnte ich mir vorstellen, mit der ersten CPU die Grafikausgabe zu steuern, die zweite CPU mit der Steuerung von Steppern/Servos zu beschäftigen und mit der dritten CPU die Sensoren auszulesen. Und über I2C kann ich die Prozesse synchronisieren. Da am Ende noch einige Pins frei sind, könnte man damit auch die CS Signale von einem SPI Bus realisieren und so die CPU zusammenschalten.

Bevor ich mich nun an das Design setze, wollte ich erst einmal fragen, ob so etwas überhaupt sinnvoll ist.

Ciao, Mathias

arduinopraxis

  • freakyfriday
  • Hero Member
  • *
  • Posts: 553
  • Karma: +11/-0
  • Arduino Praxiseinstieg (4.Auflage)
    • Arduino Praxiseinstieg, 4. Auflage
Re: Ardu3Core
« Reply #1 on: February 04, 2014, 12:50:45 PM »
Hallo Mathias,

das hört sich nach einer coolen Lösung an.
Ein Mehrcontroller-Arduino-Board habe ich bisher noch nie gesehen.

Das Aufteilen der Aufgaben auf mehrere Microcontroller macht Sinn. Ein solcher Ansatz habe ich für mein Netzteilprojekt auch schon angedacht.
Statt mehreren Arduino-Boards zu verwenden, nimmt man den Ardu3Core, hat ein Board und mehrere Module für einzelne Aufgaben.

Die Kommunikation via I2C finde ich auch sinnvoll. Einen solchen Ansatz hast du ja bei der TFT-Library bereits realisiert.

Ein solches Board würde ich gerne verwenden.

Wie wäre es mit dem Namen "Helvetino3Core"  :)
Gruss
Thomas

pylon

  • freakyfriday
  • Full Member
  • *
  • Posts: 158
  • Karma: +16/-0
Re: Ardu3Core
« Reply #2 on: February 04, 2014, 03:33:50 PM »
Interessanter Ansatz, auch wenn ich gestehen muss, dass ich bisher noch kein Projekt hatte, das aus einer solchen 3-Prozessor-Architektur Vorteile hätte ziehen können.

Quote
Die Programmierung sollte über einen FOCA Anschluss erfolgen, wobei die jeweilige CPU über einen Schalter gewählt wird.

Da ein 3-Core-Arduino sowieso nur etwas für erfahrene Arduino-Piloten ist (die Programmierung wird relativ anspruchsvoll), würde ich mir die serielle Schnittstelle freihalten und nur einen ICSP-Anschluss pro Prozessor unterbringen. Das dürfte schaltungstechnisch das Einfachste sein und im Betrieb am wenigsten Probleme verursachen.

arduinopraxis

  • freakyfriday
  • Hero Member
  • *
  • Posts: 553
  • Karma: +11/-0
  • Arduino Praxiseinstieg (4.Auflage)
    • Arduino Praxiseinstieg, 4. Auflage
Re: Ardu3Core
« Reply #3 on: February 04, 2014, 04:49:31 PM »
Quote
Da ein 3-Core-Arduino sowieso nur etwas für erfahrene Arduino-Piloten ist (die Programmierung wird relativ anspruchsvoll),
Wenn ich Mathias richtig verstanden habe, laufen die einzelnen Controller unabhängig voneinander. Man kann also jeden der 3 Arduino mit einem eigenen Sketch ausführen lassen. Der Datenaustausch läuft, falls notwendig),  über I2C.
Somit vereinfacht sich die Programmierung auf die Datenkommunikation mit I2C.


dinoi

  • freakyfriday
  • Sr. Member
  • *
  • Posts: 441
  • Karma: +7/-0
    • Dinoi
Re: Ardu3Core
« Reply #4 on: February 04, 2014, 05:33:38 PM »
Hallo Mathias, ja tolle Idee, da hätte ich auch Ideen für Anwendungen. 3 x 328 ist dann viel besser als ein ATMEGA2560 und auch preiswerter. Die Programmierung ist dann etwas anspruchsvoller aber interessanter. Würdest Du dann nicht ein Master definieren und die 2 mit Interupts antriggern? Alle 3 auf gleichem Level mit Interupts zu verbinden kann ich mir nicht so vorstellen, was passiert wenn einer gerade ein Interupt abarbeitet und ein neuer ankommt?

Gruss Reto

MathiasW

  • Global Moderator
  • Hero Member
  • *****
  • Posts: 614
  • Karma: +13/-0
    • my Arduino page
Re: Ardu3Core
« Reply #5 on: February 04, 2014, 05:51:11 PM »
Salut,

im Grundzustand sollen die drei CPUs unabhängig voneinander arbeiten. Das heisst, dass sie auch ihre Interrupts unabhängig voneinander abarbeiten. Das ist aus m einer Sicht schon allen ein Vorteil, da beim MEGA2560 die CPU die Interrupts nacheinander abarbeiten muss.
Beim I2C kann ich definieren, wer der Master und wer die Slaves sind.
Beim SPI habe ich noch keine genaue Idee, wie ich die CS Signale an die CPUs gebe.

Da ich eh schon mit SMD hantiere, werde ich dem Board noch einen FT232RL spendieren. Dies aber so, dass man bei Nichtbestückung einen FOCA verwenden kann (es ist halt vorne genug Platz)

Ciao, Mathias

pylon

  • freakyfriday
  • Full Member
  • *
  • Posts: 158
  • Karma: +16/-0
Re: Ardu3Core
« Reply #6 on: February 05, 2014, 09:46:10 AM »
Quote
Somit vereinfacht sich die Programmierung auf die Datenkommunikation mit I2C.

Darin sehe ich das grösste Problem, nur schon das Konzept hinter I2C überfordert die meisten Anfänger.

Quote
Beim SPI habe ich noch keine genaue Idee, wie ich die CS Signale an die CPUs gebe.

Was soll das Ziel sein? Die Interkommunikation über SPI anstatt I2C? Dann musst Du einfach die SS rundum verbinden (also z.B. D8/A1 an D10/A2, D8/A2 an D10/A3 und D8/A3 an D10/A1) und das selbe für die Datenleitungen, allerdings über eine Diode mit dahinterliegendem Pulldown (jeweils MOSI an MISO).

In meinen Augen ist das aber keine gute Lösung, denn so habe ich den SPI nicht für andere Dinge frei und drei Mal einen kompletten SPI (in Hardware) zu haben, dürfte einer der grossen Vorteile Deines Ardu3Core sein. Für die Kommunikation untereinander sollte der I2C genügen, wenn man den Speed eines SPI benötigt, dürfte ein Ardu3Core sowieso die falsche Wahl sein, dann ist ein ATmega2560 wahrscheinlich eher angebracht.

MathiasW

  • Global Moderator
  • Hero Member
  • *****
  • Posts: 614
  • Karma: +13/-0
    • my Arduino page
Re: Ardu3Core
« Reply #7 on: February 05, 2014, 10:43:41 AM »
Salut,

ich bin inzwischen auch zu dem Schluss gekommen, dass ich die SPI getrennt lasse. Eigentlich war ja der Auslöser für diese Idee die 4 ungenutzten Pins D51-D54 aus dem Mega Pinout. Ich habe nun die ICSP Header für alle drei CPUs getrennt auf die Platine gelegt. Man sollte den ICSP der ersten CPU bestücken, damit die Shields auf CPU1 laufen (default Arduino). Die ICSP Header der CPU2 und CPU3 kann man unbestückt lassen und dann über den Pogo-Pin Adapter auf die CPU zugreifen.
Den FT232RL habe ich erst einmal vom Plan genommen, da ich zuerst den Anschluss über Foca realisieren will
Statt einem umschaltbaren FOCA favorisiere ich derzeit eine Pinreihe je CPU. Damit kann ich dann (ggf. über angewinkelte Pins) alle drei CPUs gleichzeitig ansprechen, was gerade bei der Entwicklung wichtig ist.

Der Autorouter von Eagle ist hier eine besondere Hilfe. Ohne den würde ich wahrscheinlich verzweifeln...
Ciao, Mathias

arduinopraxis

  • freakyfriday
  • Hero Member
  • *
  • Posts: 553
  • Karma: +11/-0
  • Arduino Praxiseinstieg (4.Auflage)
    • Arduino Praxiseinstieg, 4. Auflage
Re: Ardu3Core
« Reply #8 on: February 05, 2014, 11:39:46 AM »
@pylon

Quote
Darin sehe ich das grösste Problem, nur schon das Konzept hinter I2C überfordert die meisten Anfänger.
Diese Boardlösung ist natürlich eher für erfahrene Anwender gedacht.

@Mathias
Quote
ich bin inzwischen auch zu dem Schluss gekommen, dass ich die SPI getrennt lasse.
Ja, getrennt ist sicher besser.

Quote
Statt einem umschaltbaren FOCA favorisiere ich derzeit eine Pinreihe je CPU. Damit kann ich dann (ggf. über angewinkelte Pins) alle drei CPUs gleichzeitig ansprechen, was gerade bei der Entwicklung wichtig ist.
Getrennte Pinreihen würde ich auch empfehlen.

Quote
Der Autorouter von Eagle ist hier eine besondere Hilfe. Ohne den würde ich wahrscheinlich verzweifeln...
Da bin ich mal gespannt wie das aussehen wird. Vielleicht kannst du ja mal einen Zwischenstand präsentieren  ;)

Gruss
Thomas

MathiasW

  • Global Moderator
  • Hero Member
  • *****
  • Posts: 614
  • Karma: +13/-0
    • my Arduino page
Re: Ardu3Core
« Reply #9 on: February 05, 2014, 01:45:10 PM »
Salut,

würde gerne den Stand der Mittagspause posten, aber das Forum nimmt das Bild (80kB PNG) nicht ..

Ciao, Mathias

MathiasW

  • Global Moderator
  • Hero Member
  • *****
  • Posts: 614
  • Karma: +13/-0
    • my Arduino page
Re: Ardu3Core
« Reply #10 on: February 05, 2014, 02:41:51 PM »
ok - die Forumsoftware mag die Idee nicht ...
versuchen wir es mal als ZIP

arduinopraxis

  • freakyfriday
  • Hero Member
  • *
  • Posts: 553
  • Karma: +11/-0
  • Arduino Praxiseinstieg (4.Auflage)
    • Arduino Praxiseinstieg, 4. Auflage
Re: Ardu3Core
« Reply #11 on: February 05, 2014, 02:47:06 PM »
@Mathias,

das Board sieht ja richtig heiss aus  :)
Ein Arduino-Board auf dem mehrere Sketche parallel laufen. Einfach cool !

Wie wird der Clock für die einzelnen ATmega gemacht? Ich sehe keinen Quarz oder Resonator.

Gruss
Thomas

MathiasW

  • Global Moderator
  • Hero Member
  • *****
  • Posts: 614
  • Karma: +13/-0
    • my Arduino page
Re: Ardu3Core
« Reply #12 on: February 05, 2014, 03:11:22 PM »
Salut Thomas,

bei CPU1 ist ein SMD Resonator (aus dem Sparkfun Sortiment), der an alle drei CPUs angeschlossen ist. Damit sollten die CPUs in Sync laufen. Ich hoffe, das geht. Ansonsten wird der Resonator jeder CPU spendiert
Heute Abend werde ich die Stromversorgung machen und dann an das Routing gehen, da einige Signale vom Autorouter nicht so ganz meinen Vorstellungen entsprechen.
Beim Schaltplan lehne ich mich übrigens an das Boarduino Design von Adafruit an, was aber weitgehend identisch mit dem Helvetino ist. Lediglich bei der Power sind ein paar mehr Kondensatoren dabei
Ciao, Mathias

arduinopraxis

  • freakyfriday
  • Hero Member
  • *
  • Posts: 553
  • Karma: +11/-0
  • Arduino Praxiseinstieg (4.Auflage)
    • Arduino Praxiseinstieg, 4. Auflage
Re: Ardu3Core
« Reply #13 on: February 05, 2014, 03:42:49 PM »
Quote
bei CPU1 ist ein SMD Resonator (aus dem Sparkfun Sortiment), der an alle drei CPUs angeschlossen ist. Damit sollten die CPUs in Sync laufen. Ich hoffe, das geht. Ansonsten wird der Resonator jeder CPU spendiert
OK, habe den Resonator in deinem Layout gefunden.
Ob Parallelbetrieb möglich ist, kann ich auch nicht sagen. Werde dies auch mal anschauen.
Um Probleme zu vermeiden, würde ich jedem ATmega einen eigenen spendieren.

MathiasW

  • Global Moderator
  • Hero Member
  • *****
  • Posts: 614
  • Karma: +13/-0
    • my Arduino page
Re: Ardu3Core
« Reply #14 on: February 05, 2014, 04:42:52 PM »
Salut Thomas,

ich denke, da sich der I2C Bus selbst synchronisiert, ist ein Synchronlauf der CPUs nicht das Risiko wert. Ich habe daher jeder CPU nun einen Resonator gegeben und dabei THD statt SMD gewählt. Ist leichter zu löten und gibt dem Autorouter mehr Möglichkeiten Vias ui sparen.

Ciao, Mathias