I 2 C Porterweiterung


ASURO Porterweiterung mit I2C Bus

Schaltung

Die Schaltung erweitert den ASURO um 8 digitale I/O Ports, und ist auf einer Standard ASURO Erweiterungsplatine aufgebaut. Die Schaltung ist dem I2C IO Board von Klaus Leidinger http://www.mikrocontroller-projekte.de/ nachempfunden.

Als I2C Chip wird der 8-Bit I2C Portbaustein von Philips verwendet. Ebenso kann der pin-kompatible verwendet werden. Die I2C Slave Adresse des ist die 0x40 (0x70 beim PCF 8574A). Über Jumper auf der Erweiterungsplatine können bis zu 8 Geräte (bis zu 16 Geräte beim PCF 8574AP) parallel an einem I2C Bus angeschlossen werden.

Eine vereinfachte Version dieser Schaltung wird auch für die LCD Erweiterung verwendet. Dabei wird auf die Adressierung und INT0 verzichtet. Ebenso wurden die Serienwiederstände in den I2C Leitungen weggelassen.

Schaltplan

Für den I2C Bus werden die Ports PB2(ADC2) als SCL und PB3(ADC3) als SDA benutzt. Optional kann noch INT0 als Interrupt Eingang verwendet werden (über Jumper). Mit kleinen Anpassungen lassen sich auch andere Ports benutzen. Mehrere Boards lassen sich übereinander stapeln (geeignete Pfosten/Buchsen Leiste vorrausgesetzt).

Die I/O Ports sind auf Pfostenstecker geführt, und lassen sich über ein separates I/O Board verwenden. Als quasi bidirektionale Ports lassen sie sich ohne Richtungsumschaltung lesen oder schreiben. Es genügt ein I2C READ Befehl zum lesen der Daten, bzw ein I2C WRITE Befehl zum schreiben. Dem Anwender bleibt es frei, wie er die Pins benutzt.

Platine Vorderseite

Platine Rückseite

Stückliste

AnzahlBezeichnungBeschreibung
1IC1PCF 8574P o. AP, I2C Porterweitungs IC
3R1..3Widerstand, 10 kOhm, optional als I2C Abschluß Widerstände
3R4..6Widerstand, 220 Ohm, Reihenwiderstände I2C Bus (nicht unbedingt erfoderlich)
3R7..9Widerstand, 1 kOhm, PullDown für Hardware Adressen (nicht unbedingt erfoderlich)
1C1Kondensator, 100 nF, Block Kondensator
1 Leiterplatte, ASURO Erweiterungsplatine
1 IC Sockel, 16polig
2ST1..2Steckerleisten 2x3 polig, I2C Bus, Adress Jumper (Adress Jumper kann entfallen, dann Drahtbrücken direkt an GND)
1ST3Steckerleiste, 7 polig, Port 0..3, VCC, GND
1ST4Steckerleiste, 6 polig, Port 4..7, VCC, GND
3ST5..7Steckerleisten, 2polig, Jumper für SCL, SDA, INT
2BU1..2Buchsenleisten, 3polig, Anschluß an Asuro Board
1BU3Buchsenleisten, 2polig, Anschluß an Asuro Board

Software

Da die TWI Pins des ASURO belegt sind, wird der I2C Bus mit Software emuliert. Dazu wird die I2C Master Library von Peter Fleury http://jump.to/fleury benutzt. Die Bibliothek benötigt ca. 500 Bytes im Flash Speicher.

Zum übersetzen der Bibliothek wird AVR-GCC ab Version 3.3 vorausgesetzt. Eine aktuelle Version von WinAVR gibt es bei http://sourceforge.net/projects/winavr/

Seit Version 2.70 der Asuro Bibliothek wird I2C direkt unterstüzt. Die Fleury Lib wird nicht mehr benötigt. Allerdings unterschieden sich dort die Funktionen sowohl im Namen als auch in der Funktionalität.

Ein Beispielprogramm für die I2C Lib von P. Fleury

#include <avr/io.h>
#include "i2cmaster.h"
#include "asuro.h"


#define Dev8574   0x40      // device address of PCF 8574, see datasheet


int main(void)
{
  unsigned char ret;
  unsigned char val;

  Init();                                    // init Asuro
  i2c_init();                                // init I2C interface
  val = 0;

  SerWrite("I2C Demo", 8);
  SerWrite("\r\n", 2);

  while(1)
  {        
    ret = i2c_start(Dev8574+I2C_WRITE);       // set device address and write mode
    if ( ret )
    {
      /* failed to issue start condition, possibly no device found */
      i2c_stop();
      StatusLED(RED);
    }
    else
    {
      /* issuing start condition ok, device accessible */
      i2c_write(val);                       // write data
      i2c_stop();                           // set stop conditon = release bus
      StatusLED(GREEN);
      val++;
    }
    Msleep(500);                            // wait a 1/2 second
  }
  return 0;
}

i2cmaster.zip - das komplette Beispielprojekt mit Bibliothek

Ein Beispielprogramm für die I2C Funktionen der aktuellen Asuro Bibliothek

#include "asuro.h"
#include "i2c.h"


#define Dev8574   0x40      // device address of PCF 8574, see datasheet


int main(void)
{
  unsigned char val;

  Init();                                    // init Asuro
  InitI2C();                                 // init I2C interface
  val = 0;

  SerPrint("I2C Demo\r\n");

  while(1)
  {        
    StartI2C(Dev8574+I2C_WRITE);
    WriteI2C(val);
    StopI2C();
    StatusLED(GREEN);
    val++;
    Msleep(500);                            // wait a 1/2 second
  }
  return 0;
}
}

Anwendungen

Was kann man mit den neu hinzugekommenen Ports anfangen?

  • Ein LCD anschliessen, siehe LCDErweiterung,
  • Einen Deluxe Linienverfolger,
  • Zusätzliche Tasten, LEDs, Sensoren
  • ...

Bezugsquellen

weiterführende Links