10-11-2012 05:22 AM
saya ingin bertanya,
saya sedang mngerjakan sebuah interface antara atmega 8535 dengan labview via serial rs232
saya mngirim 3 variabel yang masing-masing variabel bernilai 8 bit(1 byte).
tapi saya mengalami stuck. permasalahan saya adalah seringnya data error yang muncul dan bluee screen pada komputer.
saya ingin bertanya penyebab terjadinya bluee screen tersebut pak, dan bagaimana mengatasinya.
saya sertakan juga program mikro dan labviewnya .
semoga master-master sekalian berkenan membantu.
terima kasih.
program pada mikrokontroller atmega 8535
x=x+1;
if (x==255)
{x=0;};
y=y+1;
if (y==125)
{y=0;};
z=z+1;
if (z==50)
{z=0;};
lcd_clear();
lcd_gotoxy(0,0);
sprintf(buf,"nilai x=%d y=%d",x,y);
lcd_puts(buf);
lcd_gotoxy(0,1);
sprintf(buf,"nilai z=%d",z);
lcd_puts(buf);
putchar(x);
putchar(y);
putchar(z);
delay_ms(100);
10-12-2012 11:40 PM
saya melihat pada program LabVIEW yang disertakan, nilai miliseconds to wait diisi 0. Apakah hasilnya tetap sama apabila nilai miliseconds to wait tersebut diganti menjadi 100?
10-14-2012 08:56 AM
tidak sama mas, jika milisecond to wait nya diisi 0 maka akan terjadi kekosongan data yang di terima oleh labview, karena mikrokontroller hanya mengirimkan data setiap 100 ms.
jika di lihat dari gambar block diagram diatas(perhatikan yang saya lingkari merah), saya sudah memberikan structure case, jika nilai byte at port tidak sama dengan 3, maka saya akan mengambil nilai string pada shift register(nilai pada looping sebelumnya), tapi knapa di data yang di baca setelah unsigned byte array terkadang masih terbaca hanya 1 atau 2 array, padahal harusnya yang terbaca hanya 3 array saja(3 byte data string), kira kira apa ya pak permasalahannya?ada solusi pak?
terima kasih banyak.
10-14-2012 09:33 PM
masalahnya ada 2 kan:
1. blue screen
2. data yg diterima tidak konsisten (kadang ada kadang tidak)
betul?
Kalau sepengertian saya, penyebab blue screen itu berarti kita sudah violate peraturan windows, entah itu memory atau corruption di program. Sementara itu data yang diterima tidak konsisten, bisa banyak penyebab.
Salah satunya, LabVIEW bacanya jangan lebih cepat dari 100ms, coba baca-nya setiap 250ms. Kenapa? Jangan kuatir data akan hilang, karena serial port punya buffer (saya kurang yakin besarnya berapa). Contoh begini kalau diilustrasikan:
MIKRO: kirim A
LabVIEW: belum baca, A akan ada di buffer Serial
MIKRO: kirim B
LabVIEW: belum baca, B akan ada di buffer Serial. Total buffer jadi ada A,B
MIKRO: kirim C
LabVIEW: belum baca, C akan ada di buffer Serial. Total buffer jadi ada A,B,C
MIKRO kirim D
LabVIEW: D sudah sampai di buffer Serial, dan saya gunakan fungsi Bytes At Port, maka akan keluar 4 bytes, dan saya gunakan fungsi VISA Read dengan byte count 4, maka di output VISA Read akan keluar string, ABCD.
Semoga membantu.
10-14-2012 11:45 PM
terima kasih pak atas perhatiannya
pak wisnu, ketika saya gunakan fungsi VISA Read dengan byte count 4, maka di output VISA Read akan keluar string, ABCD
pernyataan bapak itu benar sekali pak, saya maunya seperti itu, tapi selalu terjadi bluee screnn jika saya memakai cara itu.
sekarang saya hanya memanipulasi error saja pak, seperti ini kira-kira block diagram saya sekarang.
tapi kelemahan dari block diagram saya di atas adalah ketika mikrokontroller di matikan, data yang di tampilkan adalah data dari perulangan while sebelumnya, jadi tidak bernilai 0, ada solusi pak agar jika mikro di matikan data yang di tampilkan bisa bernilai 0 atau terdeteksi tidak ada input dari serial?
terima kasih banyak pak atas perhatiannya
10-16-2012 12:14 AM
sebentar, satu2 dulu. Itu pas bluescreen, anda pakai fungsi Wait Until Next Ms Multiple atau Wait tidak? Terus kalau pakai, dikasih input berapa ms? Coba kasih delay besar, 500ms, apakah masih bluescreen?
10-17-2012 02:48 AM
saya coba pak pake 2-2 nya (Wait Until Next Ms Multiple atau Wait milisecond). saya coba dari 0ms sampai 1000 ms. data masih suka error. dan sering sekali terjadi bluuscreen. jadi sekarang saya menghindari blue screen tersebut pak.mungkin laptop saya gak kuat, saya pakai vista, padahal prosesor laptop saya bagus, intel core to duo.
sekarang data yang error saya manipulasi saja seperti diagram block yang saya upload di atas.
tapi kelemahan dari block diagram saya di atas adalah ketika mikrokontroller di matikan, data yang di tampilkan adalah data dari perulangan while sebelumnya, jadi tidak bernilai 0, ada solusi pak agar jika mikro di matikan data yang di tampilkan bisa bernilai 0 atau terdeteksi tidak ada input dari serial?
terima kasih banyak pak atas perhatiannya
10-17-2012 04:18 AM
Halo mas Danang, saya sudah mencoba program serial_1.vi yang telah mas Danang lampirkan di atas, ternyata di komputer saya tidak ada masalah, dan bisa membaca dengan baik 3 byte data yang saya kirimkan dari mikro saya, seperti terlihat dalam gambar berikut ini:
Jadi saya rasa bukan programnya yang salah,
oya, sebagai informasi, saya mencobanya dengan membuat mikro saya (Arduino) mengirimkan 3 nilai; nilai pertama bertambah 1 angka, nilai kedua bertambah 2 angka dan nilai ketiga bertambah 4 angka, jelasnya seperti berikut:
int a=0;
int b=0;
int c=0;
void setup(){
Serial.begin(9600);}
void loop(){
a=a+1;
b=b+2;
c=c+4;
if(a>200){a=0;}
if(b>200){b=0;}
if(c>200){c=0;}
Serial.write(a);
Serial.write(b);
Serial.write(c);
delay(100);}
Sedangkan untuk blok diagramnya, saya ubah sedikit, yaitu membuat waktunya tidak dimasukkan user, tetapi langsung saya tentukan 100 milidetik, dan untuk kaki Enable Termination Char nya di fungsi VISA Configure saya buat False, hanya itu, jelasnya seperti gambar berikut ini:
Jadi, apa yang salah ya?
salam hangat
dian
10-17-2012 08:44 PM
Oya, menambahkan lagi, untuk Enable Termination Char secara default adalah True. Apabila nilai ini tidak diganti menjadi False, maka akan membuat setiap ada karakter 10 diterima, maka itu dianggap sebagai karakter terakhir, sehingga karakter berikutnya akan diabaikan. Itulah sebabnya mengapa pada postingan mas Danang yang kedua menyebutkan, bahwa seharusnya ada 3 karakter yang diterima, ternyata hanya 2 karakter saja yang ditampilkan, mengapa? Karena karakter yang kedua adalah 10, maka karakter ketiga diabaikan. Dengan membuat nilainya menjadi False, maka persoalan ini dapat diatasi. Ok, semoga paham, sip..
salam hangat
dian
10-17-2012 09:41 PM
mantap pak Dian analisa-nya. Salut.
BTW pak Dian, sebaiknya di Mikronya setiap send data sebaiknya paka termination character kan? Lebih mudah di LabVIEW nya untuk mengetahui bahwa data transfer telah selesai?