Több Bytes küldése céljából!
Ha valakinek pont ez kellene!
Ezek a rutinok Fix méretű a „Const I2c_bytes = 15”-ben megadot csomag átküldésére jók!
Az „ Dim I2c_byte(i2c_bytes) As Byte ' I2C Bytes tároló tömb „ –be pakolt értékeket küldjük el, és oda is érkezik a Slave oldalon.
Eredetileg 2 csatornás ADC méréseket küldött! (Még benne maradtak a nyomai. de csak a tanulás kedvéért! Ha nem kel kikel gyomlálni!)
Kód: Egész kijelölése
' I2C-Master2.bas
' Sendet kontinuierlich über I2C-Bus einen Byte-Wert und 2 ADC-Werte (10 Bit) über den Bus.
' Dieser Master verwendet das Hardware-TWI.
' Der Byte-Wert wird mit Datenpaket inkrementiert. Die ADC-Werte werden per Poti
' An den Eingängen ADC0 und ADC1 abgenommen.
$regfile = "m128def.dat" ' Atmega 8 Controller
$crystal = 16000000 ' intern 8MHz
Const Slave_address = &H20 * 2 ' Adresse des Slave (*2)
'Megadhatod I2C-n átküldött Bytek számát
Const I2c_bytes = 15 'Kötelező: Master.bas = Slave.bas
'-------------------------------------------------------------------------------
' LCD
'-------------------------------------------------------------------------------
Config Lcdpin = Pin , Db4 = Porta.2 , Db5 = Porta.3 , Db6 = Porta.4 , Db7 = Porta.5 , E = Porta.1 , Rs = Porta.0
Config Lcd = 20 * 4
Initlcd
Cursor Off 'Cursor Off : Cls : Locate 1 , 1
Cls
Config Timer1 = Pwm , Pwm = 8 , Compare C Pwm = Clear Down , Prescale = 1 ' Keyboard
Config Timer3 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Prescale = 1 ' LCD Backlight
Stop Timer0
Enable Interrupts
Pwm3a = 10
Pwm1c = 5
' Variablen
' Dim Adc_wert1 As Word ' ADC_Wert1
' Dim Adc_wert1l As Byte At Adc_wert1 Overlay ' Low-Byte ADC-Wert1
' Dim Adc_wert1h As Byte At Adc_wert1 + 1 Overlay ' High-Byte ADC_Wert1
' Dim Adc_wert2 As Word ' ADC_Wert2
' Dim Adc_wert2l As Byte At Adc_wert2 Overlay ' Low-Byte ADC-Wert2
' Dim Adc_wert2h As Byte At Adc_wert2 + 1 Overlay ' High-Byte ADC_Wert2
Dim Bytewert As Byte ' Byte-Wert
Dim I2c_byte(i2c_bytes) As Byte ' I2C Bytes tároló tömb
Dim I As Byte
Config Adc = Single , Prescaler = Auto , Reference = Internal
Start Adc
$lib "i2c_twi.lbx" ' Hardware-TWI verwenden
Config Twi = 100000 ' Übertragungsrate 100000 Bits/Sek.
Config Sda = Portd.1 ' SDA-Port
Config Scl = Portd.0 ' SCL-Port
I2cinit ' Initialisierung der TWI
Waitms 500
' ------------------------------------------------------------------
' Hauptschleife
' ------------------------------------------------------------------
' Adc_wert1l = 1
' Adc_wert1h = 1
' I2c_byte() Tömb feltöltése
For I = 1 To I2c_bytes
I2c_byte(i) = I ' Ide rakjad a küldendő Byte-ket
Next I
Do
'Adc_wert1 = Getadc(0) ' erster ADC-Wert einlesen
'Adc_wert2 = Getadc(1) ' zweiter ADC-Wert einlesen
'Incr Bytewert
' Daten an den Slave per Slave-Adresse senden
' Reigenfolge der Datenbytes beachten
'(
I2cstart ' Start Senden
I2cwbyte Slave_address ' Slave-Adresse (&h20)
I2cwbyte Bytewert ' 1. Datenbyte: Bytewert senden
I2cwbyte Adc_wert1l ' 2. Datenbyte: Low-Byte ADC-Wert1 senden
I2cwbyte Adc_wert1h ' 3. Datenbyte: High-Byte ADC-Wert1 senden
I2cwbyte Adc_wert2l ' 4. Datenbyte: Low-Byte ADC-Wert2 senden
I2cwbyte Adc_wert2h ' 5. Datenbyte: High-Byte ADC-Wert2 senden
I2cstop ' Stop senden
')
I2cstart ' Start Senden
I2cwbyte Slave_address ' Slave-Adresse (&h20)
' I2cwbyte Bytewert ' 1. Datenbyte: Bytewert senden
For I = 1 To I2c_bytes
I2cwbyte I2c_byte(i) ' I2c_bytes számú Bytes átküldés
Next I
I2cstop ' Stop senden
Waitms 20
Cls : Locate 1 , 1 : Lcd I2c_byte(i) ' Oszi synchronisiert besser
Loop