Bitte um Hilfe oder Aufklärung.
Für eine I2C-Kommunikation teste ich meinen Code auf saubere Funktion und exakte Positionierung der verschiedenen Daten. Derzeit zwei Platinen (RNContrl - mega1284/20MHz, RNMotoContrl - m328/20MHz, I2C 100 kHz).
Ein Test besteht darin, drei Ausschnitte des übermittelten Feldes vom Slave per UART wiederholt auszugeben. Der letzte Ausschnitt sollen die letzten zehn Bytes des I2C-Puffers sein. Leider macht mein Feldpointer nicht das was ich will: die Berechnung (egal ob uint8_t oder ~16~) in der for..Schleife ist fehlerhaft.
I2C-Definition (Ausschnitt) (danke uwegw für den Slave-Code) :
... und die Ausgaberoutine im Slave (Ausschnitt) :Code://%%%%%%%% von Benutzer konfigurierbare Einstellungen %%%%%%%% /**@brief Groesse des Buffers in Byte (2..254) */ #define i2c_buffer_size 127 // I2C_REG_ANZAHL 254 Hier kann eingestellt werden // wieviele Register ausgegeben werden //##### ÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎ #####
Dabei wird für die letzte Ausgabe immer am Ende des Buffers begonnen, nicht wie ich möchte, zehn Felder davor.Code:// - - - - - - - - - - - - - - - uart_puts("\t\t\t"); // Einrücken for (uint8_t i=10; i<20; i++) { uart_puti(i2cdata[i]);uart_puts(" "); //uart_puts("\r\n"); } // === Ende for (uint8_t i=0; i<i2c_buffer_size... uart_puts("\r\n"); // Neue Zeile und Leerzeile _delay_ms( 1000); // - - - - - - - - - - - - - - - uart_puts("\t\t\t"); // Einrücken for (uint8_t i=(i2c_buffer_size-10); i<i2c_buffer_size; i++) { uart_puti(i2cdata[i]);uart_puts(" "); //uart_puts("\r\n"); } // === Ende for (uint8_t i=0; i<i2c_buffer_size... uart_puts("\r\n"); // Neue Zeile und Leerzeile _delay_ms( 1000); // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
... und das sollte eben nicht stimmen. Nur - wieso? Wo ist der Fehler?Code:C501 R5MoCo_x01-x10 m328/20MHz 26Sep2012 2335 Aufbau R5MoCo, I2C-Slave ist Adresse : 130 I2C-WRITE = 0 Test I2C I2C-Test - I2C-Slave R5MoCo_i2c10.c Teste I2C-Slave mit Adresse : 130 Buffersize : 252 Nr. 1 i2cdata: 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 252 253 254 255 0 1 2 3 4 5 Nr. 2 i2cdata: 10 99 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 252 253 254 255 0 1 2 3 4 5 Nr. 3 i2cdata: 10 99 12 13 14 15 16 17 18 19 <0> C501 R5MoCo_x01-x10 m328/20MHz 26Sep2012 2335 Aufbau R5MoCo, I2C-Slave ist Adresse : 130 I2C-WRITE = 0 Test I2C I2C-Test - I2C-Slave R5MoCo_i2c10.c Teste I2C-Slave mit Adresse : 130 Buffersize : 252 Nr. 1 i2cdata: 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 252 253 254 255 0 1 2 3 4 5 Nr. 2 i2cdata: 10 99 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 252 253 254 255 0 1 2 3 4 5 Nr. 3 i2cdata: 10 99 12 13 14 15 16 17 18 19 <0> C501 R5MoCo_x01-x10 m328/20MHz 26Sep2012 2335 Aufbau R5MoCo, I2C-Slave ist Adresse : 130 I2C-WRITE = 0 Test I2C I2C-Test - I2C-Slave R5MoCo_i2c10.c Teste I2C-Slave mit Adresse : 130 Buffersize : 127 Nr. 1 i2cdata: 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 127 128 129 130 131 132 133 134 135 136 Nr. 2 i2cdata: 10 99 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 127 128 129 130 131 132 133 134 135 136 Nr. 3 i2cdata: 10 99 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 127 128 129 130 131 132 133 134 135 136 Nr. 4 i2cdata: 10 99 12 13 14 15 16 17 18 19 <0> C501 R5MoCo_x01-x10 m328/20MHz 26Sep2012 2335 Aufbau R5MoCo, I2C-Slave ist Adresse : 130 I2C-WRITE = 0 Test I2C I2C-Test - I2C-Slave R5MoCo_i2c10.c Teste I2C-Slave mit Adresse : 130 Buffersize : 99 Nr. 1 i2cdata: 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 99 100 101 102 103 104 105 106 107 108 Nr. 2 i2cdata: 10 99 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 <0> C501 R5MoCo_x01-x10 m328/20MHz 26Sep2012 2335 Aufbau R5MoCo, I2C-Slave ist Adresse : 130 I2C-WRITE = 0 Test I2C I2C-Test - I2C-Slave R5MoCo_i2c10.c Teste I2C-Slave mit Adresse : 130 Buffersize : 99 Nr. 1 i2cdata: 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 99 100 101 102 103 104 105 106 107 108 Nr. 2 i2cdata: 10 99 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 99 100 101 102 103 104 105 106 107 108
Problem: die Berechnung
i2c_buffer_size-10
macht offenbar nicht das, was sie soll. Anm.: ich habe die for..Laufvariable mit 8bit und mit 16 getestet.
Danke im Voraus für Eure Hilfe und Aufmerksamkeit.







Zitieren

Lesezeichen