Forum: Mikrocontroller und Digitale Elektronik ATMEGA128 mit PIO-Baustein 82C55


von Armin (Gast)


Lesenswert?

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

von Michael U. (Gast)


Lesenswert?

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

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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.

von Peter D. (peda)


Lesenswert?

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

von Armin (Gast)


Lesenswert?

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

von Armin (Gast)


Lesenswert?

hm, netürlich auf High ziehen, damit die Daten übernommen werden...mein
Fehler, sorry

von Armin (Gast)


Lesenswert?

oh, nochmal sorry, habs gesehen, hab mich an der Pin-Nr.
verkuckt...alles erledigt/klar

von Dieter Werner (Gast)


Lesenswert?

Es gibt doch sicher auch ATMEGAs in 80TQFP Gehäusen, die sollten von
Hause aus genügend I/O Pins haben.

von Thomas O. (Gast)


Angehängte Dateien:

Lesenswert?

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