Wie mehrere Bytes mit dem TWI Slave auslesen?

Gast #2512542
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
Gast
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.
Gast
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;

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.