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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.