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