PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [ERLEDIGT] VMLAP 3.15: Simulation eines I2C Master ...



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.

Ritchie
08.12.2011, 19:24
Hallo Zusammen,

ich habe mich nochmals dran gesetzt und jetzt eine Lösung für das Problem:

Hier die Definition in der Projektdatei:


;------------------------------------------------------------
; I2 monitor cells SDA SCL ( Pin Layout of a ATmega 32 !)
;
; Note: use 0x10 in the control-panel as address, if you configure 0x20 in your program
;
Xone I2C(100K 29) pc1 pc0 ; 100KHz master clock, slave addr = 29 (decimal)
Rsda VDD PC1 10K ; Pullup resistors, also necessary in VMLAB!
Rscl VDD PC0 10K ; for I2C


Wichtiger Hinweis!
Bei einem Mega32 ist die I2C Schnittstelle an den Pins PC0 + PC1, diese müssen evtl. angepasst werden,
wenn Ihr einen anderen Typ verwendet.

Im Controlpanel muss dann aber die Adresse des Slave, welche eine Adresse 0x20 hat, mit 0x10 eingegeben werden. Der Shift wird hier noch ausgeführt.

Das ganze hat bei mir sogar mit der Interruptroutine geklappt. Man sieht im Kontrollfenster die Zeichen, welche gesendet werden (Eingabe neben der Adresse).

Gruss R.