I2C Assembler keine Kommunikation zu GY-521(MPU6050)

Gast #5445560
Lesenswert?

Hallo,

Momentan habe ich ein Projekt, welches eine I2C Kommunikation zwischen 
einem Arduino Uno (ATMEGA328P) und einem GY-521 (MPU6050) in der 
Assembler Sprache beinhaltet. Als Basis habe ich folgende ASM Datei:

Beitrag "TWI / I2C einf. MASTER SLAVE Beispiel(Assembler) ATmega8"

genommen und mich jeweiligen Datenblatt informiert. Leider wird nach dem 
Senden von  SLA+W,  kein Ack vom MPU6050 zurück gesendet. Als Pull-up 
Widerstände habe ich zwei 4,7kOhm Widerstände verwendet. Zusätzlich habe 
ich auch 1,5kOhm verwendet, da diese bei der Berechnung laut dem 
Datenblatt des ATMEGA328P verwendet werden sollen.

Die Schaltung ist nach der Basic Schaltung erfolgt. SDA(PC4), SCL(PC5), 
5Volt, GND


Ein Oszi ist erst am Donnerstag verfügbar. Ich hoffe Ihr könnt mir 
weiter helfen. Falls Angaben fehlen, bitte schreiben.

Vielen Dank im Voraus.
Angehängte Dateien:
(Firma: Vescomp) #5445803
Lesenswert?

Fabian schrieb:
> genommen und mich jeweiligen Datenblatt informiert. Leider wird nach dem
> Senden von  SLA+W,  kein Ack vom MPU6050 zurück gesendet. Als Pull-up

 Manoman...
1
; ============================================
2
; S R A M D E F I N I T I O N E N
3
; ============================================
4
.eseg            ;******* DAS IST EEPROM UND KEIN RAM  !!!!!!!!!

 Und weiter...
1
Poti_Vorgabe:  .byte 1  ;*** Hier wird 1 Byte reserviert...
2
GY_Register:   .byte 2  ;*** Hier werden 2 Byte reserviert... [Adresse 0x01]
3
I2C_DataH:     .byte 3  ;*** Hier werden 3 Byte reserviert...
4
I2C_dataL:     .byte 4  ;*** Hier werden 4 Byte reserviert...
5
GY_Bits:       .byte 17 ;*** Und hier 17 Bytes                [Adresse 0x0A]
6
...
7
ACCEL_Z_L:    .byte 16 ;*** Hier werden 16 Bytes reserviert...

Und:
1
;Wake up GY
2
  ldi temp, 0x6b 
3
  STS GY_Register, temp   ;*** Adresse 0x01 ist Register r1  !!!
4
  ldi temp1,  0b00000000
5
  STS GY_Bits, temp       ;*** Adresse 0x0A ist Register r10 !!!
6
  Rcall I2C_MT


 Gib es auf, schreib vorerst etwas funktionierendes ab
 und versuche zu verstehen wie die Sache funktioniert.
#5446389
Lesenswert?

1
;Wake up GY
2
...
3
  ldi temp1,  0b00000000
4
  STS GY_Bits, temp
5
...
6

7
/*;GY Config 
8
;Gyroskop 500°/s
9
...
10
  ldi temp1,  0b00001000
11
  STS GY_Bits, temp
12
...
13

14
;Accel Config AFS_SEL = 1 => 4g
15
...
16
  ldi temp1,  0b00001000
17
  STS GY_Bits, temp
18
...

Ob das das macht, was Du Dir erhoffst?
temp laden und temp1 speichern ist bestimmt nicht ganz so zielführend.

Thomas
Gast #5446540
Lesenswert?

Fabian schrieb:
> Leider wird nach dem Senden von  SLA+W,  kein Ack vom MPU6050
> zurück gesendet.

Antwortet der MPU6050 denn auf der von dir verwendeten Adresse, wenn du 
den Bus mit einem I2C-Scanner absuchst? Falls der I2C-Scanner nichts 
findet, solltest du deinen Aufbau überprüfen.

> Ein Oszi ist erst am Donnerstag verfügbar.

Dann nimm einen kleinen Logikanalysator. Der kann auch gleich 
dekodieren.
Ob 1.5kΩ oder 4.7kΩ sollte bei einem Bus mit zwei Teilnehmern und kurzer 
Leitung egal sein, solange kein Schaltungsfehler vorliegt.
Hast du berücksichtigt, dass bei den GY-521 meist schon 2.2kΩ als 
Pull-Up Widerstände drauf sitzen? Nachmessen!

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren