PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : I2C Programm - I/O Expander Problem



Ringo
24.10.2005, 16:34
Hallo Leute! :roll:

Also mein Problem beginnt damit, dass ich keine freien Ports mehr an meinem Atmega16 habe und deshalb eine Lösung suche.

Bin dann auf sogenannte I/O Expander gestoßen... :-k

Hab jetzt hier einen richtig schönen MAX7300 20 zusätzliche Ports (dürfte erstmal reichen \:D/ ) rumliegen.

Jetzt mein Problem: Wie steuer ich das mit I2C an? Also ich hab die SDA und SCL Leitungen mit jeweils 4.7kOhm an Vcc gehängt. Alles nach Plan angeschlossen. Ein fertiges Atmega8 Modul rausgeholt SDA und SCL miteinander verbunden und versucht das ganze zu proggen.

Ohne Erfolg. :(

Jetzt meine Fragen. Zum test hab ich eine LED mit 1K Widerstand an P12.
Slave Adresse ist AD0 auf GND und AD1 auf GND.

Im Datenblatt abgelesen und schon kam das durcheinander. Man kann jeden Pin als Input oder Output konfigurieren. Hab jetzt alles mögliche ausprobiert und bin bei diesem Code in BASCOM stehen gelieben:



$regfile = "m8def.dat"
$crystal = 8000000
$lib "i2c.lib"

Config Portb = Output
Config Portc = Output
Config Portd = Output
Config I2cdelay = 5 '100KHZ Busfrequenz?
Config Sda = Portc.4 ' Portc.4 ist SDA
Config Scl = Portc.5 'Portc.5 ist SCL
Const Slave = &B10000000 'Slavesadresse laut Datenblatt
I2cinit ' Initialisieren


Do

I2cstart 'start
I2csend Slave , &H0B 'Portadresse
I2csend Slave , &B01 'output
I2csend Slave , 1 '1


I2cstop 'stop


Wait 1

Loop
End

Datenblatt findet ihr http://pdfserv.maxim-ic.com/en/ds/MAX7300.pdf

Also ich bin totaler I2C newbie drum kann ich leider mit den Daten aus dem Datenblatt nicht viel anfangen. Wann muss ich welche Adresse senden?

Danke fürs lesen :wink:

MfG
Ringo (need Help) :-s

Ringo
26.10.2005, 12:37
Hallo!

Also ich hab jetzt wieder alles mögliche ausprobiert wieder ohne Erfolg..

Kann mir niemand mal nen TIP geben?

Ich bräuchte nur den angfangscode! so ne art initialisierung.

Was ist der unterschied zwischen I2Csend und I2Cwbyte?

Ich sende die adresse und dann fängt es schon an das ich nicht genau weiß was ich senden soll... in welcher Reihenfolge..

Bitte, ich komm nicht weiter.

MfG
ringo

PicNick
26.10.2005, 13:34
*murmel* Ich hab mir das datenblatt angesehen, ich sag' dir, was ich denke:
Du mußt erst mal die Pin konfigurieren, normalerweise ist alles Input.
P12 wäre das Konfig-register &H0B, die bits 0 u. 1
(I2Cwbyte ist EIN byte senden, I2Csend gehen auch mehrere)
Konfigurieren:
I2cstart 'start
I2cwbyte Slave
I2cwbyte &H0B 'Port 12 -15 Config (Seite 7)
I2cwbyte &H55 'Port 12 -15 = output
'------------------------------------- mal soll nicht mit 0 kongfigurieren)
I2cstop 'stop

P12 auf "1" :
I2cstart 'start
I2cwbyte Slave
I2cwbyte &H2C 'Port 12 only (Seite 13)
I2cwbyte &H01 'Port 12 auf "1"
I2cstop 'stop


P12 auf "0" :
I2cstart 'start
I2cwbyte Slave
I2cwbyte &H2C 'Port 12 only (Seite 13)
I2cwbyte &H00 'Port 12 auf "1"
I2cstop 'stop

Und jetzt guck mal, ob ich dir einen Schwachsinn erzählt habe

Rage_Empire
26.10.2005, 13:47
würd nen pcf8574 nehmen, ist einfacher zu handhaben.

Ringo
26.10.2005, 16:20
DANKE! PICKNiCK! Du bist mein Held!

Es Funktioniert! \:D/ \:D/ \:D/ \:D/

Seit 2 Tagen bin ich am rummachen! Und du löst das in ein paar Minuten. irgendwie lässt mich das an meiner Intelligenz zweifeln :-s

Egal dein Code, so wie er oben steht funktioniert bis auf eine Kleinigkeit:

Der Chip startet in Shutdown Modus.

Mit
I2cwbyte &H04
I2cwbyte &H01

stellt man in in normal Mode und dann dein code lässt p12 ein/aus schalten!

DANKE!
Jetzt hab ich auch das Prinzip verstanden!



würd nen pcf8574 nehmen, ist einfacher zu handhaben.

Den MAX7300 hab ich geschenkt bekommen und jetzt wo er funst ist das echt geil, 20 neue Ports.. \:D/

MfG
Ringo

PicNick
26.10.2005, 17:51
..Intelligenz zweifeln
kränk' dich nicht, ich hab wahrscheinlich (wie andere) nach all den Jahren schon die richtige Matschbirne für sowas.
Und wenn du's jetzt begriffen hast, wie's läuft, bist du ja auch schon auf dem Weg dazu. :mrgreen:

Ringo
26.10.2005, 18:20
hehehe ja danke..

Hab hier noch nen I2C Eprom rumliegen. Den dürfte ich alleine hinbekommen ^^


MfG
Ringo

robotikfan
22.11.2006, 15:01
weiß jemand wie man eingänge mit dem max7300 abfragen kann?

robotikfan
26.11.2006, 23:01
kann mir wirklich keiner helfen?

kowolfgang
07.01.2007, 15:00
Hallo,

Ich hab auch ein Problem mit einem I²C Portexpander allerdings nicht mit dem MAX7300 sondern mit dem PCA9535D (16bit Portexpander).
Ich kann auf ihn zugreifen und auch auf ihn schreiben nur schalten die Ports nicht auch wenn sie auf Output gesetzt wurden.
Laut Datenblatt muss man erst die Slaveadresse, dann ein Command Byte, und dann die Daten senden.

Register:
0 = Input Port0
1 = Input Port1
2 = Output Port0 (default: &HFF <hat keinen Einfluss auf Port die als Input konfiguriert sind)
3 = Output Port1 (default: &HFF <hat keinen Einfluss auf Port die als Input konfiguriert sind)
4 = Polarity Inversion Port0 (default: &H00 < keine invertierung)
5 = Polarity Inversion Port1 (default: &H00 < keine invertierung)
6 = Configuration Port0 (default: &HFF = Alles als input)
7 = Configuration Port1 (default: &HFF = Alles als input)

wenn man Register 7 verwendet und 2 Bytes mit daten schreibt dann wird das 2te Datenbyte ins Register 6 geschrieben.
Demnach müsste man um alle ports als Output zu verwenden die Register 6 und 7 auf &H00 setzen, das geht aber nicht warum auch immer.
Hier mal der Code:


$regfile = "m8def.dat"
$crystal = 8000000
$baud = 9600

Config Scl = Portc.5
Config Sda = Portc.4

Print "TEST"
Print

Dim Data0 As Byte
Dim Data1 As Byte
Dim Command As Byte
Dim Slaveaddress As Byte

Slaveaddress = 78

Do

Input "Data0: " , Data0
Input "Data1: " , Data1
Input "Commandbyte: " , Command
Print "sende..."

I2cstart
I2cwbyte Slaveaddress
If Err = 1 Then
I2cstop
Print "....Error1!"
Else
I2cwbyte Command
I2cwbyte Data0
I2cwbyte Data1

If Err = 1 Then
I2cstop
Print "....Error2!"
Else
I2cstop
Print "... erfolgreich!"
End If
End If

Wait 2

Loop
End


Wäre Froh wenn ihr mit helfen könntet bin schon seit 2 tagen am verzweifeln

Hier noch das Datenblatt vom PCA9535: Klick (http://www.datasheetarchive.com/search.php?q=PCA9535&sType=part&ExactDS=Starts)

Gruß Wolfgang