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:
// 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:
// 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
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
Filename: | Bild1Analy_I2C.jpg |
Filesize: | 127.11 KB |
Title: | I2C Bild für Versuch 1 |
Download counter: | 92 |