-
I2C Einstieg
Hallo Leute,
ich würde gerne mal in die I2C Technik mit Bascom einsteigen.
Da ich aber Neuling bin, was dieses Thema angeht, habe ich mal eine Frage : Wie ist das mit der Adresseneinstellung/ wie finde ich heraus, welche Adresse ein IC hat ?? Wie stelle ich sie in Bascom ein ??
Dann noch eine Frage : Mit welchem Baustein sollte ich anfangen und üben (welcher ist einfacher anzusprechen) ?? Zur Auswahl stehen : LM75, PCF8574 und ST 24C16 BN6 ( 24C16)
Ich hoffe ihr könnt mir bei dem heißen Wetter helfen und seid nicht alle im Freibad...
Der Einsteiger
-
Die Adresse, die du brauchst steht im Datenblatt des jeweiligen ICs. Oft gibt es auch eine Hardwaremäßige Einstellmöglichkeit der Adresse (der PCF8574 ist so einer). Die Adresse ist im Normalfall 8Bit lang (es gibt glaube ich auch noch 10Bit). Das niedrigste Bit ist das R/W Bit, das entscheidet ob man ein IC beschreiben oder lesen will. Wie das in Bascom geht weiß ich jedoch nicht, da ich in C programmiere. Welches IC du nimmst ist eigenlich egal. Häufig wird der PCF8574, LM75, SAA1064,... verwendet. MfG Hannes
-
Hey,
eine Adresse in Bascom wird einfach als Konstante definiert und dann bei bedarf übertragen.
Zum Einstieg ist ein PCF8574 die leichtere Wahl, da du dort keine Register etc. einstellen musst, sondern nur das Datenbyte für die IOs....so bekommt man schon mal etwas "Feeling" für den I2C. Als nächstes würde ich dann ein EEPROM nehmen (24C....) und danach den LM75. So steigerst du die "Komplexität" Stück für Stück :)
Schau mal hier:
http://kampis-elektroecke.de/?page_id=421
Dort habe ich ein fertiges Programm für den I2C und den PCF8574 hochgeladen.
Da siehst du den Grundlegenden Aufbau einer I2C Kommunikation und wie du erkennen kannst habe ich einmal die Lese und einmal die Schreibadresse als Konstante definiert (geht auch einfacher, indem du einfach die Grundadresse als Konstant annimmst und dann das RW Bit bei Bedarf setzt oder nicht).
Anschließend wird ein Datenbyte übertragen.
-
Hallo und danke ihr beiden...
Das hat mir schon mal geholfen. :)
Doch noch eine Frage zur Hardware: Wie soll ich den PCF anschließen ?? Damit meine ich die A0 - A2 (an GND oder 5V ) und die Ein/Ausgänge P0 - P7 ( benötig Pullup oder down oder gar nichts ) ??
-
Hey,
die Pins A0-A2 kannst du unbeschaltet lassen. Die brauchst du nur wenn du an einem Bus mehr als einen PCF8574 hast (damit kannst du einzelnen Bausteine anderen Adressen zuweisen).
Die Ausgänge vom PCF8574 sind Open-Collector, sprich die schalten nach GND. Wenn du eine LED anschließen willst einfach Vcc->Widerstand->LED->Pin vom PCF
-
Die Adresspins würde auf definierte Pegel bringen (GND oder 5V). So kannst du ein Fehlverhalten von Anfang an ausschließen. Ich würde immer die kleinste mögliche Adresse wählen, wenn du mehrere verwendest brauchst du nur die Adresse erhöhen. MfG Hannes
-
Hallo Einsteiger,
eine sehr gute Beschreibung der Hardware mit Schaltplan findest Du hier:
http://www.horter.de/i2c/i2c-ausgabe/ausgabe_2a.html
Gruß Christian
-
Also Leute, danke für eure Antworten.
Doch es will noch nicht gehen... :(
Hie der Code :
Code:
$regfile = "m32def.dat"
$crystal = 16000000
$hwstack = 200
$swstack = 200
$framesize = 400
'TWI konfigurieren
Config Sda = Portc.1
Config Scl = Portc.0
Config Twi = 100000 'TWI Frequenz
'Adresse des PCF
Const Pcf8574w = &H40
Const Pcf8574r = &H41
Dim Bitmuster As Byte
Bitmuster = 1
'I²C initialisieren
I2cinit
Do
I2cstart 'TWI Startkondition
I2cwbyte Pcf8574w
I2cwbyte Bitmuster
I2cstop
Wait 1
I2cstart 'TWI Startkondition
I2cwbyte Pcf8574w
I2cwbyte 0
I2cstop
Wait 1
Loop
End
Zu A0-2 hab ich es so gemacht wie empfohlen: kleinste Adresse -> daraus folgere ich A0-2 auf GND ??
eine LED an P0 angeschlossen. Müsste die dann nicht leuchten ?? Oder habe ich mal wieder einen Denkfehler ??
Ich hoffe ihr könnt mir helfen ...
-
Welchen Typ hast du genau? Es gibt den PCF8574 und den PCF8574A. Das hier auf Seite 9.
Die Adresse ist einmal Hex 40 (bzw 41) und einmal Hex 70 (bzw 71).
MfG Hannes
-
Ich habe den PCF 8574 P von Reichelt.
Muss ich INT irgendwie verbinden ??