Ritchie
11.11.2011, 18:34
Hallo Zusammen,
ich versuche derzeit die I2C Simulation von VMLap ans rennen zu bekommen und habe da wohl ein Problem.
Ich habe im Control-Panel die I2C Bus Simulation via:
;------------------------------------------------------------
; I2 monitor cells SDA SCL
;
;Xone I2C(100K 29) pc4 pc5 ; 100KHz master clock, slave addr = 29 (decimal)
Xone I2C( 50K 30) pc4 pc5 ; 50Khz master clock, slave addr = 30 (decimal)
Rsda VDD PC4 10K ; Pullup resistors, also necessary in VMLAB!
Rscl VDD PC5 10K ; for I2C
im Projektfile aktiviert. Nur wenn ich einen Break-Point im Quellcode setze,
scheinen keine Daten im Slave angekommen zu sein. Es kann natürlich auf der Slave Code falsch sein.
daher:
/************************************************** *****/
uint8_t TWIS_ResonseRequired (uint8_t *TWI_ResonseType)
{
*TWI_ResonseType = TWSR;
return TWCR & (1<<TWINT);
}
************************************************** *****/
uint8_t TWIS_Init (uint8_t Address, uint32_t Bitrate)
{
/*
** Set the TWI bitrate
** If TWBR is less 11, then error
*/
TWBR = ((F_CPU/Bitrate)-16)/2;
if (TWBR < 11) return FALSE;
/*
** Set the TWI slave address
*/
TWAR = (Address << 1);
/*
** Activate TWI interface
*/
TWCR = (1<<TWEN)|(1<<TWEA);
return TRUE;
}
//
main()
{
...
TWIS_Init (0x15, 50000); // Set as Slave with Address 0x15 using 50kBus
...
...
/*
** Check whether something is to do for the TWI slave interface
*/
if (TWIS_ResonseRequired (&TWIS_ResonseType))
{
TWI_Handler( TWIS_ResonseType ); <---- hier kommt nie das Programm an.
}
}
Hat das jemand schon mal gemacht ?
Oder ist mein Slave Code fehlerhaft ?
Das beigefügte Bild zeigt die Daten der TWI Schnittstelle ?
Ich geben immer die Adresse 0x15 ein (siehe Bild des Control Panel).
Edit:
siehe folgende Antwort
Viele Grüße
R.
ich versuche derzeit die I2C Simulation von VMLap ans rennen zu bekommen und habe da wohl ein Problem.
Ich habe im Control-Panel die I2C Bus Simulation via:
;------------------------------------------------------------
; I2 monitor cells SDA SCL
;
;Xone I2C(100K 29) pc4 pc5 ; 100KHz master clock, slave addr = 29 (decimal)
Xone I2C( 50K 30) pc4 pc5 ; 50Khz master clock, slave addr = 30 (decimal)
Rsda VDD PC4 10K ; Pullup resistors, also necessary in VMLAB!
Rscl VDD PC5 10K ; for I2C
im Projektfile aktiviert. Nur wenn ich einen Break-Point im Quellcode setze,
scheinen keine Daten im Slave angekommen zu sein. Es kann natürlich auf der Slave Code falsch sein.
daher:
/************************************************** *****/
uint8_t TWIS_ResonseRequired (uint8_t *TWI_ResonseType)
{
*TWI_ResonseType = TWSR;
return TWCR & (1<<TWINT);
}
************************************************** *****/
uint8_t TWIS_Init (uint8_t Address, uint32_t Bitrate)
{
/*
** Set the TWI bitrate
** If TWBR is less 11, then error
*/
TWBR = ((F_CPU/Bitrate)-16)/2;
if (TWBR < 11) return FALSE;
/*
** Set the TWI slave address
*/
TWAR = (Address << 1);
/*
** Activate TWI interface
*/
TWCR = (1<<TWEN)|(1<<TWEA);
return TRUE;
}
//
main()
{
...
TWIS_Init (0x15, 50000); // Set as Slave with Address 0x15 using 50kBus
...
...
/*
** Check whether something is to do for the TWI slave interface
*/
if (TWIS_ResonseRequired (&TWIS_ResonseType))
{
TWI_Handler( TWIS_ResonseType ); <---- hier kommt nie das Programm an.
}
}
Hat das jemand schon mal gemacht ?
Oder ist mein Slave Code fehlerhaft ?
Das beigefügte Bild zeigt die Daten der TWI Schnittstelle ?
Ich geben immer die Adresse 0x15 ein (siehe Bild des Control Panel).
Edit:
siehe folgende Antwort
Viele Grüße
R.