Porterweiterung, aber wie ???

JOJO150272

Mitglied
23. März 2008
30
1
8
Sprachen
Hallo Leute,

ich möchte eine Porterweiterung für mein Board machen, weiß aber nicht wirklich was ich machen soll. Was ist den die beste Möglichkeit???

PCF 8574, oder 74H573 oder was mache ich.

Ich programmiere in Bascom und möchte die Ports getrennt von einander ansprechen (Portx0 = 1, Portx1 = 0, Portx2 = 0, usw.)

mfg Jörg
 
Hallo Jörg,

es läßt sich schwer sagen, was die beste Lösung ist. Man müsste erst einmal mehr über die Anforderungen an die Porterweiterung wissen, zum Beispiel fallen mir da jetzt folgende Fragen ein ...
  • Sollen die zusätzlichen Ports bidirektional sein (In/Out) oder reicht es unidirektional (In oder Out)
  • Ist die Zugriffsgeschwindigkeit wichtig? (Hintergrund: Interface parallel oder seriell zB. per I2C, SPI o.ä)
  • Wieviele zusätzliche IOs (Ports) benötigst du?
  • Könnte man ggf. einen AVR mit mehr IOs einsetzen?
  • Sollen Ausgänge bestimmte Lasten schalten?
Grüße,
Dirk
 
Porterweiterung

Hallo Dirk,

ich verwende ein Board von Display-3000 mit einem Atmega 2561 drauf. Das habe ich zur 16 Kanal Zeitschaltuhr ausgebaut. Jetzt habe ich mir überlegt für die 16 Kanäle eine Handbedienung einzubauen, so das ich die 16 Kanäle per Taste ein oder ausschalten kann, egal was gerade das Programm der Uhr sagt. Da ich vor habe einen EEprom (AT24C512, oder besser 2 Stück) zur Erweiterung des Speichers für die Schaltzeiten über I2C Bus anzuschließen wäre das wohl eine gute Idee die Porterweiterung auch darüber zu machen. Nur habe ich noch nie etwas mit I2C gemacht. Da bin ich ein kompletter Anfänger und habe keinen blassen Dunst wie das geht. Ich habe ja auch schon über einen DS1307 über I2C nachgedacht. Habe mich aber auch noch nicht dran getraut weil es komplettes Neuland ist.

Die zweite Anwendung ist ein Unterputz Modul mit einem Atmega 16 oder 32. Da möchte ich per I2C Bus eine Porterweiterung für Taster machen, bzw. da möchte ich auch Sensoren dran anschließen.

Mit freundlichen Grüßen Jörg
 
Hallo Jörg,

wenn du sowieso schon I2C nutzen möchtest, dann siehe dir einmal im Datenblatt des ATmega2561 die TWI-Schnittstelle an (Two wire interface). Die NXP Porterweiterung PCF8574 könntest du hier auch verwenden, allerdings benötigst du für 16 IOs zwei ICs. An die TWI-Schnittstelle kannst du bis zu 128 Slaves anschließen, Clock (SCL) und Datenleitung (SDA) benötigen Pullup-Widerstände.

Wenn du wirklich nur Eingänge brauchst, könntest du alternativ auch die Tastensignale in zwei 8Bit Parallel-Seriell-Wandler (z.B. 74HC597) laden und dann in 16 Taktzyklen seriell in den AVR schieben (Signale: Load, Clock, Data).

Mit was programmierst du denn die AVRs, Bascom, C oder Assembler?

Grüße,
Dirk
 
Porterweiterung

Hallo Dirk,

ich programmiere in Bascom.

Ich habe mir schon im Datenblatt die TWI - Schnittstelle angesehen und festgestellt das es ein I2C Bus ist. Habe mir auch schon Datenblätter für den PCF 8574 angesehen, werde aber nicht ganz daraus schlau. Ich kann zwar einen Beispiel Code nehmen, aber mir wäre es lieber wenn ich auch verstehen würde was ich da mache. Der Anschluss ist klar, auch die Pull-up Widerstände, aber wie mache ich die Ansteuerung der Eingänge bzw. der Ausgänge ???

Kann ich die Ein- bzw. Ausgänge auch so ansprechen wie vom 2561 ??? also PordC.4 = 1 ???

Für das Unterputz Modul werde ich wohl einen P82B715 als Treiber Baustein benötigen, wegen der Leitungslängen von bis zu 10m in den Räumen.


mfg Jörg
 
Hallo Jörg,

einige sehr gute Beipiele in Bascom findest du hier. Dort wird auch der PCF8574 beschrieben, ein Beispielprogramm und ein Schaltbild ist ebenfalls vorhanden. Nutzt man hier Bascom, brauche man kaum noch etwas selber programmieren.

In den AVR-Datenblättern steht unter TWI eigentlich schon ziemlich viel drin. Die I2C Bauelemente haben eine vom Hersteller festgelegte Adresse (Unique ID), beim PCF8574 kann man die unteren drei Bits der Adresse durch Anschließen dreier Input-Pins (A0, A1, A2) an VCC oder GND selber wählen, so dass sich mehrere PCF8574 an einem Bus ansprechen lassen.

Um Eingänge und Ausgänge des PCF8574 ansprechen zu können, musst du in Bascom eine bestimmte Abfolge von Befehlen ausführen. Ob man schreibt oder liest, ist von dem RW-Bit abhängig, das mit dem Adressbyte gesendet wird (LSB).

Sind A0 bis A2 des PCF8574 auf GND geschaltet, ist die Adresse für schreiben 0x40 (0b01000000) und für lesen 0x41 (0x01000001), blau ist die Adresse, bold ist das RW-Bit.

Ich würde mir einfach das bascom-Beispiel ansehen und versuchen, den PCF8574 selber anzusteuern. Ähnlich kommuniziert man dann auch zum Beispiel mit EEPROMs, LCD-Controllern, LED-Treibern usw...

Grüße,
Dirk
 
Porterweiterung

Hallo Dirk,

habe mir deinen link angeschaut, der ist wirklich sehr gut. habe ihn auch schon durchgelesen, habe aber noch ne frage dazu.

wie kann ich die ports am 8574 den einzelln ansprechen, geht das oder wie steure ich die einzellnen ports an, wie geht das.

kannst du mir helfen ???

gruß jörg
 
Hallo Jörg,

wenn du einen Ausgang high setzt, also für die Bit-Position des Pins eine "1" sendest, wird die interne Stromquelle von VCC zu dem Pin eingeschaltet (Ausgang High). Hier fließen lediglich etwa 100uA. Du kannst nun einfach einen Taster an diesen Pin gegen Masse anschließen. Wenn du das Portregister einliest, erhältst du eine "1" wenn der Taster nicht betätigt ist, ansonsten eine "0".
Du setzt einen Pin auf low, indem du eine "0" schreibst. Nun wird an dem Pin die Stromsenke gegen GND eingeschaltet, hier fließt ein höherer Strom (ich glaube so um die 25mA max.), du kannst hiermit zum Beispiel eine LED mit Vorwiderstand treiben.

Kurz:
Wenn Du Pins als Eingang nutzen möchtest, zuerst die Pins auf High setzen. Dann einfach Taster an diese Pins gegen GND anschließen. Dann den Pinzustand mit Read (0x41) einlesen.

Grüße,
Dirk
 
Die Elektronen in einem elektrischen Stromkreis fließen vom niedrigeren zum höheren Potential bzw vom Minuspol zum Pluspol. Wenn ein Pin nun auf Eingang geschaltet ist, bedeutet das dann immer, das dieser Pin das höhere Potential hat und umgekehrt das niedrigere Potential, wenn wer auf Ausgang geschaltet ist?
 
Hallo Matthias,
Die Elektronen in einem elektrischen Stromkreis fließen vom niedrigeren zum höheren Potential bzw vom Minuspol zum Pluspol...
die Physik vergess einfach mal. Die Funktion des Pins ist ähnlich wie die Funktion beim AVR, ich habe mal ein Bild von der Beschaltung des Pins eines AVRs angehängt.

Ob der Pin ein Eingang oder Ausgang ist, entscheidet das Register DataDirectionRegister (DDRx). Ist das entsprechende Bit in diesem Register gesetzt, ist der Ausgangstreiber (im Bild in der Mitte) aktiviert, ansonsten ist er deaktiviert. Ist der Ausgangstreiber deaktiviert, kann man mit setzen des Bits im Register PORTx den Pullup aktivieren, das heisst, der Pin wird auf VCC "gezogen", wenn keine Last an dem Pin angeschlossen ist, der logische Zustand des Pins ist high. Wird eine ausreichend niederohmige Last (zum Beispiel ein Taster) angeschlossen, wird der logische Zustand des Pins low.
Den logischen Zustand des Pins kann man über das Register PINx auslesen (Eingangsstufe unten im Bild).

Oft gemachter Fehler beim Einlesen des logischen Zustandes eines Pins: Auswerten des Registers PORTx anstelle PINx. PORTx ist das Port-Register, das die logischen Zustände der Pins eines Ports im Output-Betrieb definiert oder die Pullups im Input-Betrieb aktiviert oder deaktiviert,

Im Gegensatz zum PCF8574 kann der AVR durch seinen Ausgangstreiber einen höheren Strom im Zustand high liefern, der PCF8574 liefert hier nur etwa 100uA. Das entspricht der Pullup-Funktion beim AVR.


Grüße,
Dirk
 

Anhänge

  • AVR_IO.png
    AVR_IO.png
    44,4 KB · Aufrufe: 155

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)