I2C TWIinp lesen eines Arrays

pvs-deck
PowerUser
Avatar
Gender:
Age: 53
Homepage: pvs-deck.de
Posts: 1341
Registered: 02 / 2009
Subject:

I2C TWIinp lesen eines Arrays

 · 
Posted: 03.02.2013 - 01:22  ·  #1
Hallo Leute ich habe da mal eine Frage,
ich habe auf einem Board von mir 2 I2c Systeme, der eine arbeitet mit den Soft-I2C-Treiber von AVRco ohne Probleme.

Der 2. arbeitet mit dem TWI-Treiber, ich habe da ein komisches Verhalten (oder ich habe einen Denkfehler)

1. Versuch:
Code

// Error Check
procedure ErrorCheck;
var
 rdBuffer : ARRAY [0..30] of Byte;
 xRead    : integer;
 
begin
 if TWIstat( LED_CAT_IC1 ) then
 TWIout(LED_CAT_IC1, 00); // Setze Lese Adresse
  TWIinp(LED_CAT_IC1, rdBuffer); // Lese Array ein..

  DebugOut('---------------------------------------'); // Testausgabe
    for xRead:= 0 to 30 do
      DebugOut( 'Adr: 0x'+IntToHex(xRead)+'=' +IntToBin( word(rdBuffer[xRead])));
    endfor;
  DebugOut('---------------------------------------');
 endif; //Ende Baustein vorhanden
end; // Ende Procedure


Dabei liest er nur 0x0 ein. (Siehe Bild1)

Im Packet 1 sieht man den TwiStat, das Packet 2 ist der TWIout um die Adresse zu setzen.
ABER im Paket 3 liest er anstelle von 30 Bytes immer nur 27 ?? Sollten das nicht dann 30 sein?

Das er immer nur 0x00 liest könnte damit zusammen hängen, das der I2C-Chip kein Autoincr. macht, bzw. das muss/kann ich aktivieren.

Aber er müsste doch 30 mal abfragen oder?

2. Versuch:
Code

// Error Check
procedure ErrorCheck;
var
 rdBuffer : Byte;
 xRead    : integer;
 
begin
 if TWIstat( LED_CAT_IC1 ) then
  DebugOut('---------------------------------------'); // Testausgabe
    for xRead:= 0 to 30 do
     TWIout(LED_CAT_IC1, xRead); // Setze Lese Adresse
      TWIinp(LED_CAT_IC1, rdBuffer);
       DebugOut( 'Adr: 0x'+IntToHex(xRead)+'=' +IntToBin( word(rdbuffer)));
endfor;

  DebugOut('---------------------------------------');
 endif; //Ende Baustein vorhanden
end; // Ende Procedure



Damit geht es ohne Probleme, ich würde aber gerne mit dem Autoincr. arbeiten, ich denke da könnte ein kleiner Bug drinnen sein. Compiler Version ist 5.04.23

Gruss
Thorsten
Attachments
I2C Bild für Versuch 1
Filename: Bild1Analy_I2C.jpg
Filesize: 127.11 KB
Title: I2C Bild für Versuch 1
Download counter: 92
Harald_K
 
Avatar
 
Subject:

Re: I2C TWIinp lesen eines Arrays

 · 
Posted: 03.02.2013 - 11:17  ·  #2
Hallo
Schau doch einfach mal ins Assemblerlisting, ob der Compiler beim Aufruf von TWIInp im ersten Fall die Byteanzahl des Arrays in das du einlesen willst mit übergibt .... übrigens müßte er ja auch bei der Ausgabe für die integer-Adresse 2 Bytes senden, sendet aber nur einmal 0 ... vielleicht kann der TWI-Treiber nur Bytes? (hab selber damit noch nicht gearbeitet, daher die Doku dazu noch nicht durchgelesen, sorry)

warum beim 2ten Mal nur 27 statt 31 (0..30 sind 31 Lesevorgänge) erfolgen seh ich allerdings nun auch nicht ...
Selected quotes for multi-quoting:   0

Registered users in this topic

Currently no registered users in this section

The statistic shows who was online during the last 5 minutes. Updated every 90 seconds.
MySQL Queries: 16 · Cache Hits: 15   51   66 · Page-Gen-Time: 0.027908s · Memory Usage: 2 MB · GZIP: on · Viewport: SMXL-HiDPI