Hallo Leute, ich soll für ein bestehendes Gerät eine Test-/Überwachungshardware (Systemtest...) samt µC aufbauen. Prinzipiell würde mir die ATMEGA serie schon dafür gefallen, ich auf einem ATMEGA32 schonmal etwas gemacht. Allerdings gilt es in diesem Fall 44 Pins des Systems zu überwachen und das möglichst simultan. Daher meine Frage zu einem ATMEGA128. Dieser hat ja ein Bussystem herausgeführt, an dem ich dort mittels eines PIO-Bausteins die Anzahl der verfübaren PIO Pins erhöhen kann. Wie funktioniert das dann beim Ansprechen des externen Ports in C? Habe das noch nie gemacht und würde mal im vorab paar Tips benötigen, damit ich es besser abschätzen kann, ob es klappen könnte und wie... Gibt es evtl. bessere Bausteine als 82C55 (zusätzlich 3 Ports a 8Bit)? Habt Ihr andere Bausteinfamilien benutzt? Vielen Dank für eure Infos. Armin
Hallo, kommt ganz drauf an, was da wie gemessen werden soll. z.B. 8x 8Bit-TriState-Buffer mit den Ausgängen parallel an einen Port, die /OE-leitungen an einen anderen und Du hast 64 Eingänge. Die Abfragen passieren dann per Software jeweils nacheinander. Wenn der Status zeitgleich erfasst werden soll, Buffer mit Eingangs-Latch nehmen und vom MC das Latch verriegeln vor dem Auslesen der Daten. Das alles hängt davon ab, wie oft und in welcher Art überwacht werden soll... Einen 8255 würde ich ohne zwingenden Grund nicht nehmen, der Aufwand wäre mir zu hoch. Gruß aus Berlin Michael
Du könntest den Baustein wie externes RAM ansprechen, also den externen Adress- und Datenbus des AVR aktivieren und den 8255 per Adressdecoder anschließen (der Adressdecoder ist nur dann erforderlich, wenn am Bus noch mehr als der 8255 hängen soll, was sinnvoll erscheint, da sonst sehr viele Portpins dafür "verballert" werden müssen, um gerade mal 24 "zusätzliche" Portpins zu erhalten. Der 8255 hat zwar drei 8-Bit-I/O-Ports, aber einer davon ist nur mit Verrenkungen zu nutzen. Außerdem ist ein 40poliges DIP-Gehäuse auch schon ein ziemlicher "Fladen". Oftmals genügt es, einfache Bustreiber (74x244, 74x245, 74x541 ...) bzw. Latches (74x374, 74x574 ...) zu verwenden, um einen 8-Bit-Eingang bzw. Ausgang zu erhalten. Um I/O-Pins am AVR zu sparen, ließe sich so etwas auch mit einem Schieberegister oder einem I²C-I/O-Baustein realisieren, dann ist allerdings der erzielbare Datendurchsatz etwas geringer. Wenn ein solcher externer I/O-Baustein wie externes RAM angeschlossen wird ("memory mapped I/O"), dann wird so ein Baustein aus C heraus wie normaler Speicher angesprochen. Wichtig ist, daß die entsprechenden I/O-Adressen als "volatile" deklariert werden, da sich der Zustand der Bausteine auch ohne Wissen des Compilers ändern kann; der Compiler darf hier also keine optimierenden Annahmen treffen.
Da rollen sich ja dem Mega128 die Pins hoch, wenn er neben so nem Uralt-Monster-Chip 8255 sitzen muß. Nimm einfach ne entsprechende Anzahl 74HC165 am SPI und gut is. Wenn Dich der hohe Layoutaufwand nicht scheut, kannst Du auch ein paar 74HC541 und nen Dekoder 74HC138 nehmen, dann sind die Inputs direkt im SRAM gemappt. Peter
werde wohl zu der Erweiterung via SPI greifen, nur habe ich zum Beispielschaltplan http://www.mikrocontroller.net/attachment.php/30856/SPI_74HC595.pdf eine Frage. Bei den Ausgängen (HC595) liegt dort OE permanent auf Masse. Das heißt doch, dass die Ausgänge dort das sofort wiedergeben, was an jeweiligen internen Latch Outputs anliegt. Also beim shiften "wackeln" meine Ausgänge, bis ich den Wert komplett aus'm µC hinausgeschoben habe, richtig? Als Abhilfe würde doch reichen, einfach OE auf einen µC-Pin legen? Diesen Pin müsste ich dann, wenn das shiften beendet ist, auf low ziehen und es wäre immer ein stabiler Zustand, oder? Danke
hm, netürlich auf High ziehen, damit die Daten übernommen werden...mein Fehler, sorry
oh, nochmal sorry, habs gesehen, hab mich an der Pin-Nr. verkuckt...alles erledigt/klar
Es gibt doch sicher auch ATMEGAs in 80TQFP Gehäusen, die sollten von Hause aus genügend I/O Pins haben.
Oder vielleicht mehrere 573er parallel als Eingangserweiterungung schalten den Pin für die Datenübernahme in den Buffer schaltest du zusammen, so das mit einem kurzen Impuls vom AVR alle 573 gleichzeitig die anliegenden Werte abspeichern, danach ließt du jeden Baustein einzeln mit dem gleichen Port aus musst halt nur den richtigen selektieren. Das angehänge Beispiel ist etwas abgespeckt da, der Baustein kann was an den Eingängen anliegt abspeichern (sich trasparant stellen) die Eingangssignale an die Ausgänge durchschalten und sich hochohmig schalten so das er keine Belastung für die restliche Beschaltung darstellt.
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.