Hallo Allesammt!
Hatte vor ner Weile mal gepostet bezüglich zusätzlichen AD-Eingängen am ATMega16. Habe jetzt von Maxim den Max127 und den Max128 auf dem Tisch liegen und würde die gerne anschließen. Aufgebaut ist nu alles, aber irgendwie will das mit dem I²C nicht so ganz funzen.
Der IC übermittelt die gemessen Werte mittels zweier Byte nacheinander an den Master, aber mein Bus macht gar nichts, zumindest sagt das das Oszi.
Angeschlossen hab ich alles richtig, SDA und SCL liegen mittels 4,7kOhm an 5V. Sieht jemand in meinem Programm den Fehler? Ist mein erstes I2C- Projekt, bin da noch nicht ganz fit mit.
Besten Dank und Gruß, Martin
Hier mal mein Programm, möchte nur dass mir die übermittelten Daten auf einem LCD ausgegeben werden.
...
Baud 57600
Const Adextw1 = &B01010000 'Schreibadresse
Const Adextr1 = &B01010001 'Leseadresse
Const Adext1chan1 = 11111000 'Control-Byte für AD-Kanal 1
Dim Readvar1h As Bit
Dim Readvar1l As Bit
Initlcd
Do
Cls
I2cstart
I2cwbyte Adextw1
I2cwbyte Adext1chan1
I2cstop
I2cstart
I2cwbyte Adextr1
I2crbyte Readvar1h
I2crbyte Readvar1l
I2cstop
Locate 1 , 1
Lcd "h: "
Lcd Readvar1h
Locate 2 , 1
Lcd "l: "
Lcd Readvar1l
Wait 1
Loop
Hallo,
und evtl. sollte man noch angeben, wo die I2C Pins überhaupt sind.
Irgendwie muss man das noch Initialisieren, nicht gleich mit Start loslegen !
Wenn Du das Hardware-I2C bzw. TWI verwenden willst, gehört oben noch eine Lib angegeben, und dann noch die Bus-Geschwindigkeit setzen.
hier alles zusammen :
Code:$lib "i2c_twi.lbx" ' we do not use software emulated I2C but the TWI Config Scl = Portc.5 ' we need to provide the SCL pin name Config Sda = Portc.4 ' we need to provide the SDA pin name 'Config I2cdelay = 10 ' nur bei SoftI2C I2cinit ' we need to set the pins in the proper state Config Twi = 100000 ' wanted clock frequency, nur wenn die Lib oben eingebunden ist
Danke schonmal soweit Euch Beiden!
Habe die Änderungen übernommen, Code sieht nun wie folgt aus:
Nur leider funzts immer noch nicht. Man kann auf dem Oszi erkennen, dass Sda jeweils auf 0 gezogen wird, aber das wars auch schon. Stimmt das Programm soweit? Auf welchen Wert muss ich eigentlich den Baud-Wert stellen?Code:$regfile = "m16def.dat" $crystal = 16000000 $lib "i2c_twi.lbx" Const Ref = 5 / 1023 Baud 9600 Config Lcdpin = Pin , Db4 = Portc.5 , Db5 = Portc.4 , Db6 = Portc.3 , Db7 = Portc.2 , E = Portc.7 , Rs = Portc.6 Config Lcd = 16 * 2 Config Sda = Portc.1 Config Scl = Portc.0 'Config I2cdelay = 10 Const Adextw1 = &B01010000 'Schreibadresse Const Adextr1 = &B01010001 'Leseadresse Const Adext1chan1 = 11111000 'Control-Byte für AD-Kanal 1 Dim Readvar1h As Byte Dim Readvar1l As Byte Initlcd I2cinit Config Twi = 100000 Do Cls I2cstart I2cwbyte Adextw1 I2cwbyte Adext1chan1 I2cstop I2cstart I2cwbyte Adextr1 I2crbyte Readvar1h I2crbyte Readvar1l I2cstop Locate 1 , 1 Lcd "h: " Lcd Readvar1h Locate 2 , 1 Lcd "l: " Lcd Readvar1l Wait 1 Loop
Fragen über Fragen...
Danke und Gruß, Martin
Hi,
wenn Du per UART nix überträgst, kannst du die Baudangabe weglassen.
Dann denke ich das bei der Konstante zum AD-Kanal die Angabe fehlt, das es sich um eine binäre Darstellung handelt !
Muss man evtl. etwas warten zwischen dem Kanal einstellen und dem Auslesen des Wertes ? So schnell wird der AD-Wandler nicht sein, ausser er wandelt immer wo vor sich hin![]()
Jippie, habs gerade geschafft!
Das Programm war schuld, jetzt funktionierts!
Wenn man lange genug rumprobiert hat funktionierts halt doch meistens!
Nochmals allen Helfern vielen Dank!
Gruß, Martin
Lesezeichen