Selamat datang di ForSa! Forum diskusi seputar sains, teknologi dan pendidikan Indonesia.

Selamat datang, Pengunjung. Silahkan masuk atau mendaftar. Apakah anda lupa aktivasi email?

Februari 26, 2021, 03:18:42 AM

Masuk dengan nama pengguna, kata sandi dan lama sesi

Topik Baru

Artikel Sains

Anggota
Stats
  • Total Tulisan: 139620
  • Total Topik: 10383
  • Online Today: 37
  • Online Ever: 441
  • (Desember 18, 2011, 12:48:51 AM)
Pengguna Online
Users: 0
Guests: 39
Total: 39

Ikuti ForSa

ForSa on FB ForSa on Twitter

Penulis Topik: [ask] Pengolahan String Komunikasi Serial Pada CodeVision  (Dibaca 6731 kali)

0 Anggota dan 1 Pengunjung sedang melihat topik ini.

Offline cahcyber

  • Siswa Baru
  • *
  • Tulisan: 2
  • IQ: 1
[ask] Pengolahan String Komunikasi Serial Pada CodeVision
« pada: Juni 26, 2010, 09:35:37 AM »
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.
Kode: [Pilih]
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.
Kode: [Pilih]
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.
« Edit Terakhir: Juni 26, 2010, 09:41:56 AM oleh cahcyber »

Offline Too Payz

  • Dosen
  • ****
  • Tulisan: 260
  • IQ: 7
Re: [ask] Pengolahan String Komunikasi Serial Pada CodeVision
« Jawab #1 pada: Juni 29, 2010, 02: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..
Kutip
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.
Kode: [Pilih]
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 :
Kode: [Pilih]
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

Offline cahcyber

  • Siswa Baru
  • *
  • Tulisan: 2
  • IQ: 1
Re: [ask] Pengolahan String Komunikasi Serial Pada CodeVision
« Jawab #2 pada: Juni 30, 2010, 02: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?

Kutip
Coba data1 sampai data 4 dikirim lagi ke komputer..
Datanya sudah benar untuk setiap PWM atau tidak, Misal :
Kode: [Pilih]
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 :
Kode: [Pilih]
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.
« Edit Terakhir: Juni 30, 2010, 02:34:05 AM oleh cahcyber »

 

Related Topics

  Subyek / Dimulai oleh Jawaban Tulisan terakhir
2 Jawaban
6737 Dilihat
Tulisan terakhir Juli 29, 2009, 10:03:37 AM
oleh Too Payz
45 Jawaban
30684 Dilihat
Tulisan terakhir Oktober 07, 2010, 01:03:52 AM
oleh elisds.sbr
3 Jawaban
4762 Dilihat
Tulisan terakhir April 23, 2010, 05:18:45 AM
oleh kuin
6 Jawaban
4673 Dilihat
Tulisan terakhir Juli 03, 2010, 10:27:28 PM
oleh 0y1k
0 Jawaban
3071 Dilihat
Tulisan terakhir Desember 08, 2010, 02:37:09 AM
oleh gus muj