Update ...

habe angefangen die BUS-Platine aufzubauen,
auf der Platine gibt es zwei PCF-8574,
einmal adr(64) Input für Ready-Meldungen und adr(66) Output für Power-Abschaltung von jedem Modul.

Bei jeder Modul kann über zwei Kommandos 21=Ready-HIGH / 20=Ready-LOW die Ready-Leitung direkt gesteuert werde,
so kann das Master-Modul erkennen, auf welchem Steckplatz welches Modul(adr) sich befindet.

Klicke auf die Grafik für eine größere Ansicht

Name:	BUS_001.jpg
Hits:	18
Größe:	64,9 KB
ID:	31860 Klicke auf die Grafik für eine größere Ansicht

Name:	CIMG0508_K.jpg
Hits:	27
Größe:	129,1 KB
ID:	31861

Auf der Bus-Platine gibt es noch zwei Spannungs_Regler (LM317) einer für 5V (Dauer) und einer für 8,5V(Vin-Nano)

Zum testen der TWI (I2C) verbindung habe ich erst mal ein Master mit einem einfach Programm gesteckt,
dieser Master setzt RS232-Kommandos als I2C-Master um und sendet eingelesenen I2C-Daten über RS232 zurück.

Code:
$regfile = "m328pdef.dat"$crystal = 16000000
$hwstack = 100
$swstack = 100
$framesize = 100
$baud = 19200


' ------------ DIM ------------------------
Dim X As Byte
Dim T1x As Byte                                             ' Zähler 1/1000
Dim T2x As Byte                                             ' Zähler 1/100
Dim T3x As Byte                                             ' Zähler 1/10


' ------------ I2C-Master  ------------------------
$lib "i2c_twi.lbx"
Config Scl = Portc.5
Config Sda = Portc.4
I2cinit
Config Twi = 100000
Dim Tw_buf(20)as Byte
Dim Tw_x As Byte
Dim Tw_s As Byte
Dim Tw_n As Byte
Dim Xout As String * 250


' ------------ RS232 - Input ------------------------
Dim Na As String * 30
Dim Nax As String * 30
Dim Si As Byte
Config Serialin = Buffered , Size = 40


' ------ Split -------
Dim Sb As Byte                                              ' Split_Zähler
Dim Sbx(20) As String * 10                                  ' Split_Array


' ------------ Timer_0 Zeitvorgabe ------------------------------
Config Timer0 = Timer , Prescale = 256
On Ovf0 Timer0_ovf
Enable Timer0


Enable Interrupts


Print "Start_Main"


Do
   If Ischarwaiting() <> 0 Then
      Si = Inkey()
      If Si <> 13 And Si <> 10 And Len(na) < 30 Then
         Na = Na + Chr(si)
      Else
         Nax = Ucase(na)
         Sb = Split(nax , Sbx(1) , "|")
         If Sbx(1) = "STATUS" Then
            Print "ACK|STATUS"
            Print "Status|"
         Elseif Sbx(1) = "TW_W" Then
            ' ------------ TW zum slave senden ----
            Print "ACK|" ; Nax
            If Sb > 2 Then
               Tw_s = Val(sbx(2) )
               Tw_n = Sb - 2
               For X = 3 To Sb
                    Tw_buf(x -2) = Val(sbx(x) )
               Next X
               I2csend Tw_s , Tw_buf(1) , Tw_n
            Else
               Print "ERROR"
            End If
         Elseif Sbx(1) = "TW_R" Then
            ' ------------ TW vom slave lesen ----
            Print "ACK|" ; Nax
            If Sb = 3 Then
               Tw_s = Val(sbx(2) )
               Tw_n = Val(sbx(3) )
               I2creceive Tw_s , Tw_buf(1) , 0 , Tw_n
               Xout = "TW_R|DATA"
               For X = 1 To Tw_n
                  Xout = Xout + "|" + Str(tw_buf(x))
               Next X
               Print Xout
            Else
               Print "ERROR"
            End If
         Else
            Print "NACK"
         End If
         Na = ""
      End If
   End If
Loop


Timer0_ovf:
   ' ---- Timer_0 ----- Interrupt alle 1 mS ----------------
   Timer0 = 194                                             ' Resrwert = 61
   Incr T1x
   If T1x > 9 Then
      ' -------- Zeitbasis 10 mS ------------------
      Incr T2x
      T1x = 0
      If T2x = 8 Then Portb.5 = 0                           ' Herzschlag-LED (ein)
      If T2x > 9 Then
      ' -------- Zeitbasis 100 mS ------------------
         Incr T3x
         T2x = 0
         If T3x > 9 Then
            T3x = 0
            ' -------------  Zeitbasis 1 Sec -------------------
            ' Print "Status "
            Portb.5 = 1                                     ' Herzschlag-LED (aus)
         End If
      End If
   End If
Return
Return
Hier kann man die Kommandos am PC-Programm(RS232) und die eingelesenen Daten sehen
Klicke auf die Grafik für eine größere Ansicht

Name:	PC_Programm_001.jpg
Hits:	17
Größe:	41,1 KB
ID:	31862