- 3D-Druck Einstieg und Tipps         
Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 19 von 19

Thema: I²C - Stop Bestätigung?

  1. #11
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Beiträge
    2.731
    Anzeige

    Powerstation Test
    Ich will ja von nix abhalten, will nur selber wissen obs das auch braucht.

    Es wird auf jeden Fall interessant sein zu sehen wie lange das TWSTO nun gesetzt bleibt, das DB meint ja :
    "When the STOP condition is executed on the bus, the TWSTO bit is cleared automatically."
    Das können doch max. 2 Takte zu, sagen wir mal, 100kHz sein,
    kommt dann auf 320 Takte bei 16MHz ? oder

    schau ma mal ...

  2. #12
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    26.05.2005
    Ort
    Kaiserslautern
    Beiträge
    794
    Hi,

    dabei musst du bedenken, dass I²C auch wesentlich langsamer (Slave-Drosselung) und wesentlich schneller (FastMode) sein kann.

    Aber ansich ein schönes Experiment. Freu mich auf deine Ergebnisse

    Gruß, CowZ

  3. #13
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Beiträge
    2.731
    Ja dann sind wir mal nicht so
    ich hab als Testprogramm das aus der Wiki-Seite verwendet, und gleich nach der Stop übergabe diese Warteschleife eingebaut:
    Code:
    Do
       Incr Testcnt
    Loop Until Twcr.twsto = 0
    
    Print "stop: " ; Testcnt
    Bei 16Mhz komme ich auf den Wert 9.

    So schaut das ganze in Assembler aus:
    Code:
    # Do
    # Incr Testcnt
    +00000106:   E6A4        LDI     R26,0x64         Speicherort von Testcnt
    +00000107:   E0B0        LDI     R27,0x00
    +00000108:   918C        LD      R24,X            Wert aus SRAM holen
    +00000109:   5F8F        SUBI    R24,0xFF         +1
    +0000010A:   938C        ST      X,R24            Wert wieder ins SRAM
    
    +0000010B:   2700        CLR     R16              Clear Register
    +0000010C:   27BB        CLR     R27              Clear Register
    +0000010D:   E5A6        LDI     R26,0x56         TWCR über SRAM holen
    +0000010E:   918C        LD      R24,X            Load indirect
    +0000010F:   FB84        BST     R24,4            Bit store from register to T, TWSTO ist Bit4
    
    # ... Twcr.twsto = 0 ?
    +00000110:   F40E        BRTC    0x0112           Branch if T flag cleared
    
    +00000111:   E001        LDI     R16,0x01         Load immediate
    +00000112:   E040        LDI     R20,0x00         Load immediate
    +00000113:   1704        CP      R16,R20          Compare
    +00000114:   F011        BREQ    0x0117           Branch if equal, fertig
    
    # loop
    +00000115:   940C0106    JMP     0x00000106
    
    +00000117:   ....
    kann ja mal jemand nachrechnen wieviel Takte das sind

  4. #14
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    26.05.2005
    Ort
    Kaiserslautern
    Beiträge
    794
    Hi,

    mhh...
    15 Takte pro Schleife, 9 Schleifen
    => 135 Takte
    Kommt natürlich nich ganz hin, weil am Ende das BRTC schon anschlägt usw. aber so ~100 Takte sollten hinkommen.

    Viel genauer brauchen wir das ja aber auch nicht, da ja - wie gesagt - die Busgeschwindigkeit variieren kann.

    Gruß, CowZ

  5. #15
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Beiträge
    2.731
    Also dauert der Vorgang keinen ganzen Takt auf TWI-seite,

    jetzt müsste man noch mit höherer Busgeschwindigkeit probieren, ob es da auch schneller geht, und das man sieht ob der Vorgang von der TWI-Geschwindigkeit abhängt.
    Denn es muss ja nur SDA losgelassen werden.

  6. #16
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Beiträge
    2.731
    Dann kommt auch noch das Ergebnis zu der Busgeschwindigkeit von 400kHz,
    nach dem STOP zählt er jetzt nur noch bis 3.
    Ist dann auch ca. die Dauer eines Taktes vom TWI.

  7. #17
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    26.05.2005
    Ort
    Kaiserslautern
    Beiträge
    794
    Ja, sollte ja auch so sein

    Und die 300 µC-Takte sollte er dann keine neuen Sachen anfangen. Daher ist also ein warten auf das STOP schon sinnvoll. (Oder? )

    Gruß, CowZ

  8. #18
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Beiträge
    2.731
    Ich würde trotzdem sagen, das Warten der falsche Begriff ist, nach dem Stop würde ich jetzt immer noch nicht warten, wenn ich sehe was man da nur machen kann in der Zeit, das braucht man ja schon um zu entscheiden das man ein neues Start will, besser ist es noch vor einem neuen Start nachzuschauen ob das STOP evtl. noch gesetzt ist !

    Ist ja sonst nur Zeitverschwendung

  9. #19
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    26.05.2005
    Ort
    Kaiserslautern
    Beiträge
    794
    Hi,

    ja ok, so wollte ich es ja auch machen :P

    Gruß, CowZ

Seite 2 von 2 ErsteErste 12

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

12V Akku bauen