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
Hi
>eine Bitrate von 500.
Natürlich 500kHz.
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.
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.