Forum: Mikrocontroller und Digitale Elektronik Wie mehrere Bytes mit dem TWI Slave auslesen?


von Andi (Gast)


Lesenswert?

Einen wunderschönen Samstag Vormittag wünsche ich euch,

hab da gerade noch ein kleines Verständnissproblem beim TWI. Nach 
folgendem Schema von Peter Fleury übertrage ich bisher meine Daten vom 
Master zum Slave:
1
// übertrage Motorgeschwindigkeit
2
i2c_start_wait(Motor_1 + I2C_WRITE); // set device address and write mode
3
i2c_write(Motor_Speed); // write address = 5
4
i2c_write(0x75);
5
i2c_stop(); // set stop conditon = release bus

Wie kann ich diese Daten nun mit meinem Slave auslesen? Hier der Code in 
dem ich auslese:
1
ISR (TWI_vect)  //Wird ausgelöst wenn der Master etwas senden will.
2
//############################################################################
3
{  
4
  switch (TWSR & 0xF8) //TW_STATUS 
5
  {  
6
    //Adresse empfangen
7
    case TW_SR_SLA_ACK:      /*TW_SR_SLA_ACK = SLA+W received, ACK returned.
8
                    Also "MT-Kommando SLA+W" wurde empfangen und 
9
                    es wurde mit Acknowledge geantwortet*/
10
      TWCR |= (1<<TWINT);    /*Löschen des für die TWI Übertragung nötigen
11
                    Interruptflags.*/
12
      return;          //Interrupt verlassen
13
      
14
    //Daten empfangen
15
    case TW_SR_DATA_ACK:    /*TW_SR_DATA_ACK = data received, ACK returned.
16
                    Vom Master gesendete Daten wurden empfangen
17
                    und es wurde mit Acknowledge geantwortet*/
18
19
      Motor_Speed = TWDR;      /*Übertragen der Daten*/
20
21
22
      TWCR |= (1<<TWINT);    /*Löschen des für die TWI Übertragung nötigen
23
                    Interruptflags.*/
24
25
      i2c_timeout = 0;    /*Variable "i2c_timeout" wird auf "0" gesetzt.
26
                    Also zurückgesetzt.*/
27
28
      return;          //Interrupt verlassen

Momentan überschreibt er den zuvor übermittelten Wert? Wie also mehere 
Bytes nacheinander empfangen?

Sorry falls ich mich grad ein bissel dämlich anstelle, aber ich seh da 
grad echt nicht durch.

Gruß Andi
von Bernd (Gast)


Lesenswert?

Ja, hab so etwa das gleiche Problem. Niemand ne Idee?
von Wolfgang (Gast)


Lesenswert?

Andi schrieb:
> Momentan überschreibt er den zuvor übermittelten Wert? Wie also mehere
> Bytes nacheinander empfangen?

Indem du den vorher übermittelten Wert rechtzeitig beiseite schaffst, 
also bevor der nächste Wert ankommt.
von Bernd (Gast)


Lesenswert?

Ok das klingt gut, gibts da irgendeinen Trick?
Hab das ganze schon so versucht leider vergebens:


Variable1 = TWDR;
Variable2 = TWDR;
Variable3 = TWDR;
Variable4 = TWDR;
Variable5 = TWDR;
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.