Forum: Mikrocontroller und Digitale Elektronik Atmega2560 mit mehreren Atmega128 vernetzen


von Willi (Gast)


Lesenswert?

Wie kann ich am besten einen Atmega2560 mit mehreren Atmega 128 
vernetzen?
Der AM2560 soll an mehreren Displays per Text die IO-Ports der 
vernetzten AM128er anzeigen.
Die AM128er fragen sehr viele Ports(über 100) ab, und müssen auch sehr 
viele Ports steuern..., deshalb soll die Arbeit auf 3 bis 4(erweiterbar) 
AM128er aufgeteilt werden.
Die ganze Anlage wird in eine Segelyacht eingebaut, und soll um nur mal 
einige Funktionen zu nennen folgendes erledigen:
Ankersteuerung mit Kettenzählwerk, Außenbordersteuerung mit Servos für 
Gas und Schaltung, 4 verschiedene Tanks auf Füllmengen abfühlen mit 
AD-Wandler, sämtliche elektr. Schaltkreise per Taster abfühlen und die 
Ausgänge dazu schalten, Alarmanlage, Zentralveriegelung, 
Heizungssteuerung, Kühlschrank per Handy von der Ferne aus 
Ein-Ausschalten usw...
Die passende Elektronik dazu ist für mich kein Problem, bin seit ca. 40 
Jahren Elektroniker...
Wenn ein AM128er z. B. einen gedrückten Taster abgefragt hat, dann soll 
er den betreffenden Port einschalten, und sich den Status in einer 
Byte-Variable ablegen. Beispiel: Dem Ankerlicht ordne ich den Wert 
50(dezimal) zu. Wenn das Ankerlicht eingeschaltet wurde, setze ich nur 
das Bit7(Wert=128) dazu, dann hat das Ankerbyte den Wert 178.
Nun soll der AM2560 so ca. jede Sekunde die 128er (denke mal per I2C) 
abfragen, und die empfangenen Bytes als Klartext im Display anzeigen.
Jetzt meine Frage: geht das am besten mittels BASCOM mit dem I2C Bus, 
oder mit der SPI-Schnittstelle, aber dann brauche ich wieder 
Enable-Ports um die 128er an ihren Schnittstellen anzusprechen. Also ich 
denke eher an den I2C-Bus...
Wer hat Lösungsvorschläge, bin für jede Antwort dankbar...

von Michael Wilhelm (Gast)


Lesenswert?

I2C geht, SPI und USART funktioniert auch. Aber bei I2C und USART musst 
du jeden 128er mit einer eindeutigen Adresse versehen. Bei SPI geht die 
Adressierung über einen CS (Chip Select) Pin.

Weiteres Kriterium: wie weit sind die Sklaven vom Master entfernt? Sind 
alle Controller auf einer Leiterplatte oder sind die Skaven auf dem 
Schiff verstreut. Wenn verstreut, dann die USART über RS485 oder 422 
nehmen.

MW

von Peter D. (peda)


Lesenswert?

Man kann natürlich sehr viel Zeit reinstecken und Protokolle und 
verschiedene Firmware für die einzelnen MCs entwickeln.

Oder man macht es sich einfach, nimmt nur einen MC und erweitert ihn um 
die gewünschte Anzahl an IOs:

http://www.mikrocontroller.net/articles/Porterweiterung_mit_SPI


Es ist auch interessant zu sehen, wie unglaublich hoch der 
Ressourcenbedarf von Anfängern eingeschätzt wird.

Ein einzelner ATmega16 dürfte diese Aufgabe dicke wuppen können.

Willst ja schließlich kein Windows-XP drauf laufen lassen.


Peter

von Willi (Gast)


Lesenswert?

Antwort für  Michael Wilhelm.

Alles auf eine Platine geht auf gar keinen Fall, dafür ist die Hardware 
viel zu aufwendig. Die Ausgangsströme bis etwa 3-4 Ampere werde ich mit 
MOSFETs treiben, und alles darüber mit Relais. Ankerwinde etwa 50 Ampere 
usw.
Ich baue alles in ein großes Gehäuse von etwa 60cm X 40cm. Darin gibt es 
eine große Hauptplatine auf dem Boden, wo nur Slots, also Steckplätze 
für die einzelnen Platinen drauf sind. Diese Hauptplatine verbindet über 
Leiterbahnen die einzelnen Slots, und stellt die Verbindungen auf 
Sub-D-Steckern bereit für die Leitungen die dann im ganzen Schiff 
verteilt sind. Bedienpanele in Kopje, auf dem Steuerstand usw...
Ich denke das ich alle Controller in dieses Gehäuse auf die einzelnen 
Platinen verteile. Somit dürfte die max. Länge zwischen den Contollern 
vielleicht 50-60cm sein..., Platine raus, über die Hauptplatine und in 
die Platine rein mit dem AM2560 der dann alle(sehr viele Texte) auf die 
LCD-Displays bringt...
Ich hoffe das der I2C-Bus diese 50-60cm über 2-3 Steckverbindungen 
mitmacht???

Danke für Deine Antwort, Michael

Gruß
Willi

von Willi (Gast)


Lesenswert?

Antwort für  Peter Dannegger.

Sicher hast Du recht alles mit einem Controller machen zu können...
Aber ich möchte die ganzen Aufgaben auf mehrere Controller verteilen 
wegen verschiedenen Gründen: Nur Teile mit Betriebsspannung versorgen 
die benötigt werden, Brauche Nachts keine Motorsteuerung, aber z. B. die 
Heizungssteuerung... Zudem soll nicht alles in Funktion sein wenn ich 
nicht da bin, wegen Gewitter oder sonstwas, aber die Zentralverriegelung 
und die Alarmanlage müssen laufen usw...
Und wenn mal was defekt ist, dann nicht gleich alles, deshalb teile ich 
meine Platinen in einzelne Module auf...
Was macht eigentlich ein spannungsloser Controller der am IO-Pin 5V von 
einem Taster oder irgend einem Gerät bekommt das er im normalfall 
abfragen soll, diese Controller-Platine aber wegen Stromverbrauch 
abgeschaltet ist? ich vermute mal das sich der Controller über seine 
Schutzdioden selbst Spannung auf VCC legt und zum arbeiten anfängt...
All diese Dinge muß ich berücksichtigen bei diesem Projekt.
Porterweiterungs-ICs will ich nicht einsetzen, dafür sind die Atmels 
viel zu billig, und entlasten zudem den Master. Peter, es ist für Dich 
schlecht vorstellbar was alles erledigt werden soll, ich weiß sehr wohl 
was ein Prozessor leisten kann..., hab mein ganzes Haus am PC hängen, 
256 Schleifen werden im Interrupt gehändelt zum abfragen und 127 Ports 
zum steuern, Alarmanlage, Heizung, Termine, Soundausgabe im ganzen 
Haus..., und der Prozessor ist höchstens mal 10 Prozent ausgelastet.
Aber zurück zu dem Schiff-Projekt. Wenn ich alle Funktionen hier 
aufzählen würde, dann ergäbe das etwa 10 Din-A4 Seiten...
Der AM2560 würde das alles vom Speichplatz her schaffen, aber von den 
aufgeführten Gründen möchte ich Modular bleiben.

Vielen Dank für Deine Antwort und Unterstützung bei diesem komplexen 
Projekt.
Danke Peter

Gruß
Willi

von Peter D. (peda)


Lesenswert?

Willi wrote:

> Was macht eigentlich ein spannungsloser Controller der am IO-Pin 5V von
> einem Taster oder irgend einem Gerät bekommt das er im normalfall
> abfragen soll, diese Controller-Platine aber wegen Stromverbrauch
> abgeschaltet ist?

Das mögen die AVRs garnicht.

Von Latchup (IC wird schweineheiß und brennt durch) bis 
Flash/EEPROM-Vergeßlichkeit oder kein Reset (Programm startet irgendwo) 
ist alles drin.

Du kannst aber den AVR in Sleep setzen und bei Bedarf per Interrupt 
aufwecken. Die paar µA wird Deine Batterie noch verkraften.


Wir haben auch mal versucht den I2C als Gerätesteuerbus zu verwenden (es 
lief nie richtig), daher kann ich davon nur dringenst abraten.

Bei 50A Stromspitzen in der Boardversorgung wird der I2C nur Ärger 
machen.
Da der I2C bidirektional ist, läßt er sich nur schwer galvanisch trennen 
oder treiben.


Wenn Du Dir was gutes tun willst, also eine zuverlässige dauerhafte 
Lösung suchst, dann nimm CAN (AT90CAN32/64/128), die riesen 256kB des 
ATmega2560 brauchst Du im ganzen Leben nicht. Erst recht nicht, wenn Du 
für jede kleine Teilaufgabe schon nen riesen AT90CAN128 nimmst.


Peter

von Willi (Gast)


Lesenswert?

Danke, es ist einfach toll das es Dich hier gibt!!!

Du hast mir damit sehr viel arbeit eingespart..., ich dachte es mir 
schon das es Probleme gibt wenn die MCs keine Betriebsspannung haben, 
und die IO-Pins irgendwo am Bordnetz hängen... Das mit dem Sleep-Modus 
ist ne gute Idee.

Und Stromspitzen habe ich an Bord immer..., selbst die gekauften 
Bordinstrumente wie Echolot, und Autopilot spinnen manchmal.

Und wenn der I2C-Bus so anfällig ist wie Du sagst, was ich Dir ja auch 
glaube, dann muß ich wirklich auf den CAN-Bus, der ja auch deshalb in 
den Autos seine Dienste tut. Danke Peter, werde Deinen Rat annehmen und 
die AT90CAN128 für mein Projekt einsetzen.

Eine Frage noch: Ich brauche 3 Displays 204Dip(20X4) die alle 3 das 
gleiche anzeigen sollen. Eins auf dem Steuerstand, eins auf der 
Schalttafel im Salon, und eins in der Koje. Ich treibe die LCDs im 4-Bit 
Mode und die E, RW, RS-Leitungen usw. Mit der Beleuchtung sind das 
zusammen 8 Ports die ja alle vom MC als Ausgang geschaltet sind. Da 
müßte es doch möglich sein, alle 3 Displays parallel zu schalten, da 
diese Ansteuerung ja nur in eine Richtung zu den Displays geht...?

Danke schon mal im voraus...
Willi

von Dipl. Ing. (depr.) (Gast)


Lesenswert?

I2C Bus solltest Du über bidirektionale Bus-Treiber entkoppeln.
Insbesondere, wenn Du einzelne Controller im Bus schlafen legst, oder 
mehr als 1 Meter überbrückt werden soll. Funzt ganz gut mit Philips 
P82B96 oder PCA9512.

von Peter D. (peda)


Lesenswert?

Willi wrote:

> Eine Frage noch: Ich brauche 3 Displays 204Dip(20X4) die alle 3 das
> gleiche anzeigen sollen. Eins auf dem Steuerstand, eins auf der
> Schalttafel im Salon, und eins in der Koje. Ich treibe die LCDs im 4-Bit
> Mode und die E, RW, RS-Leitungen usw. Mit der Beleuchtung sind das
> zusammen 8 Ports die ja alle vom MC als Ausgang geschaltet sind. Da
> müßte es doch möglich sein, alle 3 Displays parallel zu schalten, da
> diese Ansteuerung ja nur in eine Richtung zu den Displays geht...?

Ja, wenn alle vom gleichen Typ sind und den gleichen Text anzeigen 
sollen.
Ansonsten gehts auch, wenn man den E-Pin getrennt führt.

Aber wenn schon vernetzt, würde ich den Displays auch je nen eigenen AVR 
spendieren.


Peter

von Willi (Gast)


Lesenswert?

Antwort für  Peter Dannegger.

Habe es mit 2 Displays schon probiert, es funzt prima. Dann wird es mit 
3 parallelgeschalteten Displays auch gehen.

Werde mir jetzt mal mit Target 3001 ein Layout für einen At90CAN128 
Adapter auf Stiftleiste im 2,54er Raster machen. Mit auf den Adapter 
kommen: Quarz, Reset-Taster, ISP-Stecker, 7805 Spannungsregler, 
CAN-BUS-Treiber PCA82C250, und ein paar Jumper usw...
Ätze mir dann mal 2 Adapter um mal etwas mit dem CAN-Bus rum zu 
experimentieren.

Danke Peter für Deine kompetente Hilfe!!!

Gruß
Willi

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
Noch kein Account? Hier anmelden.