Senin, 04 April 2011

Simulasi Program Counter pada Mikrokontroler ATMEGA 8535

Salah satu aplikasi yang banyak digunakan baik di dunia industri ataupun robotika adalah aplikasi pencacah atau lebih akrab disebut counter. Dalam dunia industri biasanya digunakan dalam conveyor dan berbagai jenis alat otomasi lainnya, dalam dunia robotika biasanya digunakan dalam memprogram untuk menghitung persimpangan yang dilalui oleh robot.

Dalam artikel kali ini akan ditekankan aplikasi dalam bentuk simulasi program counter pada mikrokontroler dengan menggunakan program Bascom AVR.

Deskripsi Sistem

Sistem ini akan membaca sensor yang terhubung di salah satu pin di mikrokontroler, di PinA.0 dan PinA.1. Ketika PinA.0 bernilai 1 maka program akan menghitung maju, dan ketika PinA.1 bernilai 1 maka program akan menghitung nmundur, lalu port B dihubungkan ke LCD sebagai penampil jumlah perhiutngan serta keluaran dari sistem  ini dihubbungkan ke PortD, jika sensor talah menghitung sebanyak 5 kali atau lebih, maka lampu di PortD akan menyala.


Program

$regfile = "8535def.dat"
$crystal = 1000000
$sim

Config Lcdpin = Pin , Db4 = Portb.3 , Db5 = Portb.2 , Db6 = Portb.1 , Db7 = Portb.0 , E = Portb.4 , Rs=Portb.5
Config Lcd = 16 * 2

Dim Hitung As Byte

Config Porta = Input
Config Portd = Output

Sensor_a Alias Pina.0
Sensor_b Alias Pina.1
Led Alias Portd


Porta = 1
Hitung = 0
Led = 0

Do

Locate 1 , 1
Lcd "hitung = "

If Sensor_a = 0 Then
Hitung = Hitung + 1
Do
Loop Until Sensor_a = 1
End If

If Sensor_b = 0 Then
Hitung = Hitung - 1
Do
Loop Until Sensor_b = 1
End If

Locate 2 , 1
Lcd Hitung

If Hitung >= 5 Then
Portd = &HFF
Else
Portd = &H00
End If

Loop

Hasil Percobaan



Ketika jumlah perhitungan telah mencapai 5 atau selebihnya maka lampu pada Port.D akan hidup, sedikit tambahan pada layar simulasi port sebelah kanan (lampu hijau) merupakan input pada simulasi, sedangkan port pada layar sebelah kiri (lamu merah) merupakan output pada simulasi. Baca Simulasi Program Mikrokontroler dengan BASCOM AVR.


Semoga bermanfaat..

25 komentar:

  1. mas,,mohon bantuannya,,aku mo bkin penghitung orang masuk dan orang yg keluar suatu ruangan dgn 2 buah sensor photodioda yg di pasang dalam satu pintu.. tolong programnya seperti apa mas menggunakan bascom,,

    BalasHapus
  2. TO mas fre's: programnya hampir sama dengan diatas, tinggal buat rangkaian photodioda nya saja biar mendeteksi orang memberi perubahan logika ke mikrokontroler

    BalasHapus
  3. Mas mohon bantuannya...
    bisa tolong cekkan program bascom ini
    dan mohon di betulkan

    $regfile = “m8535.dat” ‘Mikrokontroler yang digunakan = ATMEGA8535
    $crystal = 8000000 ‘Kristal Oscilator yang digunakan = 8 MHz

    ‘Inisialisasi RAM yang akan digunakan sebagai register:
    Dim Data7 As Byte
    Dim Koma7 As Byte
    Dim Dataadc As Word
    Dim Suhu As Single
    Dim S10 As String * 10
    Dim S2a As String * 2
    Dim S2b As String * 2
    Dim Panjang As Byte

    ‘Inisialisasi ADC:
    Config Adc = Single , Prescaler = Auto
    Start Adc

    ‘Inisialisasi PORT I/O:
    Config Porta.0 = Output ‘Inisialisasi PORTA.0 sebagi output
    Config Porta.5 = Output
    Config Porta.6 = Output
    Buzzer Alias Porta.0 ‘PORTA.0 = Buzzer
    Enlo Alias Porta.5 ‘PORTA.5 = Pengendali 7-Segment (bilangan pecahan)
    Enhi Alias Porta.6 ‘PORTA.6 = Pengendali 7-Segment (bilangan bulat)
    Config Portc = Output ‘Inisialisasi PORTC sebagai output
    Buzzer = 1 ‘Buzzer = OFF (Buzzer = active-low)

    Enlo = 1 ‘7-Segment pecahan = di-latch (tidak menerima data)
    Enhi = 1 ‘7-Segment bulat = di-latch

    Do
    Dataadc = Getadc(7) ‘Ambil data ADC kanal 7 (PORTA.7)

    ‘Proses kalibrasi data suhu:
    Suhu = Dataadc / 10.23
    Suhu = Suhu * 5.03
    S10 = Fusing(suhu , “#.##”)
    Panjang = Len(s10)
    Panjang = Panjang – 3
    S2a = Left(s10 , Panjang)
    S2b = Right(s10 , 2)
    Data7 = Val(s2a)
    Koma7 = Val(s2b)

    ‘Proses menampilkan data bilangan pecahan ke 7-Segment:
    Portc = Makebcd(koma7)
    Enlo = 0 ‘7-Segment pecahan diaktifkan (siap menerima data)
    nop
    nop
    Enlo = 1 ‘7-Segment bulat di-latch

    ‘Proses menampilkan data bilangan bulat ke 7-Segment:
    Portc = Makebcd(data7)
    Enhi = 0
    nop
    nop
    Enhi = 1

    Waitms 200 ‘Tunda 200ms
    Loop

    BalasHapus
  4. untuk mas aghoy:

    maaf telat bales, saya jarang buka komentar

    itu deklarasi mikrokontroler yg digunakan salah,
    program mas aghoy : $regfile = “m8535.dat”
    harusnya $regfile = “8535def.dat”
    untuk melihat file reg mikro pada bascom bisa buka folder instalasinya,misal "C:\Program Files\MCS Electronics\BASCOM-AVR-DEMO\

    terus pada program deklarasi I/O
    pada program mas aghoy:
    Config Porta.0 = Output
    Config Porta.5 = Output
    Config Porta.6 = Output

    harusnya gini aja

    Config Porta = Output

    Sudah saya coba dan gak ada error
    semoga bermanfaat

    BalasHapus
  5. software yang digunakan apa mas??
    codevision avr bisa gak??

    BalasHapus
  6. Bisa, kalo mau simulasi bisa dikombinasikan dengan software proteus

    BalasHapus
  7. mas aku mo bkin penghitung orang masuk dan orang yg keluar suatu ruangan dgn 2 buah sensor photodioda yg di pasang dalam satu pintu
    ini program yang udah aku buat tp msh ada kekurangan yaitu jika orang berdiri di depan sensor dalam waktu yang cukup lama maka alat akan terus menghitung jumlah orang..
    mohon bantuannya


    $regfile = "m16def.dat"
    $crystal = 11059200

    Config Pina.1 = Input
    Config Pina.0 = Input

    Config Pinb.5 = Input
    Config Pinb.6 = Input
    Config Pinb.7 = Input


    Tombol1 Alias Pinb.5
    Tombol2 Alias Pinb.6
    Tombol3 Alias Pinb.7
    Fd1 Alias Pina.1
    Fd2 Alias Pina.0

    Set Portb.5
    Set Portb.6
    Set Portb.7

    Declare Sub Kalibrasi
    Declare Sub Bacaadc
    Declare Sub Ceksensor


    Dim Href0 As Word , Lref0 As Word , Vref0 As Word
    Dim Href1 As Word , Lref1 As Word , Vref1 As Word
    Dim Dataadc0 As Word , Dataadc1 As Word
    Dim X As Byte , Y As Byte , Z As Byte
    Dim Eeprom0 As Eram Byte , Eeprom1 As Eram Byte


    Config Adc = Single , Prescaler = Auto , Reference = Avcc



    '-------------------------------->> konfigurasi LCD <<-------------------------------------------------------------

    Config Lcdpin = Pin , Db4 = Porta.5 , Db5 = Porta.4 , Db6 = Porta.3 , Db7 = Porta.2 , E = Porta.6 , Rs = Porta.7
    Config Lcdbus = 4
    Config Lcd = 16 * 2
    Cursor Off
    Cls
    Eeprom0 = Vref0
    Eeprom1 = Vref1
    '------------------------------------------------------------------------------------------------------------------
    Primer:

    Do
    Cls
    Locate 1 , 1
    Lcd "coba PD"
    Locate 2 , 1
    Lcd "kalbrasi counter"
    Waitms 100

    If Tombol1 = 0 Then
    Call Bacaadc
    Call Kalibrasi
    End If

    If Tombol3 = 0 Then Goto Mulai
    Loop

    'X = 0
    'Y = 0

    Mulai:
    X = 0
    Y = 0
    Do
    Call Ceksensor
    Gosub Counterpd

    If X > Y Then Z = X - Y
    If X < Y Then Z = Y - X
    If X = Y Then Z = X - Y

    Cls
    Locate 1 , 1
    Lcd "IN=" ; X
    Locate 1 , 9
    Lcd "OUT=" ; Y
    Locate 2 , 1
    Lcd "Jml=" ; Z
    Locate 2 , 9
    Lcd "S=" ; Pina.1 ; Pina.0
    Waitms 200
    Loop

    Counterpd:

    Do
    If Fd2 = 1 Then
    Incr X
    Waitms 500
    End If
    Loop Until Fd1 = 1



    Do
    If Fd1 = 1 Then
    Incr Y
    Waitms 500
    End If
    Loop Until Fd2 = 1

    '-------------------------------------------------------------------------------
    Sub Bacaadc:
    Start Adc
    Dataadc0 = Getadc(0)
    Dataadc1 = Getadc(1)
    Stop Adc
    End Sub
    '-------------------------------------------------------------------------------
    Sub Kalibrasi
    Cls
    Lcd "proses kalibrasi"
    Waitms 500

    Do
    Call Bacaadc

    If Dataadc0 < Href0 Then Lref0 = Dataadc0
    If Dataadc1 < Href1 Then Lref1 = Dataadc1

    If Dataadc0 > Lref0 Then Href0 = Dataadc0
    If Dataadc1 > Lref1 Then Href1 = Dataadc1

    Cls
    Locate 1 , 1
    Lcd "adc=" ; Lref0
    Waitms 100
    Cls
    Locate 2 , 1
    Lcd "adc=" ; Lref1
    Waitms 100
    Loop Until Tombol1 = 0

    Vref0 = Lref0 + Href0
    Vref1 = Lref1 + Href1

    Vref0 = Vref0 / 2
    Vref1 = Vref1 / 2

    Kalibrasi_x:
    Cls
    Lcd "kalibrasi sukses"
    Wait 2
    Eeprom0 = Vref0
    Eeprom1 = Vref1
    Do
    Cls
    Lcd ; Pina.0 ; Pina.1
    Waitms 200
    Loop Until Tombol2 = 0
    Goto Primer

    End Sub


    Sub Ceksensor
    Call Bacaadc

    If Dataadc0 > Vref0 Then
    Pina.0 = 1
    End If
    If Dataadc0 < Vref0 Then
    Pina.0 = 0
    End If

    If Dataadc1 > Vref1 Then
    Pina.1 = 1
    End If
    If Dataadc1 < Vref1 Then
    Pina.1 = 0
    End If

    End Sub

    BalasHapus
  8. program konter yang mas imam buat seperti ini:
    "untuk counter 1"
    Do
    If Fd2 = 1 Then
    Incr X
    Waitms 500
    End If
    Loop Until Fd1 = 1

    "untuk counter 2"
    Do
    If Fd1 = 1 Then
    Incr Y
    Waitms 500
    End If
    Loop Until Fd2 = 1

    saran saya sebelum perinta if diakhiri ditambahkan perintah

    Do
    Loop Until Fd2 = 0
    "untuk counter 1"

    Do
    Loop Until Fd1 = 0
    "untuk counter 2"

    jd perintahnya
    Do
    If Fd2 = 1 Then
    Incr X
    Waitms 500
    Do
    Loop Until Fd2 = 0
    End If
    Loop Until Fd1 = 1

    "untuk counter 2"
    Do
    If Fd1 = 1 Then
    Incr Y
    Waitms 500
    Do
    Loop Until Fd1 = 0
    End If
    Loop Until Fd2 = 1


    jadi counter tidak akan menghitung sampai terjadi perubahan logika pada pin yang dijadikan counter

    BalasHapus
  9. mass,,saya uga mo bikin counter pngunjung pke infra,,klo misal pke CV avr gmn yaa?

    BalasHapus
  10. lnjutan diatas,,saya bikin,,cm pda saat snsor trtutup,,progrm trus mncacah,,gmn...??tlng bntuanya

    BalasHapus
  11. secara logika sama dengan diatas, tinggal ganti aja dengan rulu-rule di bahasa c

    BalasHapus
  12. jarak antar 2 buah photodioda itu berapa ya mas?

    BalasHapus
  13. mas saya bikin counter up down 2 digit dan input dengan 2 sensor....lo saya pakai at mega 16 programnya seperti apa ya mas...mohon bantuanya mas...makasi mas,ditnggu blsanya

    BalasHapus
    Balasan
    1. Hampir sama logika nya dengan program diatas

      Hapus
    2. mas tolong bantuanya untuk bahasa c nya?? yg di avr codevision

      Hapus
  14. mas maaf mw tanya nih, kalo misal program counter data penghitungannya bisa di save gx? , misalnya pada lcd menghitung sampai 5 tiba" ada gangguan tekhnis sperti power mati atau mati listrik nih, apakah begitu dinyalakan kmbali data counter yang tadi masih bisa tersimpan? kalo bisa gmn caranya? atau boleh minta contoh programnya mas,, tolong ya mas "saya lagi nyusun tugas akhir"

    BalasHapus
    Balasan
    1. Setau saya bisa mas, tapi belum pernah coba, nanti saya tanyakan lagi sama teman yang lebih ahli

      Hapus
  15. mas tolong bantuannya

    BalasHapus
  16. mas tolong bantuanya untuk bahasa c nya??

    BalasHapus
  17. mas, boleh minta program sistem di atas dalam bentuk bahasa C-nya?

    BalasHapus
  18. mas ad program bascom 8051 / AVR untuk lift 3 lantai gak .......

    BalasHapus
  19. mas , gimna listing programnya kalau mau menggabungkan dua buah sensor untuk mematikan dan menyalakan 1 buah lampu. (fungsi IF) contoh :

    if sensor_1 = 0 and sensor_b = 0 then
    hitung = hitung +1
    port b = menyala

    mohon pencerahanya

    BalasHapus
  20. mass boss, kalau mau dibikin penghitung kecepatan motor bisa gak mas ???, sekalian jadi umpan balik buat pengontrolannya mass boss, terimakasih sebelum nya :D

    BalasHapus
  21. terimakasih mas, sangat membantu��

    BalasHapus

Silahkan tinggalkan komentar...