i2c manual (atmega 8 —- at24c04)


I2C versi 1.0 dikenalkan oleh Philips pada tahun 1992, direvisi menjadi versi 2.0 pada tahun 1998, setahun kemudian direvisi lagi menjadi versi 2.1

Komunikasi data secara I2C dilakukan melalui dua saluran, masing-masing adalah saluran data secara seri (SDA) dan saluran clock (SCL), kedua saluran ini dikenal sebagai I2C Bus yang dipakai menghubungkan banyak IC I2C untuk berbagai macam keperluan. IC-IC I2C itu dibedakan menjadi induk (master) dan anak buah (slave), yang dimaksud dengan induk adalah peralatan I2C yang memulai transfer data dan yang membangkitkan clock (SCK). Yang bertindak sebagai master adalah Mikrokontroler yang bertugas mengendalikan I2C Bus.

i2c

berikut potongan programnya:

$regfile = “m8def.dat”
$crystal = 8000000
$baud = 9600

Sdaout Alias Portc.4
Sdain Alias Pinc.4

Sclout Alias Portc.5
Sclin Alias Pinc.5

Ddrscl Alias Ddrc.5
Ddrsda Alias Ddrc.4

_ack Alias 1
No_ack Alias 0
Declare Sub I2c_write(byval Datana As Byte)
Declare Sub I2c_read(datana As Byte , Byval Ack_bit As Byte)
Declare Sub Readi2ceeprom(byval Alamatdevice As Byte , Byval Alamat As Byte , Datana As Byte)
Declare Sub Writei2ceeprom(byval Alamatdevice As Byte , Byval Alamat As Byte , Byval Datana As Byte)

Dim Dataeeprom As Byte
Dim Index As Byte

Utama:
Index = 0
Do
Call Writei2ceeprom(&B10100000 , Index , Index)
Incr Index
Loop Until Index = 33

Index = 0
Do
Call Readi2ceeprom(&B10100000 , Index , Dataeeprom)
Incr Index
Loop Until Index = 33
Print “selesai”
Do
Loop

Goto Utama

I2c_start:
Set Ddrsda
Set Ddrscl
Set Sdaout
Set Sclout
Waitus 10
Reset Sdaout
Waitus 10
Reset Sclout
Return

I2c_stop:
Set Ddrsda
Set Ddrscl
Reset Sdaout
Reset Sclout
Waitus 10
Set Sclout
Waitus 10
Set Sdaout
Return

Sub I2c_write(byval Datana As Byte)
Local I As Byte
Set Ddrsda
Set Ddrscl
Reset Sclout
For I = 7 To 0 Step -1
If Datana.i = 1 Then
Set Sdaout
Else
Reset Sdaout
End If
Waitus 5
Set Sclout
Waitus 8
Reset Sclout
Next I
Set Sclout
Waitus 5
Reset Sclout
End Sub

Sub I2c_read(datana As Byte , Byval Ack_bit As Byte)
Local I As Byte
Datana = 0
Reset Ddrsda
Set Ddrscl
Reset Sclout
For I = 7 To 0 Step -1
Waitus 10
Datana.i = Sdain
Set Sclout
Waitus 10
Reset Sclout
Next I
Set Ddrsda
If Ack_bit = 1 Then
Reset Sdaout
Else
Set Sdaout
End If
Waitus 10
Set Sclout
Waitus 10
Reset Sclout
End Sub

Sub Readi2ceeprom(byval Alamatdevice As Byte , Byval Alamat As Byte , Datana As Byte)
Gosub I2c_start
Call I2c_write(alamatdevice)
Call I2c_write(alamat)
Gosub I2c_start
Call I2c_write(&Ha1)
Call I2c_read(datana , No_ack)
Gosub I2c_stop
Waitms 10
Print Datana
End Sub

Sub Writei2ceeprom(byval Alamatdevice As Byte , Byval Alamat As Byte , Byval Datana As Byte)
Gosub I2c_start
Call I2c_write(alamatdevice)
Call I2c_write(alamat)
Call I2c_write(datana)
Gosub I2c_stop
Waitms 10
End Sub

‘==================================================

Sinyal dasar I2C meliputi sinyal START, STOP dan ACK sebagai berikut :

SCK merupakan sinyal clock untuk ‘mendorong’ data di SDA, dalam keadaan tidak ada transfer data SDA dan SCK harus dalam keadaan ‘1’. Data di SDA boleh berubah hanya pada saat SCK =’0’, isi SDA diambil peralatan I2C pada saat SCL berubah dari ‘1’ menjadi ‘0’. Jika terjadi perubahan SDA pada saat SCL = ‘1’, perubahan itu diartikan sebagai sinyal START atau STOP.

·        Sinyal START menandakan master akan mulai mengirim data,  sinyal ini  berupa perubahan tegangan SDA dari ‘1’ menjadi ‘0’ pada saat SCK=’1’..

·        Sinyal STOP menandakan master akan mengakhiri komunikasi data, sinyal ini  berupa perubahan tegangan SDA dari ‘0’ menjadi ‘1’ pada saat SCK=’1’. .

Catatan : Sinyal START dan STOP muncul saat awal dan akhir pengiriman 1 blok data, bukan sinyal yang muncul pada awal dan akhir pengiriman 1 byte data.

device address untuk at24c04

1010 A2 A1 P0 R/W

misal untuk alamat 0 device addresnya 0b10100000

misal untuk alamat 256 device addresnya 0b10100010

p0 merupakan page. pada at24c04 kalo po=0 maka alamat yang diakses 0-255

p0 merupakan page. pada at24c04 kalo po=1  maka alamat yang diakses 256-512

8 tanggapan untuk “i2c manual (atmega 8 —- at24c04)”

  1. Yah itu mah udah biasa… kalo mikro nya sebagai master untuk mengakses peralatan i2c, udah banyak yang bisa. Coba donk diulas komunikasi i2c antar dua mikrokontroler dengan CAVR….

  2. wah ngajak di ulas ya. alhamdulilah ga mentok mas. ke enakan mas, kalo di bahas mah. orang di datasheet atmega sudah ada mas, tingga jiplak. mau bayar berapa mas kalo pengen di bahas. orang kaya mas nih, yang meremehkan orang lain.

  3. Alhamdulillah sekarang saya sudah taubat, silahkan dilanjut percobaannya. Hati2 jangan sampai kesetrum…..,,

  4. Sekarang saya sudah taubat mas, maafkan kata2 saya dulu kasar. Sukses terus bang Dhani keysha

Tinggalkan komentar