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...
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
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
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
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
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
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
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.
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
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