Rabu, 09 Juni 2010

Ask : Mengubah string angka menjadi nilai

.
Asker : CJDW dan Lufi
About :
Konversi tipe string (karakter angka) ke nilai (integer,float,char)
Question :
mas gimana cara membaca suatu nilai (smua tipe data baik integer, float, sting dll) dalam dunia USART.?? Kan kalau pake getchar kan fungsi yg cuma menerima sebuah karakter saja.
soalnya aku coba baca nilai 234 misal dari komuter pake USART yg kebaca '4' pake getchar.. gimana caranya? suwun nggih

Too PayZ:
Mikrokontroller AVR ATmega8535 atau uC 8 bit sejenisnya, memiliki buffer komunikasi data UART yaitu register yang bernama UDR. Register UDR ada 2 buah, masing-masing bernilai 8 bit / 1 byte yaitu 1 byte UDR buffer untuk menerima data dan 1 byte UDR buffer untuk mengirim data. Setiap terjadi penerimaan / pengiriman data satu huruf, angka, atau nilai, data ini disimpan di UDR penerima / pengirim. Karena UDR bernilai 1 byte sehingga hanya mampu menerima / mengirim 1 data pada 1 waktu.

Fungsi getchar() sebenarnya membaca data yang tersimpan pada buffer UDR sehingga hanya menerima 1 data ASCII pada satu waktu, oleh sebab itu dibutuhkan memori yang berfungsi sebagai buffer tambahan agar data ASCII yang terbaca satu-satu tersebut bisa diolah dan digabungkan menjadi 1 buah nilai.
Sehingga data '1', '2', '3', '4' akan menjadi 1234 (integer).

Sama seperti pertanyaan pada : Angka pd LCD lebih dari 1 digit
maka akan saya bahas dalam 1 postingan berikut :
Konversi Angka ASCII menjadi nilai

Semoga manfaat ;)

Sabtu, 05 Juni 2010

Ask : Angka pd LCD lebih dari 1 digit

.
Asker : Masyunan
About :
LCD lebih dari 1 digit.
Question :
mas mo tanya,tentang cara menulis LCD dengan keypad lebih dari 1 digit...thx...

Too PayZ:
Logika menampilkan digit angka dan huruf pada LCD hampir sama tetapi pengolahan di dalam mikronya berbeda. Jika huruf lebih mudah dan hanya mengatur posisi x dan y, bahkan dengan menggunakan perintah putsf dan menghitung banyaknya huruf (karakter) yang digunakan sudah dapat menampilkan huruf dengan posisi tertentu.

Untuk angka berbeda dan lebih rumit karena pengolahan terjadi 2 kali :
  1. Pada LCD yaitu pegaturan posisi x dan y, lebih rumit lagi jika bergeser kekiri atau kekanan setiap ada angka / digit baru yang ditampilkan.
  2. Pada Mikrokontroller yaitu mengubah angka yang diberikan (diinputkan) menjadi sebuah nilai untuk pengolahan aritmetika (matematika) yang akan diproses selanjutnya.
Ada juga yang bertanya pada : Mengubah string angka menjadi nilai
"mas gimana cara membaca suatu nilai (smua tipe data baik integer, float, sting dll) dalam dunia USART.?? Kan kalau pake getchar kan fungsi yg cuma menerima sebuah karakter saja.
soalnya aku coba baca nilai 234 misal dari komuter pake USART yg kebaca '4' pake getchar.. gimana caranya? suwun nggih"

Pertanyaan serupa tapi mirip ;)
Bedanya yang satu dapat input dari keypad kemudian di tampilkan di LCD.
Yang satu lagi dapat input dari komputer kemudian di tampilkan di LCD.

Yang dapat input dari komputer umumnya berupa string angka '1', '2', '3', '4', '5', dst sedangkan yang dapat input dari keypad bisa berupa string angka atau nilai heksadesimal tergantung programmernya.

Saran saya, semua data dikonversi menjadi string (data ASCII), meskipun menggunakan keypad. Data pada keypad tetap berupa string karena keypad selain angka juga suatu saat akan menanpilkan huruf.
Jadi anda bisa membuat fungsi scanning keypad seperti pada keypad HP (Handphone).
Ditekan 1x huruf 'A', 2x huruf 'B', 3x huruf 'C', dan 4x string '1', dst.

Silahkan baca posting ini untuk pertanyaan anda : Konversi Angka ASCII menjadi nilai

Semoga manfaat ;)

Rabu, 02 Juni 2010

Ask : Array dalam bahasa C

.
Asker : Haglan
About :
Array dalam bahasa C.
Question :
mw tanay nih arti program ini apa (int global_array2[]={1,2,3};) trus( int global_array2[]={1,2,3};) trus (char global_array4[]="This is a string";) tlng bantuannya

Too PayZ:
Mungkin pertanyaan Haglan diatas berkaitan dengan pertanyaan yang ini:
"bos mw tnya nih .... langkah2 merubah pdu ke teks gmna yah ?? secara program gmn yh mhn bantuannya ."

Saya sudah 3 kali mengerjakan perangkat berbasis SMS.
Perangkat pertama dan kedua menggunakan mode PDU dengan menggunakan bahasa Assembler mikrokontroller AT89S51, sedangkan perangkat ketiga menggunakan Modem SIM300 menggunakan mode TEXT dengan bahasa C AVR mikrokontroller ATmega8535.
Diantara mode TEXT dan mode PDU, mode PDU cukup sulit dan secara Coding lebih susah dipahami serta fleksibilitasnya kurang.

Saran saya, untuk aplikasi menggunakan SMS sebaiknya menggunakan perangkat yang telah mendukung mode TEXT. Perangkat anda bisa memiliki fleksibilitas tinggi dan selalu bisa di upgrade atau dikembangkan untuk aplikasi yang luas.

Pertanyaan int global_array2[]={1,2,3};) trus( int global_array2[]={1,2,3};) trus (char global_array4[]="This is a string"; salah satunya digunakan klo aplikasi SMS dengan mode PDU.
Pada aplikasi ini variabel global array ini digunakan sebagai RAM untuk menyimpan data yang akan berfungsi sebagai pembanding, yaitu membandingkan data yang akan dibaca pada PDU SMS dengan data yang kita inginkan (yang disimpan pada global_array).

Saya jelaskan untuk aplikasi secara umum saja ( saya rubah sedikit).
A => int global_array1[]={1,2,9};
B => signed int global_array2[]={-260,1,2,9,500};
C => unsigned char global_array3[]={'1','9','C','$','G'};
D => char global_array4[]="This is a string"

Contoh A
A => int global_array1[]={1,2,9};
Pada contoh A global variabel tipenya adalah int dengan nilai range 0-65535 (secara default int akan diubah menjadi unsigned int oleh CodeVisionAVR) oleh sebab itu selama nilai berada pada jangkauan 0-65535, tidak akan menghasilkan error pada program (Compiler mungkin tidak mengeluarkan pesan error).
Penulisan Array bisa seperti ini int global_array1[3]={1,2,9}; itu jika jumlah array diketahui (sedikit) yaitu 3 buah array, tetapi jika jumlah array banyak atau tidak diketahui (atau malas menghitungnya) dapat dituliskan seperti ini int global_array1[]={1,2,9}; selanjutnya nanti compiler yang urus.
Contoh A seolah-olah dituliskan seperti ini:
int global_array1[0]=1; //array selalu dimulai dari 0 (nol).
int global_array1[1]=2;
int global_array1[2]=9;

Contoh B
B => signed int global_array2[]={-260,1,2,9,500};
Pada contoh B global variabel tipenya adalah signed int dengan nilai range -32768 - 32767
(Penjelasan sama dengan contoh A).
Contoh B seolah-olah dituliskan seperti ini:
int global_array2[0]=-260; //array selalu dimulai dari 0 (nol).
int global_array2[1]=1;
int global_array2[2]=2;
int global_array2[3]=9;
int global_array2[4]=500;

Contoh C
C => unsigned char global_array3[]={'1','9','C','$','G'};
Pada contoh C global variabel tipenya adalah unsigned char dengan nilai range 0 - 255.
Karakter yang terdapat pada keyboard, text, LCD karakter, dll menggunakan ASCII dengan nilai range 0-255 sehingga tidak mungkin bernilai negatif.
(Penjelasan sama dengan contoh A).
Contoh C seolah-olah dituliskan seperti ini:
int global_array3[0]='1';
// ingat 1 tidak sama dengan '1'
//1 = 0x01 sedangkan '1' = 0x31; heksa desimal
//atau 1 = 1 sedangkan '1' = 49; desimal
int global_array3[1]='9';
int global_array3[2]='C';
int global_array3[3]='$';
int global_array3[4]='G';

Contoh D
D => char global_array4[]="This is a string"
Pada contoh D global variabel tipenya adalah char dengan nilai range 0 - 255 (secara default char akan diubah menjadi unsigned char oleh CodeVisionAVR).
Karakter yang terdapat pada keyboard, text, LCD karakter, dll menggunakan ASCII dengan nilai range 0-255 sehingga tidak mungkin bernilai negatif.
(Penjelasan sama dengan contoh A).
Contoh D seolah-olah dituliskan seperti ini:
int global_array4[0]='T';
int global_array4[1]='h';
int global_array4[2]='i';
int global_array4[3]='s';
int global_array4[4]=' '; // karakter spasi'
int global_array4[5]='i';
int global_array4[6]='s';
int global_array4[7]=' '; // karakter spasi
int global_array4[8]='a';
int global_array4[9]=' '; // karakter spasi
int global_array4[10]='s';
int global_array4[11]='t';
int global_array4[12]='r';
int global_array4[13]='i';
int global_array4[14]='n';
int global_array4[15]='g';

Selengkapnya baca Help CodeVisionAVR
Semoga manfaat ;)

Topik yang Populer