ada yang punya source code untuk membaca ADC trus ngirim melalui UART (RS232) menuju ke komputer menggunakan BASCOM AVR untuk ATMEGA16?klo ada,boleh share..soalnya sy kemaren udh cb.. error mulu pas download ke micro-nya.mau sy compare dengan yang lain..thax a lot..
@Wijana :
Kalo boleh, sharing aja dulu source code yang udah dicobanya. Nanti akan ada yang mengoreksi kalo benar ada kekeliruan di programnya. Learning from mistakes... thanks.
ini saya coba share listing program pake BASCOM AVR...mohon koreksinya ya..thx
====Program pembacaan suhu menggunakan bascom avr=====
$regfile = "m16def.dat"
$crystal = 11059200
$baud = 9600
Config Adc = Single , Prescaler = Auto , Reference = Internal
Start Adc
Dim Dataadc As Word
Dim Datasuhu As Single
Const Vreff = 2.56
Do
Dataadc = Getadc(0)
Datasuhu = Dataadc / 1024
Datasuhu = Datasuhu * Vreff
datasuhu=datasuhu*100
Print "suhu sekarang:" ; Fusing(datasuhu , "#.##")
Wait 1
Loop
listring program diatas baru pake satu sensor,,klo yang pake 3 sensor masih bingung,,,
kemaren2 udh sy coba download ke mikro pk AVRProg...pas di coba tes pake hyperterminal di windows...koq g muncul2 ya..mgkinkah ini pertanda bhw ad kegagalan download?
thx
Nampak programnya sudah tepat.
Kalo masih belum menampilkan karakter apapun, ada dua kemungkinan :
1. Setting-an hyperterminalnya belum sinkron dgn uC
2. Masalah di downloading uC-nya
Langkah pertama yang harus dilakukan adalah memastikan setting-an hyperterminal. Pastikan baudrate-nya ada pada 9600, 8-N-1, flowcontrol-none
Langkah kedua, uji coba koneksi serialnya.
-------------------------
$baud = 9600
$crystal = 11059200
Print "Forum Sains"
End
-------------------------
Seharusnya di layar komputer tercetak, "Forum Sains". Nah, kalo tidak tampil berarti masalahnya ada pada saat downloading ke uC nya.
Coba itu dulu ya. Kalo berhasil coba bakarkan program yang tadi pada uC dan coba lagi lihat di hyperterminal. Nanti kita lanjut bagaimana membuat-nya dapat membaca 3 sensor.
saya sudah mencoba program yang diberikan,, tetapi tetap saja tidak muncul di hyperterminal,, saya menduga ini ada masalah pada downloadingnya,,setelah saya click tombol "Program" pada AVRProg maka muncul kata - kata seperti ini :
"Address:0x0000, Expected:0x0c, Received:0xff"
waah,,saya tambah bingung dengan munculnya tulisan itu,,kemudian bacaan "Program EEPROM...Verifying...Failed"
it means,,downloading program ke mikrokontroler gagal kan?
saya lantas berpikir,,apakah compile .hex yang telah dibuat di BASCOM AVR tidak cocok menggunakan AVRProg (yang sebenarnya digunakan untuk Bahasa C atau assembler) sebagai tool downloader-nya?
Owalah.. kalo begitu emang ada masalah saat downloadingnya...
btw.. saat mencompile programnya, gak ada masalah kan?
Kalo sudah jadi hex file, seharusnya tidak masalah.
Apa mungkin IC-nya sudah bad?
bagaimana cara kita mengetahui bahwa IC yang digunakan telah BAD? so,,menurut mas solusinya gmn?haruskah saya gnt mikrokontroler yang lain?
Kutip dari: wijana pada Mei 20, 2009, 02:19:49 PM
bagaimana cara kita mengetahui bahwa IC yang digunakan telah BAD?
Kalo saya sih selama ini, kalo seandainya IC uC nya itu gak bisa diprogram, suka langsung maen hajar ajah ganti dengan yang baru. Mungkin member yang lain ada yang tahu cara menganalisa IC uC yang BAD, yang gak bisa lagi diprogram?
Kutip dari: wijana pada Mei 20, 2009, 02:19:49 PM
so,,menurut mas solusinya gmn?haruskah saya gnt mikrokontroler yang lain?
Langkah singkatnya begitu, ganti dengan yang baru..
Maaf kalo saran saya kurang memuaskan
sistem minimum saya kan untuk atmega 16,,seandainya saya ganti mikrokontrolernya menjadi atmega 8535,, apakah sistem minimum ini cocok untuk atmega 8535?khawatirnya ketika saya gnti dengan atmega 8535,,nanti malah tidak cocok,,sehingga IC max 232 rusak dan komponen lain rusak?
maaf sy rewel..soalnya masih newbie di dunia mikrokontroler,,hehe..thanx bgt buat mas insan,, atas saran - sarannya...it was very helpful for me...
mgkn member lain pernah mengalami pengalaman diatas?atw punya info - info yang bs d share d sini?silahkan jangan sungkan2..hehe
;D
ini saya coba share listing program pake BASCOM AVR...mohon koreksinya ya..thx
====Program pembacaan suhu menggunakan bascom avr=====
$regfile = "m16def.dat"
$crystal = 11059200
$baud = 9600
Config Adc = Single , Prescaler = Auto , Reference = Internal
Start Adc
Dim Dataadc As Word
Dim Datasuhu As Single
Const Vreff = 2.56
Do
Dataadc = Getadc(0)
Datasuhu = Dataadc / 1024
Datasuhu = Datasuhu * Vreff
datasuhu=datasuhu*100
Print "suhu sekarang:" ; Fusing(datasuhu , "#.##")
Wait 1
Loop
=================================================================
program diatas menggunakan 1 sensor suhu..namun saya ingin modify apabila menggunakan 3 sensor,,bagaimana listing programnya?ada yang bisa bantu?
terima kasih
Topik ini rasanya double, jadi saya gabung saja ke topik sebelumnya....
@ mas Wijana :
Berarti sudah berhasil dengan program 1 sensor suhu itu yach?
Kalo cuman nambahin sensornya paling gampang. Kita tinggal bikin function buat baca ajah..
-------------------------------------------------------------------
'FUNGSI UNTUK MENGAMBIL DATA DARI SENSOR
Sub ambil_suhu(ch0 as integer)
Start adc
Dataadc = Getadc(ch0)
Datasuhu = Dataadc / 1024
Datasuhu = Datasuhu * Vreff
Datasuhu = Datasuhu*100
Nilai_suhu = fusing(datasuhu, "#,##")
Wait 1
End Sub
-------------------------------------------------------------------
Tinggal di panggil deh functionnya. ch0 diisi dengan channel pin ADC yang hendak dibaca.
=================Program suhu menggunakan 3 sensor==========================
$regfile = "m16def.dat"
$crystal = 11059200
$baud = 9600
Config Adc = Single , Prescaler = Auto , Reference = Internal
Declare Sub Ambil_suhu0(ch0 As Integer)
Declare Sub Ambil_suhu1(ch3 As Integer)
Declare Sub Ambil_suhu2(ch4 As Integer)
Dim Dataadc As Word
Dim Datasuhu As Single
Dim Nilai_suhu As Integer
Const Vreff = 2.56
Do
Call Ambil_suhu0
Print Nilai_suhu
Call Ambil_suhu1
Print Nilai_suhu
Call Ambil_suhu2
Print Nilai_suhu
Loop
End
Sub Ambil_suhu0(ch0 As Integer)
Start Adc
Dataadc = Getadc(ch0)
Datasuhu = Dataadc / 1024
Datasuhu = Datasuhu * Vreff
Datasuhu = Datasuhu * 100
Nilai_suhu = Fusing(datasuhu , "#.##")
Waitms 100
End Sub
Sub Ambil_suhu1(ch3 As Integer)
Start Adc
Dataadc = Getadc(ch3)
Datasuhu = Dataadc / 1024
Datasuhu = Datasuhu * Vreff
Datasuhu = Datasuhu * 100
Nilai_suhu = Fusing(datasuhu , "#.##")
Waitms 100
End Sub
Sub Ambil_suhu2(ch4 As Integer)
Start Adc
Dataadc = Getadc(ch4)
Datasuhu = Dataadc / 1024
Datasuhu = Datasuhu * Vreff
Datasuhu = Datasuhu * 100
Nilai_suhu = Fusing(datasuhu , "#.##")
Waitms 100
End Sub
======================================================================
program diatas masih ada kesalahan,,,tapi saya g tau yang mana yang salah...hehe
kata bascom-nya sih gini :
"Incorect number parameters. The number of parameters must be [1]"
kesalahan tersebut mengarah pada fungsi "Call"...udah saya utak atik...tetep aja masih kayak gitu..ada yng punya solusi??
thank you
Kutip dari: wijana pada Mei 28, 2009, 12:03:28 PM
program diatas masih ada kesalahan,,,tapi saya g tau yang mana yang salah...hehe
kata bascom-nya sih gini :
"Incorect number parameters. The number of parameters must be [1]"
kesalahan tersebut mengarah pada fungsi "Call"...udah saya utak atik...tetep aja masih kayak gitu..ada yng punya solusi??
Program yang mas Wijana bikin men-syaratkan ada 1 parameter bernama ch0 yang berupa integer.
Sub Ambil_suhu0(ch0 As Integer)Jadi seharusnya cara memanggilnya adalah dengan menyertakan nomor ADC yang akan diambil nilai suhunya.
bukan
Call Ambil_suhu0
melainkan :
Call Ambil_suhu0(1)* tergantung dari port ADC mana yang akan diperiksa
berikut ini program yang saya buat menggunakan 3 sensor temperatur,,
$regfile = "m16def.dat"
$crystal = 11059200
$baud = 9600
Config Adc = Single , Prescaler = Auto , Reference = Internal
Declare Sub Ambil_suhu0(byval Ch0 As Integer)
Declare Sub Ambil_suhu1(byval Ch3 As Integer)
Declare Sub Ambil_suhu2(byval Ch4 As Integer)
Dim Dataadc As Word
Dim Datasuhu As Single
Const Vreff = 2.56
Do
Call Ambil_suhu0(0)
Call Ambil_suhu1(3)
Call Ambil_suhu2(4)
Loop
End
Sub Ambil_suhu0(ch0 As Integer)
Start Adc
Dataadc = Getadc(ch0)
Datasuhu = Dataadc / 1024
Datasuhu = Datasuhu * Vreff
Datasuhu = Datasuhu * 100
Print "ADC 1 : " ; Fusing(datasuhu , "#.##")
Waitms 500
End Sub
Sub Ambil_suhu1(ch3 As Integer)
Start Adc
Dataadc = Getadc(ch3)
Datasuhu = Dataadc / 1024
Datasuhu = Datasuhu * Vreff
Datasuhu = Datasuhu * 100
Print "ADC 2 : " ; Fusing(datasuhu , "#.##")
Waitms 500
End Sub
Sub Ambil_suhu2(ch4 As Integer)
Start Adc
Dataadc = Getadc(ch4)
Datasuhu = Dataadc / 1024
Datasuhu = Datasuhu * Vreff
Datasuhu = Datasuhu * 100
Print "ADC 3 : " ; Fusing(datasuhu , "#.##")
Waitms 500
End Sub
pertanyaan :
1. Kenapa pada bascom avr tidak dapat d compile?padahal sudah tidak ada error yang telah ditemukan...
2. Apakah maksud Vreff d sana?
3. Apakah Vcc (tegangan dari baterai) berpengaruh pada output ADC?saya menggunakan Vcc 7.4 volt
Kutip dari: wijana pada Juni 08, 2009, 01:24:13 PM
pertanyaan :
1. Kenapa pada bascom avr tidak dapat d compile?padahal sudah tidak ada error yang telah ditemukan...
2. Apakah maksud Vreff d sana?
3. Apakah Vcc (tegangan dari baterai) berpengaruh pada output ADC?saya menggunakan Vcc 7.4 volt
1. Apakah menampilkan pesan error? Bagaimana teks error yang ditampilkan?
2. Vreff adalah salah satu konstanta untuk mengkonversi ke data analog
3. Vcc berhubungan dengan konstruksi uC sebagaimana yg tertera di datasheet. Ini adalah harga mati bagi programmer dan designer yang sudah ditetapkan sama produsennya. Dan umunnya di datasheet integrated circuit memang harus menggunakan voltage digital. Dan Vcc kebanyakan menggunakan tegangan 5 V.
Kutip dari: insan sains pada Juni 09, 2009, 10:31:28 AM
1. Apakah menampilkan pesan error? Bagaimana teks error yang ditampilkan?
Tidak menampilkan pesan error apapun.."No errors found"
gimana perkembangannya nie?
btw... yang sensor satu channel sudah berhasil kan?
pernah berhasil...dan saya tampilkan ke hyperterminal...namun apa yang terjadi,, koq tampilannya menunjukkan suhu 15.89 - 16.00...padahal tegangan input ADC atau tegangan output lm35 = 0.28 v...itu tuh udah bener atau sebenernya salah?jadi bingung
maf ikut nimbrung
pak kalo pake 8535 yang dirubah apa y ..?
terima kasih
Kutip dari: wijana pada Juni 08, 2009, 01:24:13 PM
pertanyaan :
1. Kenapa pada bascom avr tidak dapat d compile?padahal sudah tidak ada error yang telah ditemukan...
2. Apakah maksud Vreff d sana?
3. Apakah Vcc (tegangan dari baterai) berpengaruh pada output ADC?saya menggunakan Vcc 7.4 volt
1. Bascom anda versi berapa? b***kan bukan ?, biasanya hex file yang dihasilkan oleh compiler yang cacat.. menghasilkan file hexout yang cacat, g bisa di panggil sama program downloader... so pastikan compiler anda up to date,dan ga "cacat"... saya pernah ngalami-nya.. alur program udah benar.. tapi pas mrogram ga bisa terus... ternyata file hex yang dihasilkan cacat, yang tentunya ini bikin "pusing" program uploader...
2. Sebelum terjun programing, alangkah baiknya anda buka2 dulu datasheet Chip AVR yang dipake... pelajari.. Vref dalam ADC itu adalah tegangan referensi yang mana nantinya tegangan ini menjadi acuan dalam proses digitalisasi tegangan analog yang masuk... keluaran dari ADC dinyatakan sebagai DxVref, dimana D (binary value) adalah keluaran digital dari modul ADC tersebut. Di AVR, kita bisa mengunakan internal 2.56 vref atau external vref yang di hubungkan ke pin AREF dari avr. Jadi tegangan analog yang terbaca sangat tergantung dari Vref ini dan resolusi dari ADC yang di pake (8/10 bit).
3. Vcc 7.4 volt !!! apa mega16 anda ga berasap :D, gede banget VCC-nya, tegangan untuk mikro / TTL itu maksimum 5 volt... yang mungkin ini juga faktor yang menyebabkan IC anda susah di program , jangan2 udah jebol.. di datasheet ada bagian Absolute Maximum Ratings, jadi anda jangan coba2 melebihi nilai disana.. btw just info chip ATmega32 saya udah 1000x lebih di program dan sekarang masi OK.. banyak hal yang menjadikan kita gagal upload, tegangan VCC ga stabil, kabel programmer yang terlalu panjang.. dan AVR yang udah jebol :D
maksih ilmunya guru :P
btw kalo lm 35 diganti sensor salinitas apa sama listingnya ??kalau g sama gimana yang benar??
terima kasih bantuannya
saya menggunakan atmega 8535
dengan sensor lm35
$regfile = "m8535.dat"
$crystal = 10000000
$baud = 19200
$hwstack = 32 ' default use 32 for the hardware stack
$swstack = 10 ' default use 10 for the SW stack
$framesize = 40
Config Lcdpin = Pin , Db4 = Porta.0 , Db5 = Porta.1 , Db6 = Porta.2 , Db7 = Porta.3 , E = Portc.6 , Rs = Portc.7
Config Lcd = 16 * 2
Config Adc = Single , Prescaler = Auto , Reference = Internal
Start Adc
Dim Dataadc As Word
Dim Datasuhu As Single
Const Vreff = 2.56
Do
Start Adc
Dataadc = Getadc(ch0)
Datasuhu = Dataadc * 1024 / 5000
Datasuhu = Datasuhu * Vreff
Datasuhu = Datasuhu * 100
Nilai_suhu = Fusing(datasuhu , "# , ##")
Wait 1
Loop
unknow config parameter,invalid data type,variable not dimensioned,loop expected
sepertinya smua salah :P tapi saya g ngerti cos baru memeperlajarinya tolng bagi bgai ilmunya y ??maksih
gan ada yang bisa bantu list program saya diatas ??
bagaimana list program bascomavr jika membatasi suhu tersebut? misal di 38 derajat menggerakkan relay dan 35 derajat mengoffkan relay
terimakasih
Kutip dari: hasan_pray02 pada April 02, 2010, 01:54:18 AM
gan ada yang bisa bantu list program saya diatas ??
ni gan
'saya menggunakan atmega 8535 dengan sensor lm35
'-----------------------------------------------
$regfile = "m8535.dat"
$crystal = 10000000
$baud = 19200
$hwstack = 32 ' default use 32 for the hardware stack
$swstack = 10 ' default use 10 for the SW stack
$framesize = 40
Config Lcdpin = Pin , Db4 = Porta.0 , Db5 = Porta.1 , Db6 = Porta.2 , Db7 = Porta.3 , E = Portc.6 , Rs = Portc.7
Config Lcd = 16 * 2
Config Adc = Single , Prescaler = Auto , Reference = Internal
Start Adc
Dim Dataadc As Word
Dim Datasuhu As Single
Const Vreff = 2.56
Do
Start Adc
Dataadc = Getadc(0)
Datasuhu = Dataadc / 1024
Datasuhu = Datasuhu * Vreff
Datasuhu = Datasuhu * 100
Print "Nilai_suhu" ; Fusing(datasuhu , "# . ##")
Wait 1
Loop
'--------------------------- ni gan
maaf nih gan..
ada yg punya tutorial BASCOM ??