BASCOM + I2C-Eingabe und I2C-Ausgabe

Hier ein kleiner Aufbau mit einer I2C-Eingabekarte und einer I2C-Ausgabekarte an einem ATMEL Mega88 Microkontroller

An der Transistor-Ausgabekarte können Finder-Relais angeschlossen werden mit denen wiederum größere Leistungen geschaltet werden können.

Der Leistungstransistor der invertierten Ausgabekarte schaltet in diesem Fall Masse. Der Verbraucher wird also mit der positiven Versorgungsspannung (max. 40V) verbunden.

Wem das Schalten des „Minus“ nicht behagt sollte die Platine mit Relais bestücken! Dann können Sie schalten was Sie möchten Plus, Minus, Wechselspannung

Das Ansteuerprogramm für den ATMEL Controller wurde in BASCOM geschrieben.

 


$regfile = „m88def.dat“
$crystal = 8000000
$lib „i2c_twi.lbx“
Config Scl = Portc.5
Config Sda = Portc.4
 
‚Variablen deklarieren
‚======================
Dim Eing_wert As Byte
Dim Ausg_wert As Byte

‚Konstanten
‚==========
Const Eing_adresse = 113                 ‚ Adresse Eingabekarte
Const Ausg_adresse = 68                  ‚ Adresse Ausgabekarte

‚Eingänge konfigurieren
‚======================
Taste Alias Pinb.0                       ‚ Taste
Config Taste = Input

‚Ausgänge konfigurieren
‚======================
Led_gn Alias Portc.1
Config Led_gn = Output

‚I2C initialisieren
‚==================
I2cinit

Main:
Do

‚Wert von der Eingangskarte lesen
I2cstart
I2cwbyte Eing_adresse                    ‚ Adresse PCF8574A der Eingabekarte
I2crbyte Eing_wert , Nack                ‚ Wert lesen
I2cstop

‚Gleichen Wert zur inversen Ausgabekarte Schreiben
Ausg_wert = 255 Eing_wert

I2cstart
I2cwbyte Ausg_adresse                    ‚ Adresse PCF8574 der Ausgabekarte
I2cwbyte Ausg_wert                       ‚ Wert schreiben
I2cstop

‚LED toggeln und kurz warten
Toggle Led_gn
Waitms 10

Loop
End


 

7 Kommentare

  1. Hallo Herr Horter,
    ich verwende mehrere I2C Eingabekarten für meine Rollosteuerung. Meine Karten laufen mit einer externen Schaltspannung von 9V und sind über den I2C-Repeater an einen PI angeschlossen.
    Die normalen I2C Lesefunktionen funktionieren auch ohne Probleme. Aber leider bekomme ich kein Interrupt-Signal.
    Laut ihrer Kartenbeschreibung sollte die rote LED ein Interrupt anzeigen. Diese leuchtet aber immer sobald ich die 5V vom PI an die Eingabekarte lege. Beim Schalten leuchten zwar die grünen LEDs aber es wird kein INT Signal an die ST1 gegeben.
    Funktioniert der Interrupt nur, wenn ich die 5V vom PI als Versorgungsspannung zum Schalten verwende? Oder gibt es einen anderen Trick um das Interrupt Signal vom PCF8574 auszulesen?
    Danke für ihre Hilfe.
    Mit freundlichen Grüßen
    Thomas B.

    • Hallo Thomas B.
      die LED auf der Eingangskarte sollte aus gehen wenn der Wert von der Karte gelesen wurde. Verändert sich das Bitmuster an den Eingängen geht die LED wieder an.
      Die LED am Repeater leuchtet, wenn eine der Eingangskarten den INT auf Masse zieht.

      Funktioniert der Interrupt nur, wenn ich die 5V vom PI als Versorgungsspannung zum Schalten verwende?

      Das muss immer funktionieren, weil die Masse geschaltet wird.
      Bitte mal den Repeater ohne die Eingangskarten auf den PI stecken und mit 5V versorgen.
      Die LED sollte jetzt dunkel sein und es liegen 5V an INT an.
      Wenn Sie INT mit Masse kurz schließen, sollte die rote INT-LED auf dem Repeater leuchten.
      Das gleiche macht die Eingangskarte wenn sich das Bitmuster ändert.

      Gruß, JH

  2. Hallo,

    Ja, ich würde die neuen I2C-Ausgabekarten für die Hutschiene verwenden.
    Wenn die Relais einen hohen Strom ziehen kann man auch die Ausgabekarte mit den Relais oder den Transistoren einsetzen.
    Die Portexpander werden parallel an den ATMEGA angeschlossen.
    +5V, GND,
    SCL an Pin PC5 (ATmega8)
    SDA an Pin PC4 (ATmega8)

    Wie das Programm aussehen wird kommt darauf an mit welchem Compiler Sie arbeiten.
    Oben ist ein Beispiel mit Bascom.
    Beispiele I2C-Kommunikation für das AVR Studio finden Sie mit der Suchmaschine Ihres Vertrauens.

    • Hallo Herr Syben,

      habe das gerade mal nachgemessen.
      Die Eingabekarte zieht 33mA im Leerlauf wenn alle LEDs aus sind.
      Wurde ein Eingangssignal an einem Eingang erkannt, wird dieses gespeichert und durch eine „Low Current“ LED angezeigt.
      Die Stromaufnahme erhöht sich pro LED um ca 2mA. auf 50 mA wenn alle LEDs leuchten würden.

      Die Ausgangskarte mit Transistorendstufen zieht im Leerlauf nur 1 mA
      Wenn ein Kanal angesteuert ist, wird dies auch durch eine LED angezeigt.
      Dann erhöht sich der Strom um 10mA pro LED auf insgesamt 70 mA wenn alle leuchten.

      Wenn Ihnen das zu viel Strom ist, können wir auch „low current“ LEDs wie bei der Eingabekarte einbauen.
      Dann würde sich der Strom pro LED nur um 2 mA erhöhen.

      Wenn Sie die Rückmeldungen gar nicht brauchen können SIe die LEDs auch ganz weg lassen.
      Die Schaltung arbeitet auch ohne die LEDs

      Beste Grüße
      JH

Schreibe einen Kommentar zu Thomas B. Antworten abbrechen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.