verteilte I/O-Pins definieren

Gast #177346
Lesenswert?

Folgendes Problem habe ich regelmässig:

Ich bin bestrebt In/Out-Pins absolut uiversal zu definieren,
soll heissen:
Jeder Anschluss z.B. eines LCD-Display kann auf einem beliebigen
Port/Pin liegen. Dazu nutze ich define-Konstruktionen wie sie im
Dateianhang angegeben sind.
Gibt es da keine bessere Lösung?
Zum genauen Definieren eines Port/Pins brauche ich 7 define-Zeilen im
Program.
Hat jemand eventuell einen besseren Ansatz?

Volker
Angehängte Dateien:
Gast #177347
Lesenswert?

Meiner Meinung nach macht das nicht viel Sinn.
Allein schon aus Hardware-Gründen legt man die Datenleitungen
zusammen,
Ausserdem lässt sich das Programm besser optimieren, wenn
Datenleitungen auf einem Port liegen.
Gast #177348
Lesenswert?

@Michael
Das macht aus meiner sicht schon viel Sinn:
Beispiel:
Probiere mal an einem 4433 ein LCD-Display anzuschliessen, für das du 8
Datenpins brauchst. Da bleibt dir nur der Port PD. Willst du aber auch
noch die Serielle-Kommunikation nutzen (PD0/PD1) so wird das nichts.
Wenn du aber die benötigten PortPins beliebig verteilen kannst, ist das
kein Problem. Weiterhin sind Bibliotheken viel vielseitiger nutzbar.
Will ich mit einem DS1620 die Temperatur messen, so brauche ich 3
PortPins. Bei der in dem Beispiel angegeben Möglichkeit kann ich jeden
beliebigen PortPin dafür nutzen.

Darin sehe ich einen grossen Vorteil.

Volker
Gast #177349
Lesenswert?

Oft kommt man wirklich nicht umhin, ein paar vereinzelte,
übriggebliebene Pins zu nutzen.

Für Busleitungen o.ä. ist das natürlich sehr mühsam, man muss dann
Bytes aufwendig auf Pins aufteilen (kostet auch Rechenzeit). Daher
beschränke ich mich bei Definitionen einzelner Leitungen normalerweise
auf die Steuersignale, da man die häufig separat schalten muss.

Bevor ich jede Busleitung einzeln ansteuere, nehme ich lieber einen
größeren Controller oder verwende einen Latch bzw. IIC-/SPI-Adapter.
Gast #177350
Lesenswert?

Nochmal kurz zum Thama:

Ich suche eine Lösung mit der ich mit möglichst wenigen
Define-Statements meine benötigten Pins als
- Ausgang
- Eingang
- Ausgang auf H
- Ausgang auf L
- bit_ist_gesetzt
erstellen kann.
Ideal wäre, wenn nur 2 Define-Zeilen für jeden Pin angegeben werden
müssten:
Port und PIN
Bei o.a. Beispiel muss ich bis zu 9 Define-Zeilen erzeugen, gibt es da
keine bessere Lösung?
Gast #177351
Lesenswert?

Schau doch mal in Peter Fleurys LCD Lib.
(http://homepage.sunrise.ch/mysunrise/pfleury/avr-software.html#libs)
Dort ist auch eine schöne Methode um sich die doppelte definition von
PIN und PORT zu sparen....

#define PIN(x) (*(&x - 2))
  /* address of data direction register of port x */
#define DDR(x) (*(&x - 1))
  /* address of input register of port x          */

Wobei x der Port ist.

Gruss
        Mario

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren