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.
![]()
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.
Hier kann man die Kommandos am PC-Programm(RS232) und die eingelesenen Daten sehenCode:$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
![]()







Zitieren

Lesezeichen