Kali ini akan membahas bagaimana cara untuk mengambil data yang dikirimkan melalui port serial mikrokontroller ATMega dan ditampilkan ke 7segment display, jadi ceritanya terdapat mikrokontroller A yang mengirimkan data (misal data jarak) melalui wiireless atau kabel kemudian mikrokontroller B menerimanya melalui port serial juga RX dan TX, nah bagaimana caranya agar data jarak itu bisa diambil dan ditampilkan ke display 7segment ?, caranya yaitu menggunakan parameter parsing dan logika SIPO,
Jadi ada 2 data yang dikirimkan oleh mikrokontroller A yaitu seperti ini :
Temp = 31
Distance = 4333 mm
Nah bagaimana kita mengambil hanya data jaraknya saja tanpa mengambil data suhu ?, cara nya yaitu menggunakan deteksi kata "Distance" kemudian ditampilkan nilai sesudahnya, ambil 1 bit data untuk ratusan, puluhan dan satuan kemudian ubah dari string ke integer lalu dikeluarkan secara serial ke 7segment, berikut skema 7segment dan program bascom AVRnya.
1. Minimum System
2. Skematik Driver 7Segment
Urutan pemasangan driver 7segment ke mikrokontroller yaitu PortA.0, PortA.1, PortA.2, PortA.3, VCC, GND, untuk 7segment yang dipakai yaitu common anoda dan IC driver 7segment yang dipakai yaitu IC 4094 CMOS
3. Program Bascom AVR
$regfile = "m8535.dat"
$crystal = 11059200
$baud = 19200
Dim Data_masuk As String * 100
Dim Cmd_pos As Byte
Dim Pjg_data As Byte
Dim Cmd As String * 18
Dim Cmd1 As String * 1
Dim Cmd2 As String * 1
Dim Cmd3 As String * 1
Dim Cmdbin As Byte
Dim Byteratusan As Byte
Dim Bytepuluhan As Byte
Dim Bytesatuan As Byte
Dim Y As Integer
Dim Ratusan As Integer
Dim Puluhan As Integer
Dim Satuan As Integer
Config Porta.0 = Output
Config Porta.1 = Output
Config Porta.2 = Output
Config Porta.3 = Output
Datas Alias Porta.0
Strobe Alias Porta.2
Clock Alias Porta.1
Oe Alias Porta.3
Strobe = 1
Oe = 0
Do
Input Data_masuk
Pjg_data = Len(data_masuk)
Cmd_pos = Instr(data_masuk , "Distance")
If Cmd_pos <> 0 Then
$crystal = 11059200
$baud = 19200
Dim Data_masuk As String * 100
Dim Cmd_pos As Byte
Dim Pjg_data As Byte
Dim Cmd As String * 18
Dim Cmd1 As String * 1
Dim Cmd2 As String * 1
Dim Cmd3 As String * 1
Dim Cmdbin As Byte
Dim Byteratusan As Byte
Dim Bytepuluhan As Byte
Dim Bytesatuan As Byte
Dim Y As Integer
Dim Ratusan As Integer
Dim Puluhan As Integer
Dim Satuan As Integer
Config Porta.0 = Output
Config Porta.1 = Output
Config Porta.2 = Output
Config Porta.3 = Output
Datas Alias Porta.0
Strobe Alias Porta.2
Clock Alias Porta.1
Oe Alias Porta.3
Strobe = 1
Oe = 0
Do
Input Data_masuk
Pjg_data = Len(data_masuk)
Cmd_pos = Instr(data_masuk , "Distance")
If Cmd_pos <> 0 Then
'mengambil 1 bit data urutan ke 11 dari data_masuk
Cmd3 = Mid(data_masuk , 11 , 1 )
Cmd3 = Mid(data_masuk , 11 , 1 )
'mengambil 1 bit data urutan ke 12
Cmd2 = Mid(data_masuk , 12 , 1 )
Cmd2 = Mid(data_masuk , 12 , 1 )
'mengambil 1 bit data urutan ke 13
Cmd1 = Mid(data_masuk , 13 , 1 )
'proses merubah string ke integer
Cmd1 = Mid(data_masuk , 13 , 1 )
'proses merubah string ke integer
If Cmd1 = "0" Then
Satuan = 0
Elseif Cmd1 = "1" Then
Satuan = 1
Elseif Cmd1 = "2" Then
Satuan = 2
Elseif Cmd1 = "3" Then
Satuan = 3
Elseif Cmd1 = "4" Then
Satuan = 4
Elseif Cmd1 = "5" Then
Satuan = 5
Elseif Cmd1 = "6" Then
Satuan = 6
Elseif Cmd1 = "7" Then
Satuan = 7
Elseif Cmd1 = "8" Then
Satuan = 8
Elseif Cmd1 = "9" Then
Satuan = 9
End If
If Cmd2 = "0" Then
Puluhan = 0
Elseif Cmd2 = "1" Then
Puluhan = 1
Elseif Cmd2 = "2" Then
Puluhan = 2
Elseif Cmd2 = "3" Then
Puluhan = 3
Elseif Cmd2 = "4" Then
Puluhan = 4
Elseif Cmd2 = "5" Then
Puluhan = 5
Elseif Cmd2 = "6" Then
Puluhan = 6
Elseif Cmd2 = "7" Then
Puluhan = 7
Elseif Cmd2 = "8" Then
Puluhan = 8
Elseif Cmd2 = "9" Then
Puluhan = 9
End If
If Cmd3 = "0" Then
Ratusan = 0
Elseif Cmd3 = "1" Then
Ratusan = 1
Elseif Cmd3 = "2" Then
Ratusan = 2
Elseif Cmd3 = "3" Then
Ratusan = 3
Elseif Cmd3 = "4" Then
Ratusan = 4
Elseif Cmd3 = "5" Then
Ratusan = 5
Elseif Cmd3 = "6" Then
Ratusan = 6
Elseif Cmd3 = "7" Then
Ratusan = 7
Elseif Cmd3 = "8" Then
Ratusan = 8
Elseif Cmd3 = "9" Then
Ratusan = 9
End If
'menampilkan ke 7segment
For Y = 1 To 10
Oe = 1
Bytesatuan = Lookup(satuan , Data7seg)
Shiftout Datas , Clock , Bytesatuan , 1
Bytepuluhan = Lookup(puluhan , Data7seg)
Shiftout Datas , Clock , Bytepuluhan , 1
Byteratusan = Lookup(ratusan , Data7seg)
Shiftout Datas , Clock , Byteratusan , 1
Next Y
Wait 1
End If
Loop
Data7seg:
Data &B11000000 '0
Data &B11111001 '1
Data &B10100100 '2
Data &B10110000 '3
Data &B10011001 '4
Data &B10010010 '5
Data &B10000010 '6
Data &B11111000 '7
Data &B10000000 '8
Data &B10010000 '9
Gan kalau parsing saja,menerima data kemudian dikirim ke serial .misal data diterima =123 ,kemudian dikirim lagi 321=,bisa di kasih contoh..mksih
ReplyDelete