Forum: Mikrocontroller und Digitale Elektronik I2C Assembler keine Kommunikation zu GY-521(MPU6050)


von Fabian (Gast)


Angehängte Dateien:

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.

von spess53 (Gast)


Lesenswert?

Hi

>lds temp, TWI_BIT_RATE        ; I2C TWBR   Bit RATE Register
>STS TWBR, temp

Macht bei mir mit 16MHz und

>.equ TWI_BIT_RATE      =  8

eine Bitrate von 500.

MfG Spess

von spess53 (Gast)


Lesenswert?

Hi

>eine Bitrate von 500.

Natürlich 500kHz.

MfG Spess

von pcrom (Gast)


Lesenswert?

Twi Debugging ohne scope is fast unmoeglich. Da kann sehr viel falsh 
gehen...

Ich wuerde sowieso das system so einfach wie moeglich machen, fang an 
mit EIN prozessor und ein standard i2c chip sowie der PCF8574 mit 
leds/switches an die inputs.

von Marc V. (Firma: Vescomp) (logarithmus)


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.

von Thomas P. (topla)


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

von Wolfgang (Gast)


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!

von Wolfgang (Gast)


Lesenswert?

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

Wessen Basic Schaltung?
Der MPU6050 läuft mit 3.3V und das ist auch der Pegel vom I2C-Bus.

von Wolfgang (Gast)


Lesenswert?

Fabian schrieb:
> Ein Oszi ist erst am Donnerstag verfügbar.

Und? Was hat es gesagt?

von Karl B. (gustav)


Lesenswert?

Hi,
Zitat:
.eseg
;Controller
Poti_Vorgabe:
byte 1  ; Byte 1 von SRAM als Zwischenspeicher für Potiwert verwenden
Zitat Ende

muss wohl

.dseg ... heißen.

Du hast das EEpromsegment mit .eseg angesprochen.
Wozu?

ciao
gustav

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.