Hallo Forum gemeinde und bastler
ich habe als 1.) alles durchgesucht ( Internet / Forums ) und bin nicht schlauer geworden.....
Mit den 1Board möchte ich als Hauptboard verwenden ( Master ), Wie vergebe ich mein 2 Board die i2c Bus adresse?.
Das 2 Board möchte ich als: ( Eingänge sowie ausgänge schalten ) ich bitte um erfolgreichen rat und tipps. tue mal den code hier rein den ich von diesen Forum Habe.....
Das ist Master ( CODE )
und das hier ist der Slave ( Code )
geht es auch verleicht irgendwie anders oder einfacher. bitte um rat.....
Gruss Thorsten sch.
ich habe als 1.) alles durchgesucht ( Internet / Forums ) und bin nicht schlauer geworden.....
Mit den 1Board möchte ich als Hauptboard verwenden ( Master ), Wie vergebe ich mein 2 Board die i2c Bus adresse?.
Das 2 Board möchte ich als: ( Eingänge sowie ausgänge schalten ) ich bitte um erfolgreichen rat und tipps. tue mal den code hier rein den ich von diesen Forum Habe.....
Das ist Master ( CODE )
Code:
$regfile = "M8def.dat" ' the used chip
$crystal = 8000000 ' frequency used
$baud = 9200 ' baud rate
$lib "i2c_twi.lbx" ' we do not use software emulated I2C but the TWI
Config Scl = Portc.5 ' we need to provide the SCL pin name
Config Sda = Portc.4 ' we need to provide the SDA pin name
Const Atmega_slave1 = &H80
I2cinit ' we need to set the pins in the proper state
Twbr = 12 'bit rate register
Twsr = 0 'pre scaler bits
'Dim B As Byte , X As Byte
'Print "Mega8 TWI master demo"
'################# WO WIRD HIER B FESTGELEGT UND KANN ICH AUCH BELIEBIG A ODER Z FESTLEGEN? #######################
'################# WENN JA, WIE?#################
Do
I2cstart
I2cwbyte &H80
Waitms 200 ' slave address write
I2cwbyte &B00100000 ' write command
Waitms 200
I2cwbyte &B00000000
I2cstop
Loop
End
und das hier ist der Slave ( Code )
Code:
$regfile = "m8def.dat" ' the used chip
$crystal = 8000000 ' frequency used
Config Portd = Output
Config Pinb.2 = Output ' kopletter PortD als Ausgang
Dim Twi_status As Byte
Dim Twi_data As Byte
Dim A As Byte
Declare Sub Twi_init_slave
Declare Function Twi_wait() As Byte
Twi_data = 0
Call Twi_init_slave ' TWI aktivieren
' Hauptschleife
Do
Twi_status = Twi_wait()
If Twi_status = &H80 Then 'Twi_data
A = Twi_data
If A = &B00100000 Then
Portd.5 = 1 'Funkt
Portb.2 = 1 'Funkt
Else
Portd.5 = 0 'Funkt
Portb.2 = 0 'Funkt
End If
End If
Loop
End
' Unterprogramme
' TWI als slave aktivieren
Sub Twi_init_slave
Twsr = 0 ' status und Prescaler auf 0
Twdr = &HFF ' default
Twcr = &B00000100 ' erstmal nur TWI aktivieren
Twar = &H80 ' Slaveadresse setzen
Twcr = &B01000100 ' dann ACK einschalten
End Sub
' schauen ob was gekommen ist, Status zurückgeben, Daten in globale variable
Function Twi_wait() As Byte
Local Twcr_local As Byte
Twi_wait = &HF8
' warten bis TWINT gesetzt ist
Twcr_local = Twcr And &H80
If Twcr_local = &H80 Then
Twi_data = Twdr ' Daten sichern
Twi_wait = Twsr And &HF8 ' status zurückgeben
Twcr = Twcr Or &B10000000 ' TWINT löschen, erzeugt ACK
End If
End Function
geht es auch verleicht irgendwie anders oder einfacher. bitte um rat.....
Gruss Thorsten sch.