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.
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
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.
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.
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!
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.
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