Aber da wir schon dabei sind ... brauche auch Hilfe damit![]()
Versuche mit dem ATmega64 zu kommunizieren.
Er als Master, PC als Slave.
Master muß kennen:
// General TWI Master staus codes
#define TWI_START 0x08 // START has been transmitted
#define TWI_REP_START 0x10 // Repeated START has been transmitted
#define TWI_ARB_LOST 0x38 // Arbitration lost
// TWI Master Transmitter staus codes
#define TWI_MTX_ADR_ACK 0x18 // SLA+W has been tramsmitted and ACK received
#define TWI_MTX_ADR_NACK 0x20 // SLA+W has been tramsmitted and NACK received
#define TWI_MTX_DATA_ACK 0x28 // Data byte has been tramsmitted and ACK received
#define TWI_MTX_DATA_NACK 0x30 // Data byte has been tramsmitted and NACK received
// TWI Master Receiver staus codes
#define TWI_MRX_ADR_ACK 0x40 // SLA+R has been tramsmitted and ACK received
#define TWI_MRX_ADR_NACK 0x48 // SLA+R has been tramsmitted and NACK received
#define TWI_MRX_DATA_ACK 0x50 // Data byte has been received and ACK tramsmitted
#define TWI_MRX_DATA_NACK 0x58 // Data byte has been received and NACK tramsmitted
/////////////////////// TWI ////////////////////////////////////
// Setze Baudrate ??? Baud bei 8 MHz
// Berechnet sich aus: Baudrate = CLK / ( 16+2*(TWBR)*4^(TWPS) )
TWBR = 145; // Bit Rate Register
// Control Register
TWCR |= (1<<TWEN); // Aktiviere TWI
TWCR |= (1<<TWIE); // aktiviere den TWI-Interrupt
TWCR |= (1<<TWINT);
// TWI Status (Bit 7..3) und Prescaler (Bit(1..0)
TWSR = 0x02; // TWPS = 0
und dann aus dem handbuch:
TWCR = (1<<TWINT) | (1<<TWSTA) | (1<<TWEN); // Send START Cond
while ( !(TWCR&(1<<TWINT) ) ); // Wait TWINT Flag set
// Check Bus Status : 0x08 // START has been transmitted
if ( (TWSR & 0xF!= TWI_START )
TWI_ERROR();
TWDR = ( (113 << 1) & 0xFE ); // SLA_W // Load Slave Adress
TWCR = (1<<TWINT) | (1<<TWEN); // Transmit Adress
while ( !(TWCR&(1<<TWINT) ) ); // Wait TWINT Flag set
// Check Bus Status : 0x18 // SLA+W has been tramsmitted and ACK received
// 0x20 // SLA+W has been tramsmitted and NACK
received
if ( (TWSR & 0xF!= TWI_MTX_ADR_ACK )
TWI_ERROR();
Bekomme an diese Stelle keine Antwort von der PC Applikation, d.h. der TWSR status ist 0x20 !!!!
irgend welche ideen ?
danke im voraus
Lesezeichen