Hallo,
Zuerst erst mal ich habe noch nicht viel Erfahrung mit VHDL, aber ich
dachte mir, ich spiel mich mal mit dem G-Sensor der das DE0-Nano board
drauf hat. Ich will die Kommunikation über I2C machen. Und habe mal die
Daten die geschickt werden auf die LEDs gelegt.
Doch mein Problem ist, dass ich keine Daten bekomme. die LEDs sind immer
dunkel.
Ich habe mein Programm und das I2C Modul angehängt.
Vielleicht kann mir da jemand Helfen.
Danke im vorraus :)
Michael schrieb:> Doch mein Problem ist, dass ich keine Daten bekomme.
Hast du ein Oszilloskop oder enen Logicanalyzer?
> Ich habe mein Programm und das I2C Modul angehängt.
Funktioniert das Zeug? Hast du das mal simuliert? Die "Testbench" hier
ist ja relativ einfach: mal einen Takt an GSENSOR CLK sowie jeweils 'H'
an I2C_SCLK und I2C_SDAT anlegen und schauen, was passiert...
> das I2C Modul angehängt.
Das Modul ist Käse: unnötigerweise 2 Takte.
Und zudem sowas:
1
PROCESS(data_clk,reset_n)
2
BEGIN
3
IF(reset_n='0')THEN--reset asserted
4
----
5
ELSIF(data_clk'EVENTANDdata_clk='1')THEN
6
----
7
ENDIF;
8
9
IF(reset_n='0')THEN--reset asserted
10
----
11
ELSIF(data_clk'EVENTANDdata_clk='0')THEN
12
----
13
ENDIF;
14
ENDPROCESS;
Steigende und fallende Flanke in einen Prozess reingematscht.
Unübersichtlicher gehts kaum noch.
> Ich habe mein Programm
Es ist kein Programm, denn es heißt nicht "VHPL"...
> I2C_SCLK ... I2C_SDAT
Beim I2C heißen diese Signale immer SDA und SCL.
> stage
"Stage" bedeutet "Bühne, Theater..."
Du meinst vermutlich "State" was u.a. "Zustand" heißt.
Wo hast du das I2C Module her, selbstgemacht?
Ich habe es nicht ins letzte Detail angeschaut, aber ich sehe nicht wo
die I2C-Startcondition erzeugt wird.
Danke für die schnelle Antworten:
Nein, das I2C Module ist nicht bin mir, ich habs von
http://www.eewiki.net/display/LOGIC/I2C+Master+(VHDL)
herunter geladen.
Mit keine Daten bekommen hab ich gemeint, dass die LEDs alle nichts
anzeigen
Ich hab das I2C Module nicht direkt getestet, aber wenn ich das Register
0x00 auswähle sendet er mir die Device ID ("11100101") zurück. Also
sendet er im prinzip. Nur halt nicht die Daten für X,Y und Z.
I2C_SCLK verbinde ich zu scl und I2C_SDAT zu sda, dann ist doch die
Namensgebung egal, oder?
hoppla, stage war ein tippfehler, der sich dann durchzog :)
PS: Weil ich das zum Posten vergessen hab: der Accelerometer ist ein
ADXL345
Michael schrieb:> I2C_SCLK verbinde ich zu scl und I2C_SDAT zu sda, dann ist doch die> Namensgebung egal, oder?
Im Prinzip ja, aber es ist unnötig, die "quasigenormten" Signale
umzubenennen...
Solltest du statt von Adresse 0x1D nicht eher an der Adresse 0x32 und
folgende zu lesen versuchen? Siehe Datenblatt Tabelle 19.
Mikse schrieb:> Hi,>> mann muss noch das DATA-Format setzen Datenblatt seite 26 Register 31
Der Resetwert ist allerdings für den Anfang brauchbar.
In POWER_CTL (Register 0x2D):
Measure Bit
A setting of 0 in the measure bit places the part into standby mode, and
a setting of 1 places the part into measurement mode. The ADXL345 powers
up in standby mode with minimum power consumption.
Ausserdem:
It is recommended that a multiple-byte read of all registers be
performed to prevent a change in data between reads of sequential
registers.
Es ist schwer zu sehen was der I2C Core kann, aber ich vermute stark
dass damit mit jedem Zugriff nur ein Byte gelesen werden kann.
Jede Zeile zu kommentieren ist kein Ersatz für eine gute Dokumentation,
weniger ist oft mehr, denn zuviel verstellt den Blick aufs Wesentliche.
Hey,
Danke für die ganzen antworten, wir kommen der Sache näher :)
Ich hab jetzt den Code abgeändert und POWER_CTL und DATA_FORMAT
berücksichtigt.
Wenn ich nun 0x32 bzw 0x33 abfrage erhalte ich "1000011".
Hier ist der neue Ablauf: