PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Kapazitiver Sensor AD7746 mit Atmega8 auslesen



ankage
24.02.2009, 11:47
Hallo!
Ich versuche verzweifelt mit einem Atmega8 einen AD7746 auszulesen.
Ich richte mich nach dem Datenblatt und versuche die Register 1,2 und 3 auszulesen bekomme aber nur Datensalat auf dem LCD angezeigt.
Ich weiß einfach nicht mehr weiter.

Vielleicht kann mir jemand helfen.

Andun
24.02.2009, 12:40
Also meine Glaskugel sagt mir das an Zeile 25 in deinem Programmcode ein Fehler vorliegt ...

---

Sprich: Du musst schon ein paar Details los werden, damit dir hier jemand helfen kann.

ankage
24.02.2009, 13:04
Hier mein Code:

$regfile = "M8def.dat"
$crystal = 8000000
$hwstack = 32
$swstack = 10
$framesize = 40
Config Lcdpin = Pin , Db4 = Portb.2 , Db5 = Portb.3 , Db6 = Portb.4 , Db7 = Portb.5 , E = Portb.1 , Rs = Portb.0
Config Lcd = 16 * 3 , Chipset = Dogm163v5
Config Lcdbus = 4
Cls
Config Sda = Portc.4
Config Scl = Portc.5
Const Ad7746w = &H90
Const Ad7746r = &H91
Dim Highb As Byte , Midb As Byte , Lowb As Byte
Do
I2cstart
I2cwbyte Ad7746w
I2cwbyte &H1
I2cstart
I2cwbyte Ad7746r

I2crbyte Highb , Ack
I2crbyte Midb , Ack
I2crbyte Lowb , Nack

I2cstop

Locate 1 , 2
Lcd Highb ; " " ; Midb ; " " ; Lowb

Waitms 100
Loop
End

ankage
03.03.2009, 09:41
Kann mir keiner helfen ??????

m@rkus33
03.03.2009, 12:08
Deine I2C Leseroutine sieht etwas komisch aus. Was ist "I2Cwbyte &H1" ?

Versuchs doch mal so:

Dim Highb as Byte
Dim Midb as Byte
Dim Lowb as Byte
Dim Wert as Word at Highb Overlay

i2cstart
i2cwbyte &H91
i2crbyte Highb, Ack
i2crbyte Midb, Ack
i2crbyte Lowb, Nack
i2cstop

Lcd "Wert: " , Wert

ankage
03.03.2009, 12:50
Hallo m@rkus33,
vielen Dank für Deine Antwort.
Funktioniert aber leider auch nicht.

m@rkus33
03.03.2009, 13:15
Hast Du die i2c Libary?

$lib "i2c_twi.lbx"

und konfigurier mal die I2c so:

Config Scl = Portc.x 'den Du hast
Config Sda = Portc.x 'den Du hast
Config Twi = 100000
Twbr = 12 'bit rate register
Twsr = 0
I2cinit

Muss gehen, geht bei mir auch so.

Gruß
Markus

ankage
03.03.2009, 13:22
Habe auch das versucht.
Bekomme zwar auf dem LCD einen Wert angezeigt,
dieser ändert sich aber nicht bei Berühren des Sensors.


Gruß
Andreas

m@rkus33
03.03.2009, 13:44
Es ist ein wenig schwierig aus den dürftigen Info´s den Fehler zu finden. Stell mal den ganzen Code ein. Ich gehe mal davon aus, das der I2C Bus Hardwareseitig richtig aufgebaut ist.

Die I2c Libary hast Du? Ich musste diese damals von der MCS Seite downloaden und "kaufen".



Gruß
Markus

ankage
03.03.2009, 13:48
Code ist nicht mehr als weiter oben.
Die i2c-Library habe ich und verkabelt ist auch alles richtig.

Gruß

m@rkus33
03.03.2009, 14:21
Was wird denn jetzt genau angezeigt?

ankage
04.03.2009, 05:38
Die Anzeige lautet 37265....

m@rkus33
04.03.2009, 15:27
also funktioniert ja scheinbar der I2C, nur weis ich jetzt immer noch nicht wie der Code GENAU aussieht. Poste doch bitte mal Deinen ganzen Code, mit jedem Komma und Punkt von der ersten bis zur letzten Zeile. So sieht man ja nix und Glaskugel habe ich noch keine.

ankage
05.03.2009, 05:42
So. Hier jetzt der ganze Code....

$regfile = "M8def.dat"
$crystal = 8000000
$hwstack = 32
$swstack = 10
$framesize = 40
$lib "i2c_twi.lbx"

Config Lcdpin = Pin , Db4 = Portb.2 , Db5 = Portb.3 , Db6 = Portb.4 , Db7 = Portb.5 , E = Portb.1 , Rs = Portb.0
Config Lcd = 16 * 3 , Chipset = Dogm163v5
Config Lcdbus = 4
Cls

Config Sda = Portc.4
Config Scl = Portc.5
Config Twi = 100000
Twbr = 12
I2cinit

Const Ad7746w = &H90
Const Ad7746r = &H91

Dim Highb As Byte , Midb As Byte , Lowb As Byte , Wert As Word At Highb Overlay
Dim I As Byte

Do
I2cstart
I2cwbyte Ad7746w
I2cwbyte 1
I2cwbyte Ad7746r
I2crbyte Highb , Ack
I2crbyte Midb , Ack
I2crbyte Lowb , Nack
I2cstop

Locate 1 , 2
Lcd "Wert: " ; Wert
Locate 2 , 1
Lcd Highb ; " " ; Midb ; " " ; Lowb
Locate 3 , 1
Lcd I

Waitms 500
Loop

End

m@rkus33
06.03.2009, 19:26
hmmm.... sieht soweit ok aus, würde aber zwischen "i2cwbyte 1" und dem senden Readadress "i2cwbyte Ad7746r" noch einen "i2cstart" setzen.

Ansonsten kann ich mir nur noch vorstellen, das die Initialisierung vom Sensor nicht richtig ist und er einen andere Inizialisierung will.