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