Forum Sains Indonesia

Ilmu Terapan => Teknik Elektro => Ilmu Teknik => Mikrokontroler dan Robotika => Topik dimulai oleh: cahcyber pada Juni 25, 2010, 06:35:37 PM

Judul: [ask] Pengolahan String Komunikasi Serial Pada CodeVision
Ditulis oleh: cahcyber pada Juni 25, 2010, 06:35:37 PM
Mau tanya nih.
Saya sedang mencoba mengontrol 4-channel PWM mikrokontroler dari PC menggunakan VB dengan komunikasi serial.
Program di VB sudah saya buat dan sudah bisa saya gunakan untuk mengontrol 1-channel PWM, tapi masalah muncul ketika saya ingin mengontrol 4-PWM Channel. Pengontrolan saya lakukan melalui 4 scrollbar pada VB.
Contoh format data yang saya kirim dari dari PC adalah "P064127191255".
Jadi maksud format data tersebut adalah :
1. Jika karakter pertama = "P", maka data tersebut untuk mengidentifikasi bahwa data tersebut untuk mengontrol PWM.
2. Karakter ke-2,3 dan 4 ("064") untuk PWM channel-1 (OCR0)
3. Karakter ke-5,6 dan 7 ("127") untuk PWM channel-2 (OCR1A)
4. Karakter ke-8,9 dan 10 ("191") untuk PWM channel-3 (OCR1B)
5. Karakter ke-11,12 dan 13 ("255") untuk PWM channel-4 (OCR2)

Untuk pengontrolan 1 channel PWM sudah berhasil, berikut program CodeVision saya.

scanf("%s",frompc);
strncpy(data1,&frompc[1],3);
pwm1=atoi(data1);          
OCR0 = pwm1;              
printf("%s",data1); // Untuk mengecek feedback ke PC, apakah betul nilai isi dari OCR0 sesuai dengan nilai yg saya harapkan


Bagaimana untuk mengontrol ke-empat channel sekaligus?
Karena sudah saya coba menggunakan fungsi strncpy untuk pwm yg lain, namun hasil dari fungsi strncpy yang kedua dan seterusnya tidak terbaca.

scanf("%s",frompc);
strncpy(data1,&frompc[1],3);  // Pada contoh, mengambil angka 064
strncpy(data2,&frompc[4],3);  // mengambil angka 127
strncpy(data3,&frompc[7],3);  // mengambil angka 191
strncpy(data4,&frompc[10],3); // mengambil angka 255
pwm1=atoi(data1);           
pwm2=atoi(data2);
pwm3=atoi(data3);
pwm4=atoi(data4);
OCR0 = pwm1;               
OCR1A = pwm2;
OCR1B = pwm3;
OCR2 = pwm4;


Dari program saya tersebut, yang jalan hanya satu channel pwm saja, yaitu OCR2, yang lain tidak terbaca.
Bagaimana solusinya?

Terima kasih.
Judul: Re: [ask] Pengolahan String Komunikasi Serial Pada CodeVision
Ditulis oleh: Too Payz pada Juni 28, 2010, 11:06:17 PM
Wahh... Keren juga Codingnya..  ;D   ;D
I Like This Question..  :D
Kutip..........
Contoh format data yang saya kirim dari dari PC adalah "P064127191255".
Jadi maksud format data tersebut adalah :
1. Jika karakter pertama = "P", maka data tersebut untuk mengidentifikasi bahwa data tersebut untuk mengontrol PWM.
2. Karakter ke-2,3 dan 4 ("064") untuk PWM channel-1 (OCR0)
3. Karakter ke-5,6 dan 7 ("127") untuk PWM channel-2 (OCR1A)
4. Karakter ke-8,9 dan 10 ("191") untuk PWM channel-3 (OCR1B)
5. Karakter ke-11,12 dan 13 ("255") untuk PWM channel-4 (OCR2)
Formatnya mepet juga.. XIxixixii....
Kalo aq biasanya dengan simbol+angka atau simbol+huruf atau huruf+angka

Contoh format : @64#127$191&255
memang nanti codingnya agak ribet (Sedikit) tp pemberian data PWM tidak perlu harus diberikan semuanya.
misalnya saya hanya ingin mengubah nilai PWM2 jadi 150 dan PWM 1,3,4 tetap jadi tinggal kirim
#150 dan tidak perlu P064150191255

Tetep terserah programmer deh..  ;D
Yg ptg programmer paham protokol komunikasinya..
KutipBagaimana untuk mengontrol ke-empat channel sekaligus?
Karena sudah saya coba menggunakan fungsi strncpy untuk pwm yg lain, namun hasil dari fungsi strncpy yang kedua dan seterusnya tidak terbaca.

scanf("%s",frompc);
strncpy(data1,&frompc[1],3);  // Pada contoh, mengambil angka 064
strncpy(data2,&frompc[4],3);  // mengambil angka 127
strncpy(data3,&frompc[7],3);  // mengambil angka 191
strncpy(data4,&frompc[10],3); // mengambil angka 255
pwm1=atoi(data1);           
pwm2=atoi(data2);
pwm3=atoi(data3);
pwm4=atoi(data4);
OCR0 = pwm1;               
OCR1A = pwm2;
OCR1B = pwm3;
OCR2 = pwm4;


Dari program saya tersebut, yang jalan hanya satu channel pwm saja, yaitu OCR2, yang lain tidak terbaca.
Bagaimana solusinya?
Coba data1 sampai data 4 dikirim lagi ke komputer..
Datanya sudah benar untuk setiap PWM atau tidak, Misal :

scanf("%s",frompc);
strncpy(data1,&frompc[1],3);  // Pada contoh, mengambil angka 064
strncpy(data2,&frompc[4],3);  // mengambil angka 127
strncpy(data3,&frompc[7],3);  // mengambil angka 191
strncpy(data4,&frompc[10],3); // mengambil angka 255
puts(data1);             pwm1=atoi(data1);         
puts(data2);             pwm2=atoi(data2);
puts(data3);             pwm3=atoi(data3);
puts(data4);             pwm4=atoi(data4);
OCR0 = pwm1;               
OCR1A = pwm2;
OCR1B = pwm3;
OCR2 = pwm4;

Jika sudah benar, mungkin belum dikeluarkan ke pin mikro..
Btw jangan lupa OCR0 dan OCR2 timer 8 bit tapi OCR1 timer 16 bit.

Smoga membantu..  ;)   ;)   :D
Judul: Re: [ask] Pengolahan String Komunikasi Serial Pada CodeVision
Ditulis oleh: cahcyber pada Juni 29, 2010, 11:30:48 AM
Kutip
Formatnya mepet juga.. XIxixixii....
Kalo aq biasanya dengan simbol+angka atau simbol+huruf atau huruf+angka

Contoh format : @64#127$191&255
memang nanti codingnya agak ribet (Sedikit) tp pemberian data PWM tidak perlu harus diberikan semuanya.
misalnya saya hanya ingin mengubah nilai PWM2 jadi 150 dan PWM 1,3,4 tetap jadi tinggal kirim
#150 dan tidak perlu P064150191255
Hehe, maklum mas masih belajar, jadi buat protokolnya masih bingung.
Contoh coding yang 'agak sedikit ribet' utk format @64#127$191&255 itu gimana mas?

KutipCoba data1 sampai data 4 dikirim lagi ke komputer..
Datanya sudah benar untuk setiap PWM atau tidak, Misal :

scanf("%s",frompc);
strncpy(data1,&frompc[1],3);  // Pada contoh, mengambil angka 064
strncpy(data2,&frompc[4],3);  // mengambil angka 127
strncpy(data3,&frompc[7],3);  // mengambil angka 191
strncpy(data4,&frompc[10],3); // mengambil angka 255
puts(data1);             pwm1=atoi(data1);        
puts(data2);             pwm2=atoi(data2);
puts(data3);             pwm3=atoi(data3);
puts(data4);             pwm4=atoi(data4);
OCR0 = pwm1;              
OCR1A = pwm2;
OCR1B = pwm3;
OCR2 = pwm4;
Code di atas sudah saya coba, dan hasilnya sebagai berikut :

data1 = "064127191255"
data2 = "127191255"
data3 = "191255"
data4 = "255"

hasilnya seperti di atas mas, jadi hasil fungsi strncpy yang di pakai berulang seperti menumpuk. Atau mungkin mas punya contoh untuk yang protokol format @64#127$191&255? hehe...

Kutip
Btw jangan lupa OCR0 dan OCR2 timer 8 bit tapi OCR1 timer 16 bit.
hehe, ini nih problem saya mas (masih belum paham tentang bit-bit timer), pengaruh di program nya nanti apa ya mas?

Solusinya gimana mas?

Terima kasih.