@PicNick

auch wenn's nervt, ich versuche gerade, i2cslave zu verstehen. Für meinen 2. 2313 (der 1. hat mit den Servos zu tun!) habe ich mir ausgedacht, dass er für die IR-Kommunikation (und evtl. noch für die DCF-Decodierung) geradestehen soll. Da kommt mir so ein Sklave ganz recht.
Da habe ich mir dein i2cslave.zip vorgenommen und irgendwie haben sich 2 Fragen aufgedrängt:
1. Wo in der "I2C-Laberschleife" (etwas respektlos für die ganze I2C-Kommunikation) kann ich mich mit weiteren Aufgaben in Ruhe beschäftigen?
Im Code für den Sklaven ...
Code:
   Do
         If Twi_flag <> 4 Then                    ' wenn STOP war, auf START warten
                                                   ' wenn Rep-Start war, natürlich nicht
    '-------------------------------------------------------
            Loadadr Twi_flag , Z                  ' Controll-Structor
            Gosub Twi_wait_start                  ' da bleiben wir kleben
    '-------------------------------------------------------
         End If
         If Twi_flag = 4 Then                     ' START oder REP-START ?
               Loadadr Twi_flag , Z
               Gosub Twi_get_addr                 ' I2C Adresse prüfen
               If Twi_flag = 2 Then               ' I2C WRITE (receive)

                  Gosub Twi_slave_tx_ack          ' gut, ein ACK
                  Loadadr Twi_flag , Z
                  Gosub Twi_slave_rx_data         ' daten empfangen bis Stop
                                                  ' oder Rep-Start
                                                  ' (wir acken dzt. alles)
                 '----------------------------------------
==> DA1
                 ' Wenn er mit den Daten was machen will, sollte er es jetzt tun
                 ' ------
                 ' eventuell andere Daten zu abholen herrichten
                 '   Twi_read = Varptr( was_anderes );
                 '----------------------------------------

               Elseif Twi_flag = 3 Then           ' I2C READ (send)

                  Gosub Twi_slave_tx_ack          ' gut, auch ein ACK
                  Loadadr Twi_flag , Z
                  Gosub Twi_slave_tx_byte         ' Master holt sich daten
                                            ' soviele, bis er NACK sagt
                                            ' wir haben dzt. kein Limit
               Else
                  Gosub Twi_release               ' was-weiss-ich (Bus freigeben)
==> DA2
            End If
         End If
         If Twi_flag <> 4 Then                    ' Wenn kein REP-Start war, sollte
==> DA3
                                                   ' der Bus jetzt kurz frei sein.

                                                   '2313 sendet jetzt selbst was

                                                   ' Bascom ist für Multimaster
                                                   ' aber nicht geeignet, da kann
                                                   ' dzt. noch Konflikte geben
            Waitms 10                             ' kure Pause, wer weiss schon
            I2cstart                              ' dzt, normales Bascom Soft I2C
            I2cwbyte Out_adr                      ' LED geblinke
            I2cwbyte M32_byte(1)                  ' das erste Byte des Buffers
            I2cstop
         End If
   Loop
End
... gibt es da ja 3 aussichtsreiche Stellen (DA1, DA2, DA3).
Bei DA1 sollte ich neue Daten fürs Lesen/Schreiben vorbereiten, soviel ist klar. Wieviel Zeit habe ich dazu?
Bei DA2: Was kann ich da tun und wie lange? (Wenn ich z.B. DCF decodieren will, dauert das ziemlich lange.)
Bei DA3: Der Bus ist frei, also könnte ich hier senden, was kann ich da noch machen?

2. Noch 'ne Laien-Frage:
Warum braucht's hier eine MyTWI.lib?
RNSI2C funktioniert doch im Prinzip genau so, braucht aber die MyI2c.lib von dir. Bei beiden Anwendungen wird der 2313 zum Sklaven, der kein HW-TWI kann. Also laienhaft betrachtet dieselbe Aufgabe! Warum die 2 Libs? (Wahrscheinlich eine doofe Frage, aber ich versuch's zu verstehen!).
(Natürlich habe ich den I2cSlave schon mit deiner MyI2c.lib aus RNSI2C kompiliert, was ebenfalls natürlich nicht geklappt hat!)

Gruß Dirk