Minggu, 31 Desember 2017

C

Pointer adalah penunjuk alamat dari sebuah variable
Contoh
Int x;
Int *ptr;
ptr=x;//sala karena x bukan alamat
ptr=&x;// benar &x adalah alamat dari x
*ptr=x ;// benar *ptr adala isi dari pointer ptr
*ptr=&x;//salah
*ptr=5;salah karena belum ditentukan alamatnya
ptr=(int *)malloc(2);
ptr[1]=&x;//salah karena pointer sudah disiapkan trmpat dan sudah punya alamat sendiri
*ptr=5;//betul karena sudah ada alamat ptr

Dalam array
Int x[3]={1,2,3};
Int *ptr;
ptr=x;//benarkarena aray tanpa nilai indek=alamat pertama daribarray
ptr=&x;//salah
ptr=&x[0];//benar
*ptr=x;//salah x ini artinya alamat pertama dari array
*ptr=x[0];//benar

Untuk menambahkan alamat pointer ptr++ ini bukan untuk mengakses nilai pada pointer karena alamat pointer yang bertambah jadi misal nilai nya bukanbberada dialamat yang tadi

Ponter juga bisa untuk string
Contoh
Char *nama[5]={"amin","farid","arwinto","rohadi","thomas"}
Printf(*nama[0]);

Minggu, 26 Maret 2017

register spi

parameter spi
1.interupsi
2.clock rate dikalikan x2
3.data order yang dikirim msb aatau lsb
4.spi clock
5.mode spi ada 4
5.1.mode0=posisi saat idle sck pada 0 ambil samling data saat perubahan clock
 sck yang pertama
5.2.mode1=posisi saat idle adlh 0 ambil sampling saat perubahan sck yang kedua
5.3mode2=idle 1 samplig data saat perubahan sck yang pertama
5.4mode3=idle 1 sampling perubahan sck yang kedua

register spi
1:SPCR <SPI Control Register>
2:SPSR <SPI Status Register>
3:SPDR <SPI Data Register>

SPCR

Bit 0 spr0 // bersama dengan spr1 dan spi2x digunakan untuk menganti clock pada spi
Bit 1 spr1//
Bit2 cpha // bersama dengan cpol digunakan untuk seting mode dr mode 0 sampling 3
Bit3 cpol// 
Bit4 mstr// mengantur mode mantep atas slave
Bit5 dord// msb dulu atas lsb
Bit6 spe // aktifkan spi
Bit7 spie// spi interupsi


Register SPSR
Ada 8Bit cuma ada 4 saja yang dipakai yaitu
Bit 0 spi2x mengalikan kecepatan clock
Bit 1 sampai Bit 5 reverse-engineering
Bit 6 wcol
Bit 7 spif interupsi flag




register twi

 komunikasi i2c atmega8 basic                                                  

                     register twi
1-->TWBR==>twi bit register
2-->TWCR==>twi control register
3-->TWSR==>twi status register
4-->TWDR==>twi data register
5-->TWAR==>twi adres register (for slave mode)

1==>TWBR<TWI bit register>

bit7-0==>berfungsi untuk mengatur nilai clock yang di gunakan twi,bersa
ma pengaturan pada prescaler dengan rumus clock=cpu-clock/(16+(2*TWBR*prescaler)

2==>TWCR <twi control register>

                                  bit7==>TWINT(twi interupsi flag)
bit di set oleh hardware SECARA OTOMATIS ketika berha
sil(KALO MASIH MENJALANKAN TUGAS MAKA NILAINYA 0) melakukan tugas seprti setelah mengirim pulsa start/stop
jika bit ini set data register I-bit pada register SREG diset
dan TWIE pada TWCR diset maka akan terjadi interupsi isr twi
interupsi service rutin twi akan dijalankan,untuk meng clearkan bit
TWINT dengan cara mengirim nilai 1(karena yang bernilai 1/set hanya falgnya saja
),kalo tidak ditulis 1 maka tidak
bisa melanjutkan komunikasi twi(penting)
twint akan set pada saat situasi seperti ini
 TWINT Flag diatur dalam situasi berikut:
• Setelah TWI telah dikirimkan sebuah START / BERULANG kondisi START
• Setelah TWI telah dikirimkan SLA + R / W
• Setelah TWI telah dikirimkan sebuah byte alamat
• arbitrase Setelah TWI telah kehilangan
• Setelah TWI telah ditangani berdasarkan alamat budak sendiri atau panggilan umum
• Setelah TWI telah menerima data byte
• Setelah STOP atau BERULANG MULAI telah diterima saat masih ditangani sebagai Slave
• Ketika kesalahan bus telah terjadi karena adanya MULAI atau BERHENTI kondisi ilegal

                            bit6==>TWEA <twi enable ack>
mengontrol pulsa ack jika nilainya 1 ack terkirim

                           bit5==>TWSTA <twi start>
untuk mengirim pulsa strat dengan cara menulis 1 diregister ini

                           bit4==>TWSTO <twi stop>
untup mengirim pulsa stop dengan mengirim 1 pada mode master
akan clear otomatis oleh hardware jika sudah dilakukan stop pulsa,
pada mode slave digunakan untuk menolak data apabila salah dalam
memberi alamat pada slave.

                         bit3==>TWWC < TWI Write Collision Flag>
Aakan set apabila ada data yang menunggu pada TWDR saat Twint
dalam keadaan low (ini berarti tugas belum diselesaikan sampai
menunggu terselaisaikan dengan bit 1 pada TWINT)

                        bit2==>TWEN <twi enable>
mengaktifkan twi dengan mengirim nilai 1 pada register ini.

                        bit1==>tidak digunakan
                        bit0==>TWIE <twi interupsi enable>
untuk mengaktifkan interupsi servisce routin twi

3.TWSR (twi status register)

                    bit7-3==>TWS <twi status>
berisi nilai yang selalu diupdate setelah melakukan tugas twi
misalnya setelah mengirim data stop/start maka nilai disini akan berubah
nilai ini nantinya akan digunakan untuk mengetahui apa pengiriman berhasil/tidak
dengan membandingakan nilai antara nilai tabel dan nilai register ini

                  bit2==>tidak digunakan
                  bit1-0==>TWPS <twi prescaler>
digunakan bersama dengan register TWBR untuk menentukan clock
pada twi misalnya jika ingin nilai clock rendah di nilai 10khz
maka dengan kristal 16mhz dan prescaler=4 maka nilai TWBR=198

4.TWDR (twi data register)

bit7-0==>merupakan nilai data dari komunikasi twi disipan disini mau
data yang dikirim atau data yang diterima

5.TWAR (twi address register)


                      bit7-1==>TWA: TWI (Slave) Address Register
ini digunakan untuk mode slave saja ,yaitu untuk memberi alamat 7 bit pada slave sedadangkan
bit kedelapannya nanti adalah tanda bit untuk menulis atau membaca

                    bit0==>TWGCE: TWI General Call Recognition Enable Bit
digunakan untuk untuk alamat umum atau hanya 1 slave dengan alamat 0x00.

mode twi


  • Master Transmitter – initiates transfer sends data to slave device;
  • Master Receiver – initiates transfer reads data from slave device;
  • Slave Transmitter – waits for master request and then sends data;
  • Slave Receiver – waits for master transmission and accepts data.

  • contoh komunikasi datanya twi



    proses data twi


    mode master tranmiter


    proses komunikasi data dan code yang harus dijalankan

    proses yang harus dijalankan dengan code c untuk gambar di atas

    1.Langkah pertama dalam transmisi TWI adalah untuk mengirimkan kondisi START. Hal ini dilakukan dengan
    menulis nilai tertentu ke TWCR, menginstruksikan perangkat keras TWI untuk mengirimkan MULAI a
    kondisi. Yang nilai menulis dijelaskan nanti. Namun, penting bahwa
    TWINT bit diatur dalam nilai tertulis. Menulis satu untuk TWINT membersihkan bendera. TWI akan
    tidak mulai operasi apapun selama bit TWINT di TWCR diatur. Segera setelah
    aplikasi telah dibersihkan TWINT, TWI akan memulai transmisi kondisi START

    code c 

    2. Ketika kondisi START telah ditransmisikan, TWINT Flag TWCR diatur, dan
    TWSR diperbarui dengan kode status yang menunjukkan bahwa kondisi START memiliki sukses-

    sepenuhnya telah dikirim
    code c
    3. Perangkat lunak aplikasi sekarang harus memeriksa nilai TWSR, untuk memastikan bahwa
    kondisi START berhasil ditransmisikan. Jika TWSR menunjukkan sebaliknya, applica- yang
    software tion mungkin mengambil beberapa tindakan khusus, seperti memanggil rutin kesalahan. Berasumsi bahwa
    kode status seperti yang diharapkan, aplikasi tersebut harus memuat SLA + W ke TWDR. Ingat
    yang TWDR digunakan baik untuk alamat dan data. Setelah TWDR telah dimuat dengan
    diinginkan SLA + W, nilai tertentu harus ditulis untuk TWCR, menginstruksikan hardware TWI
    untuk mengirimkan SLA + W hadir di TWDR. Yang nilai menulis dijelaskan nanti.
    Namun, penting bahwa bit TWINT diatur dalam nilai tertulis. Menulis satu untuk
    TWINT membersihkan bendera. TWI tidak akan memulai operasi apapun selama bit TWINT di
    TWCR diatur. Segera setelah aplikasi telah dibersihkan TWINT, TWI akan memulai

    transmisi paket alamat
    code c
    4. Ketika paket alamat telah dikirimkan, TWINT Flag TWCR diatur, dan
    TWSR diperbarui dengan kode status yang menunjukkan bahwa paket alamat telah berhasil
    telah terkirim. Kode status juga akan mencerminkan apakah seorang budak diakui paket atau
    tidak
    5. Perangkat lunak aplikasi sekarang harus memeriksa nilai TWSR, untuk memastikan bahwa
    paket alamat berhasil dikirimkan, dan bahwa nilai bit ACK adalah sebagai
    diharapkan. Jika TWSR menunjukkan sebaliknya, perangkat lunak aplikasi mungkin mengambil beberapa khusus
    tindakan, seperti memanggil rutin kesalahan. Dengan asumsi bahwa kode status seperti yang diharapkan,
    Aplikasi harus memuat paket data ke TWDR. Selanjutnya, nilai tertentu harus
    ditulis untuk TWCR, menginstruksikan hardware TWI untuk mengirimkan hadir paket data di
    TWDR. Yang nilai menulis dijelaskan nanti. Namun, penting bahwa
    TWINT bit diatur dalam nilai tertulis. Menulis satu untuk TWINT membersihkan bendera. TWI akan
    tidak mulai operasi apapun selama bit TWINT di TWCR diatur. Segera setelah
    aplikasi telah dibersihkan TWINT, TWI akan memulai transmisi paket data

    6. Ketika paket data telah dikirim, yang TWINT Flag TWCR diatur, dan TWSR
    diperbarui dengan kode status yang menunjukkan bahwa paket data telah berhasil dikirim.
    Kode status juga akan mencerminkan apakah seorang budak diakui paket atau tidak

    7. Perangkat lunak aplikasi sekarang harus memeriksa nilai TWSR, untuk memastikan bahwa
    paket data berhasil dikirim, dan bahwa nilai bit ACK adalah sebagai
    diharapkan. Jika TWSR menunjukkan sebaliknya, perangkat lunak aplikasi mungkin mengambil beberapa khusus
    tindakan, seperti memanggil rutin kesalahan. Dengan asumsi bahwa kode status seperti yang diharapkan,
    aplikasi harus menulis nilai tertentu untuk TWCR, menginstruksikan hardware TWI untuk mengirimkan
    kondisi STOP. Yang nilai menulis dijelaskan nanti. Namun, penting bahwa
    bit TWINT diatur dalam nilai tertulis. Menulis satu untuk TWINT membersihkan bendera. TWI
    tidak akan memulai operasi apapun selama bit TWINT di TWCR diatur. Segera setelah
    aplikasi telah dibersihkan TWINT, TWI akan memulai transmisi-kondisi BERHENTI

    tion. Perhatikan bahwa TWINT TIDAK ditetapkan setelah kondisi BERHENTI telah dikirim
    Ketika TWI telah selesai operasi dan mengharapkan respon aplikasi, TWINT Flag
    diatur. Garis SCL ditarik rendah sampai TWINT dibersihkan
    • Ketika TWINT Flag diatur, pengguna harus memperbarui semua TWI Register dengan nilai yang relevan
    untuk siklus bus TWI berikutnya. Sebagai contoh, TWDR harus dimuat dengan nilai menjadi
    ditransmisikan dalam siklus bus berikutnya
    • Setelah semua pembaruan TWI Register dan menunggu tugas aplikasi perangkat lunak lainnya telah
    selesai, TWCR ditulis. Saat menulis TWCR, sedikit TWINT harus ditetapkan. menulis
    satu untuk TWINT membersihkan bendera. TWI kemudian akan memulai melaksanakan operasi apapun

    ditentukan oleh pengaturan TWCR

    code c dan asembli untuk gambar diatas
    1
    ldi r16, (1<<TWINT)|(1<<TWSTA)|
    (1<<TWEN)
    out TWCR, r16
    TWCR = (1<<TWINT)|(1<<TWSTA)|
    (1<<TWEN)
    Send START condition
    2
    wait1:
    in r16,TWCR
    sbrs r16,TWINT
    rjmp wait1
    while (!(TWCR & (1<<TWINT)))
    ;
    Wait for TWINT Flag set. This
    indicates that the START condition
    has been transmitted
    3
    in r16,TWSR
    andi r16, 0xF8
    cpi r16, START
    brne ERROR
    if ((TWSR & 0xF8) != START)
    ERROR();
    Check value of TWI Status
    Register. Mask prescaler bits. If
    status different from START go to
    ERROR
    ldi r16, SLA_W
    out TWDR, r16
    ldi r16, (1<<TWINT) | (1<<TWEN)
    out TWCR, r16
    TWDR = SLA_W;
    TWCR = (1<<TWINT) | (1<<TWEN);
    Load SLA_W into TWDR Register.
    Clear TWINT bit in TWCR to start
    transmission of address
    4
    wait2:
    in r16,TWCR
    sbrs r16,TWINT
    rjmp wait2
    while (!(TWCR & (1<<TWINT)))
    ;
    Wait for TWINT Flag set. This
    indicates that the SLA+W has been
    transmitted, and ACK/NACK has
    been received.
    5
    in r16,TWSR
    andi r16, 0xF8
    cpi r16, MT_SLA_ACK
    brne ERROR
    if ((TWSR & 0xF8) !=
    MT_SLA_ACK)
    ERROR();
    Check value of TWI Status
    Register. Mask prescaler bits. If
    status different from MT_SLA_ACK
    go to ERROR
    ldi r16, DATA
    out TWDR, r16
    ldi r16, (1<<TWINT) | (1<<TWEN)
    out TWCR, r16
    TWDR = DATA;
    TWCR = (1<<TWINT) | (1<<TWEN);
    Load DATA into TWDR Register.
    Clear TWINT bit in TWCR to start
    transmission of data
    6
    wait3:
    in r16,TWCR
    sbrs r16,TWINT
    rjmp wait3
    while (!(TWCR & (1<<TWINT)))
    ;
    Wait for TWINT Flag set. This
    indicates that the DATA has been
    transmitted, and ACK/NACK has
    been received.
    7
    in r16,TWSR
    andi r16, 0xF8
    cpi r16, MT_DATA_ACK
    brne ERROR
    if ((TWSR & 0xF8) !=
    MT_DATA_ACK)
    ERROR();
    Check value of TWI Status
    Register. Mask prescaler bits. If
    status different from
    MT_DATA_ACK go to ERROR
    ldi r16, (1<<TWINT)|(1<<TWEN)|
    (1<<TWSTO)
    out TWCR, r16
    TWCR = (1<<TWINT)|(1<<TWEN)|
    (1<<TWSTO);

    Transmit STOP condition

    jika di rangkum untuk mode master transmiter adalah
    1.kirim start
    2.tunggu twint set
    3.1.bandingkan nilai twsr dengan nilai start jika tidak sama berarti jump ke error();
    3.2.masukan data ke twdr,clear flag twint
    4.tunggu flag twint 
    5.1.cek status register apabila nilainya tidak sama dengan nilai status maka jump ke error
    5.2 isikan data yang mau dikirim ke twdr register,clear flag twint untuk mengirim data
    6.tunggu twint set sebagai tanda pengiriman berhail
    7.1.cek status register jika nilai berbeda maka error
    7.2.kirim stop tranmision


    bus twi












    status code master tranmiter


    mode master reciever
    Dalam modus Master Receiver, sejumlah byte data yang diterima dari Slave Transmitter
    (Lihat Gambar 80). Dalam rangka untuk memasukkan modus Master, kondisi START harus dikirimkan. Itu
    format paket alamat berikut menentukan apakah Guru Transmitter atau Master
    modus penerima yang akan dimasukkan. Jika SLA + W ditransmisikan, modus MT dimasukkan, jika SLA + R adalah trans-
    mitted, modus MR dimasukkan. Semua kode status disebutkan dalam bagian ini mengasumsikan bahwa

    prescaler bit adalah nol atau bertopeng ke nol.

    sytart
    Twen harus ditulis untuk satu untuk mengaktifkan Dua-kawat Serial Interface, TWSTA harus ditulis untuk
    satu untuk mengirimkan kondisi START dan TWINT harus diatur untuk menghapus TWINT Flag. TWI
    maka akan menguji Dua-kawat Serial Bus dan menghasilkan kondisi START secepat bus
    menjadi bebas. Setelah kondisi START telah ditransmisikan, TWINT Flag diatur oleh keras-
    ware, dan kode status di TWSR akan 0x08 (lihat Tabel 66 pada halaman 173). Dalam rangka untuk masuk
    Modus MR, SLA + R harus dikirimkan. Hal ini dilakukan dengan menulis SLA + R untuk TWDR. setelah itu
    TWINT bit harus dibersihkan (dengan menulis ke salah satu) untuk melanjutkan transfer. Hal ini dilakukan

    dengan menulis nilai berikut untuk TWCR:

    Ketika SLA + R telah ditransmisikan dan sedikit pengakuan telah diterima, TWINT adalah
    set lagi dan sejumlah kode status di TWSR yang mungkin. kode status mungkin dalam Guru
    Modus yang 0x38, 0x40, 0x48 atau. Tindakan yang tepat harus diambil untuk masing-masing kode status ini
    dirinci pada Tabel 67 di halaman 176. Diterima data dapat dibaca dari TWDR Register ketika
    yang TWINT Flag diatur tinggi oleh hardware. Skema ini diulang sampai byte terakhir telah
    diterima. Setelah byte terakhir telah diterima, MR harus menginformasikan ST dengan mengirimkan
    NACK setelah yang terakhir diterima byte data. transfer berakhir dengan menghasilkan kondisi BERHENTI atau
    kondisi START diulang. Sebuah kondisi STOP dihasilkan dengan menulis nilai berikut untuk

    TWCR:

    Setelah kondisi START berulang (negara 0x10) Dua-kawat Serial Interface dapat mengakses
    Slave yang sama lagi, atau Slave baru tanpa transmisi kondisi STOP. diulang MULAI
    memungkinkan Guru untuk beralih antara hamba-hamba, modus Master Transmitter dan Master Receiver

    modus tanpa kehilangan kendali atas bus.







    mode slave reciever
    Dalam modus Slave Receiver, sejumlah byte data yang diterima dari Transmitter Guru
    (Lihat Gambar 82). Semua kode status disebutkan dalam bagian ini mengasumsikan bahwa prescaler bit
    nol atau bertopeng ke nol.

    Untuk memulai modus Slave Receiver, Twar dan TWCR harus diinisialisasi sebagai berikut:

    Bagian atas 7 bit alamat mana Dua-kawat Serial Interface akan merespon ketika
    ditangani oleh Master. Jika LSB diatur, TWI akan merespon ke alamat panggilan umum (0x00),
    selain itu akan mengabaikan alamat panggilan umum.

    Twen harus ditulis untuk satu untuk mengaktifkan TWI. The TWEA bit harus ditulis untuk satu untuk mengaktifkan
    pengakuan alamat slave perangkat sendiri atau alamat panggilan umum. TWSTA
    dan TWSTO harus ditulis dengan nol.
    Ketika Twar dan TWCR telah diinisialisasi, TWI menunggu sampai itu ditangani oleh sendiri
    alamat slave (atau alamat panggilan umum jika diaktifkan) diikuti oleh bit data arah. Jika
    arah bit adalah "0" (write), TWI akan beroperasi dalam mode SR, dinyatakan modus ST dimasukkan. Setelah
    alamat slave sendiri dan sedikit menulis telah diterima, TWINT Flag diatur dan valid
    kode status dapat dibaca dari TWSR. Kode status digunakan untuk menentukan lunak yang sesuai
    tindakan ware. Tindakan yang tepat harus diambil untuk setiap kode status dirinci pada Tabel 68 di
    Halaman 179. Slave Receiver Mode juga dapat dimasukkan jika arbitrase hilang sementara TWI di
    modus Master (lihat negara 0x68 dan 0x78).
    Jika bit TWEA adalah ulang saat transfer, TWI akan kembali "Tidak Akui" ( "1") untuk SDA
    setelah byte data yang diterima berikutnya. Ini dapat digunakan untuk menunjukkan bahwa Slave tidak mampu
    menerima lebih byte. Sementara TWEA adalah nol, TWI tidak mengakui budak sendiri
    alamat. Namun, dua-kawat Serial Bus masih dipantau dan pengakuan alamat mungkin
    melanjutkan setiap saat dengan menetapkan TWEA. Ini berarti bahwa bit TWEA dapat digunakan untuk sementara
    mengisolasi TWI dari Dua-kawat Serial Bus.
    Dalam semua mode sleep selain mode Idle, sistem jam ke TWI dimatikan. Jika TWEA
    bit diatur, antarmuka masih bisa mengakui alamat slave sendiri atau alamat panggilan umum oleh
    menggunakan dua-kawat Serial Bus jam sebagai sumber jam. bagian kemudian akan bangun dari tidur
    dan TWI akan terus clock rendah SCL selama bangun dan sampai TWINT Flag dibersihkan
    (Dengan menulis ke satu). penerimaan data lebih lanjut akan dilakukan seperti biasa, dengan jam AVR
    berjalan seperti biasa. Perhatikan bahwa jika AVR sudah diatur dengan waktu yang lama start-up, garis SCL mungkin
    diadakan rendah untuk waktu yang lama, memblokir transmisi data lainnya.
    Perhatikan bahwa dua-kawat Serial Interface Data Register - TWDR tidak mencerminkan byte terakhir

    hadir di bus ketika bangun dari mode Sleep tersebut.



    Slave Transmitter
    Mode

    Dalam modus Slave Transmitter, sejumlah byte data yang ditransmisikan ke Master Receiver
    (Lihat Gambar 84). Semua kode status disebutkan dalam bagian ini mengasumsikan bahwa prescaler bit

    nol atau bertopeng ke nol.
    Untuk memulai modus Slave Transmitter, Twar dan TWCR harus diinisialisasi sebagai berikut:
    Bagian atas tujuh bit alamat mana Dua-kawat Serial Interface akan merespon ketika
    ditangani oleh Master. Jika LSB diatur, TWI akan merespon ke alamat panggilan umum (0x00),
    selain itu akan mengabaikan alamat panggilan umum.
    Twen harus ditulis untuk satu untuk mengaktifkan TWI. The TWEA bit harus ditulis untuk satu untuk mengaktifkan
    pengakuan alamat slave perangkat sendiri atau alamat panggilan umum. TWSTA
    dan TWSTO harus ditulis dengan nol.
    Ketika Twar dan TWCR telah diinisialisasi, TWI menunggu sampai itu ditangani oleh sendiri
    alamat slave (atau alamat panggilan umum jika diaktifkan) diikuti oleh bit data arah. Jika
    arah bit adalah "1" (baca), TWI akan beroperasi dalam mode ST, jika modus SR dimasukkan. Setelah
    alamat slave sendiri dan sedikit menulis telah diterima, TWINT Flag diatur dan valid
    kode status dapat dibaca dari TWSR. Kode status digunakan untuk menentukan lunak yang sesuai
    tindakan ware. Tindakan yang tepat harus diambil untuk setiap kode status dirinci pada Tabel 69 di
    Halaman 182. The Slave Transmitter modus juga dapat dimasukkan jika arbitrase hilang sementara TWI adalah
    dalam modus Master (lihat negara 0xB0).
    Jika bit TWEA ditulis ke nol selama transfer, TWI akan mengirimkan byte terakhir dari transformasi tersebut
    fer. Negara 0xC0 atau negara 0xC8 akan dimasukkan, tergantung pada apakah Master Receiver
    mentransmisikan NACK atau ACK setelah byte akhir. TWI dialihkan ke Slave tidak ditangani
    modus, dan akan mengabaikan Guru jika terus transfer. Jadi Guru Penerima menerima
    semua "1" sebagai data serial. Negara 0xC8 dimasukkan jika tuntutan Guru byte data tambahan (oleh
    transmisi ACK), meskipun Slave telah ditransmisikan byte terakhir (TWEA nol dan diharapkan-
    ing NACK dari Master).
    Sementara TWEA adalah nol, TWI tidak merespon ke alamat budak sendiri. Namun, dua-kawat
    Serial Bus masih dipantau dan pengakuan alamat dapat melanjutkan setiap saat dengan menetapkan TWEA.
    Ini berarti bahwa bit TWEA dapat digunakan untuk sementara mengisolasi TWI dari Dua kawat
    Serial Bus.
    Twar TWA6 TWA5 TWA4 TWA3 TWA2 TWA1 TWA0 TWGCE
    nilai Perangkat Sendiri Slave Alamat
    TWCR TWINT TWEA TWSTA TWSTO TWWC twen - TWIE
    Nilai 0 1 0 0 0 1 0 X
    Perangkat 3 perangkat n
    SDA
    SCL
    ........ R1 R2
    V CC
    perangkat 2
    MENGUASAI
    PENERIMA
    perangkat 1
    BUDAK
    PEMANCAR
    182
    2486AA-AVR-02/2013
    ATmega8 (L)
    Dalam semua mode sleep selain mode Idle, sistem jam ke TWI dimatikan. Jika TWEA
    bit diatur, antarmuka masih bisa mengakui alamat slave sendiri atau alamat panggilan umum oleh
    menggunakan dua-kawat Serial Bus jam sebagai sumber jam. bagian kemudian akan bangun dari tidur
    dan TWI akan mengadakan jam SCL akan rendah selama bangun dan sampai TWINT Bendera
    dibersihkan (dengan menulis ke satu). transmisi data lebih lanjut akan dilakukan seperti biasa, dengan
    AVR jam berjalan seperti biasa. Perhatikan bahwa jika AVR sudah diatur dengan waktu yang lama start-up,
    SCL baris dapat diadakan rendah untuk waktu yang lama, memblokir transmisi data lainnya.
    Perhatikan bahwa dua-kawat Serial Interface Data Register - TWDR tidak mencerminkan byte terakhir

    hadir di bus ketika bangun dari mode sleep ini








    penting<>
    Ada dua kode status yang tidak sesuai dengan keadaan TWI didefinisikan, lihat Tabel 70.
    Status 0xF8 menunjukkan bahwa tidak ada informasi yang relevan tersedia karena TWINT Bendera tidak
    set. Hal ini terjadi antara negara-negara lain, dan ketika TWI tidak terlibat dalam transfer serial.
    Status 0x00 menunjukkan bahwa kesalahan bus telah terjadi selama dua-kawat Serial Bus transfer. Sebuah bus
    kesalahan terjadi ketika memulai atau menghentikan kondisi terjadi pada posisi ilegal di format frame.
    Contoh posisi ilegal tersebut selama transfer serial byte alamat, byte data,
    atau mengakui bit. Ketika kesalahan bus terjadi, TWINT diatur. Untuk pulih dari kesalahan bus, yang
    TWSTO Flag harus mengatur dan TWINT harus dibersihkan dengan menulis logika satu untuk itu. Hal ini menyebabkan
    TWI untuk masuk ke modus Slave tidak ditangani dan untuk membersihkan TWSTO Flag (tidak ada potongan lain di
    TWCR yang terpengaruh). SDA dan SCL baris dilepaskan, dan tidak ada kondisi STOP

    ditularkan.



    penting<combinasi mode twi>
    Dalam beberapa kasus, beberapa mode TWI harus dikombinasikan untuk menyelesaikan tindakan yang diinginkan.
    Pertimbangkan misalnya membaca data dari EEPROM serial. Biasanya, seperti transfer melibatkan
    langkah-langkah berikut:
    1. Transfer harus dimulai
    2. EEPROM harus diinstruksikan apa lokasi harus dibaca
    3. membaca harus dilakukan
    4. Transfer harus selesai
    Perhatikan data yang ditransmisikan baik dari Guru untuk Slave dan sebaliknya. Guru harus menginstruksikan
    Slave apa lokasi yang ingin membaca, membutuhkan penggunaan modus MT. Selanjutnya, data yang
    harus dibaca dari Slave, menyiratkan penggunaan modus MR. Dengan demikian, arah transfer harus
    diubah. Guru harus tetap mengontrol bus selama semua langkah ini, dan langkah-langkah
    harus dilakukan sebagai operasi atomical. Jika prinsip ini dilanggar dalam pendokumentasian multimaster
    tem, Guru lain dapat mengubah pointer data dalam EEPROM antara langkah 2 dan 3, dan
    Guru akan membaca data lokasi yang salah. Seperti perubahan arah transfer dilakukan dengan
    transmisi MULAI BERULANG antara transmisi byte alamat dan penerimaan
    dari data. Setelah MULAI BERULANG, Master terus kepemilikan bus. Pengikut
    Angka menunjukkan aliran dalam transfer ini.

    Gambar 86. Menggabungkan Beberapa Mode TWI untuk Mengakses EEPROM Serial

    multi master<>
    Jika beberapa master yang terhubung ke bus yang sama, transmisi dapat dimulai simultane-
    menerus oleh satu atau lebih dari mereka. TWI standar memastikan bahwa situasi tersebut ditangani di
    sedemikian rupa sehingga salah seorang guru akan diizinkan untuk melanjutkan dengan transfer, dan bahwa tidak ada data
    akan hilang dalam proses. Contoh dari situasi arbitrase digambarkan di bawah ini, di mana dua

    master mencoba untuk mengirimkan data ke Slave Receiver.
    Beberapa skenario yang berbeda mungkin timbul selama arbitrase, seperti yang dijelaskan di bawah ini:
    • Dua atau lebih master kinerja komunikasi identik dengan Slave yang sama. Didalam

    kasus, baik Slave maupun dari master akan tahu tentang pertengkaran bus
    • Dua atau lebih master yang mengakses Slave sama dengan data yang berbeda atau arah bit. Didalam
    kasus, arbitrase akan terjadi, baik di BACA / TULIS bit atau bit data. master
    mencoba untuk output satu di SDA sementara Guru lain output nol akan kehilangan arbitrase.
    Kehilangan master akan beralih ke mode Slave tidak ditangani atau menunggu sampai bus gratis dan
    mengirimkan kondisi START baru, tergantung pada tindakan aplikasi perangkat lunak
    • Dua atau lebih master mengakses budak yang berbeda. Dalam hal ini, arbitrase akan terjadi di
    SLA bit. Masters mencoba untuk output satu di SDA sementara Guru lain output akan nol
    kehilangan arbitrase. Masters kehilangan arbitrase di SLA akan beralih ke mode Slave untuk memeriksa apakah
    mereka sedang ditangani oleh Master menang. Jika ditangani, mereka akan beralih ke SR atau ST
    modus, tergantung pada nilai BACA / TULIS bit. Jika mereka tidak ditangani, mereka
    akan beralih ke mode Slave tidak ditangani atau menunggu sampai bus gratis dan mengirimkan baru
    MULAI kondisi, tergantung pada tindakan aplikasi perangkat lunak

    Ini diringkas dalam Gambar 88. nilai status Kemungkinan diberikan dalam lingkaran.