Ajarin komunikasi serial dari dasar donk..... bingung nih.
pertama dari USART. beda nya Async sama yg Sync apa ya???
Asyncronous itu tuh brarti gak sinkron (kan ada A nya), klo yang syncronous artinya sinkro
Async === ga sinkron, brarti sumber clocknya beda (misal komunikasi PC ke mikrokon, PC punya clock sendiri dan mikrokontroller punya sumber clock sendiri
Syncron=== sinkron, brarti sumber clocknya satu, sumber clock itu dipake sama2 (oleh dua peripheral atau lebih)
mau tau lebiiih lengkap coba googling :) :), lagi banyak kerjaan
biasanya too payz langsung nyahut...:) mana nieh
trus baud rate tuh apaan ya?? itu asal sama antara mikro - PC nya uda jalan, ato ada cara ngitungnya harus pake yg brp??
dah gt ada parameter nya, 8 Data 2 Stop No Par. artinya apa ya???
terakhir, RXB RXC RXD apaan ya?
baud rate = laju pengiriman data, biasanya dinyatakan dalam bps (bit per second)
harus sama antara PC sama micro nya
2 stop --> pake 2 stop bit (stop bit --> sinyal logic 1)
no par --> no parity --> parity-nya ga di-chek
parity ada paritas genap (even parity) dan paritas ganjil (odd parity)
paritas genap --> jumlah bit 1 dalam 1 byte harus genap; parity buat ng-chek integrity data tiap byte
Rx biasanya diasosiakan dengan receiver pin
-----
mana too pay, biasanya smangat dia kalo ngejelasin :D
tupai lagi sibuk mungkin hahhaha
jadi parity itu fungsi nya apa? klo d operasional nya, bedanya pake parity sama engga dmn? stop juga gmn?
thx ksatria.
alow....
Kutip dari: frans3q pada Agustus 04, 2009, 10:18:47 PM
...
jadi parity itu fungsi nya apa? klo d operasional nya, bedanya pake parity sama engga dmn?
...
Kutip dari: ksatriabajuhitam pada Agustus 04, 2009, 08:07:49 PM
...
parity buat ng-chek integrity data tiap byte
...
buat ng-check apakah byte nya corrupt apa engga
kebanyakan untuk aplikasi mikrokontroller (sejauh yg saya alami) biasanya di-disable (dianggap ga ada error)
tapi kalo udah ke level product yg mass production, biasanya diaktifkan
misal di SIM card handphone, parity di-check, kalo ketauan error (misal pake parity genap, tapi dalam 1 byte bit 1 nya ternyata ganjil), maka si SIM card harus ngirim byte lagi
Kutip dari: frans3q pada Agustus 04, 2009, 10:18:47 PM
...
stop juga gmn?
...
tujuan stop bit itu pertama untuk mengembalikan kondisi sinyal ke idle state (biasanya 1), kedua untuk memberi kesempatan buat penerima untuk mengolah data
jadi kalo cuma dikasih 1 stop bit, maka kemungkinan terburuk bagi penerima ialah harus siap menerima data selanjutnya dalam selang waktu 1 bit itu,
kalo 2 bit ya berarti penerima agak leluasa
p.s.: SIM card memakai 2 stop bit
jadi klo stop bit tuh d sesusaikan sama fungsi & program uC nya ya.
trus klo clock uC ada pengaruh sama baud rate ga?
oya bole minta conto source buat 8535 ga buat ngirim data dari PC k mikro.
simple aja, misal teken spasi trus LED d port C nyala misalnya. klo bisa pake C (CV AVR dsb)
yg harus d inisiasi apa aja?
thx b4.
saya coba buat tp blm di coba buat silahkan dicoba...
bagian if nya di isi kenginan.,misal jika huruf a di tekan maka led pada PORTC berubah., ;D
#include <mega8535.h>
#include <stdio.h>
#include <delay.h>
// Declare your global variables here
//unsigned char datax[8],i;
unsigned char datarx;
void kirim_serial(unsigned char datatx)
{
//UART data register empty, Until UDRE = 1
UDR=datatx; //Serial buffer content
while(!UCSRA.6); //Until TXC = 1
UCSRA.6 = 1; //Reset TXC with 1
}
void terima_serial()
{
//while(!UCSRA.5); //UART data register empty, Until UDRE = 1
while(!UCSRA.7); //Until RXC = 1
datarx=UDR;
//datax = datarx; //Serial buffer content
delay_ms(2);
UCSRA.7 = 1; //Reset RXC with 1
}
void main(void)
{
PORTA=0x00;
DDRA=0x00;
PORTB=0x00;
DDRB=0x00;
PORTC=0x00;
DDRC=0x00;
PORTD=0x00;
DDRD=0x00;
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
MCUCR=0x00;
MCUCSR=0x00;
TIMSK=0x00;
// USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: On
// USART Transmitter: On
// USART Mode: Asynchronous
// USART Baud rate: 9600
UCSRA=0x00;
UCSRB=0x18;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x47;
ACSR=0x80;
SFIOR=0x00;
while (1)
{
// Place your code here
terima_serial();
if (datarx=di isi dengan yang diinginkan)
{PORTC=di isi dengan keinginan}
else
{PORTC=di isi dengan keinginan}
kirim_serial(datarx);
//kirim_serial(datax);
};
}
kirim_serial(datarx);
gunanya apa ya??
Wew... saya d kata"in.... :D
Mo liat dulu comment-comment yang lain baru nyahut... ;)
Lagian emang sibuk nih, alat udah jadi 2 n tinggal satu nih yang sulit, lama n mahal
Waah kalo mo pelajari komunikasi serial g bakal cukup nih tempat.
Baca aj Link ini :
[pranala luar disembunyikan, sila masuk atau daftar.][pranala luar disembunyikan, sila masuk atau daftar.]Kutip
Async === ga sinkron, brarti sumber clocknya beda (misal komunikasi PC ke mikrokon, PC punya clock sendiri dan mikrokontroller punya sumber clock sendiri
Syncron=== sinkron, brarti sumber clocknya satu, sumber clock itu dipake sama2 (oleh dua peripheral atau lebih)
Pada Asinkron (tidak sinkron) antar perangkat yang berkomunikasi punya clock sendiri-sendiri tetapi clocknya harus sama (satuannya kbps) agar komunikasi tidak error.
contoh : serial RS232, RS423, RS485, USB port, mikro-mikro, dll.
Jika mikro komunikasi dgn perangkat lain maka harus mengikuti standard kecepatan (kbps) perangkat tersebut, misalnya komputer memiliki baudrate standar ......,1200,2400,4800,9600,19200,38400,....
Tetapi jika komunikasi USART antar mikro, anda bisa membuat kbps dengan nilai terserah anda, asal kbps kedua mikro sama, misal .....,1250,2500,4555,....
Pada sinkron clock-nya hanya satu dan digunakan bersamaan, biasanya dengan sistem master slave dan umumnya pembangkit clock-nya ditentukan oleh master-nya. Konfigurasi koneksi juga umumnya SDA (serial data) atau SDI+SDO (serial data input + serial data output) dan SCK(serial clock).
contoh : SPI, TWI, I2C, PS2 (keyboard), dll.
Hal yang perlu diketahui pada serial sinkron adalah perangkat dengan clock (frekuensi) tinggi harus mengikuti clock perangkat yang lebih kecil, karena jika tidak maka komunikasi tidak terjadi.
Misal : komunikasi dengan antar mikro secara TWI, mikro master Xtal-nya 12 MHz sedangkan mikro slave 4 MHz maka clock pada SCK Master harus lebih lambat minimal 3x agar Slave bisa mengikuti komunikasi datanya.
Kutip
jadi parity itu fungsi nya apa? klo d operasional nya, bedanya pake parity sama engga dmn? stop juga gmn?
Parity berfungsi untuk mengecek "banyaknya logika 1" sebagai pengecekan error data, apakah berjumlah ganjil atau genap dan parity berfungsi menggenapkan (even) atau mengganjilkan (odd), tergantung pilihannya antar lain : even parity, odd parity, mark parity, space parity dan no parity. (yg mark n space tidak pernah dipakai).
Misal :
Even parity dan data 01010101 => logika 1-nya ada 4 maka parity = 0
Even parity dan data 01010111 => logika 1-nya ada 5 maka parity = 1
Odd parity kebalikannya..
Kalau terdeteksi error gimana ?? nah itu dia masalahnya tergantung metode anda dan umumnya yaitu dengan mengirimkan data yang "tadi".
Kalau tidak ada metode pengecekan error maka tidak menggunakan parity tidak masalah, malah bisa lebih menghemat bandwidth.
Dah.. nyahut neh... gmana ? ;D ;D
Kutip dari: micro pada Agustus 06, 2009, 06:50:14 AM
#include <mega8535.h>
#include <stdio.h>
#include <delay.h>
// Declare your global variables here
//unsigned char datax[8],i;
unsigned char datarx;
void kirim_serial(unsigned char datatx)
{
//UART data register empty, Until UDRE = 1
UDR=datatx; //Serial buffer content
while(!UCSRA.6); //Until TXC = 1
UCSRA.6 = 1; //Reset TXC with 1
}
void terima_serial()
{
//while(!UCSRA.5); //UART data register empty, Until UDRE = 1
while(!UCSRA.7); //Until RXC = 1
datarx=UDR;
//datax = datarx; //Serial buffer content
delay_ms(2);
UCSRA.7 = 1; //Reset RXC with 1
}
Saya binggun nih ??? ???
kan sudah menggunakan library
stdio.h trus kok masih membuat fungsi
kirim_serial dan
terima_serial,,.. ??
Saran saya untuk CoViAVR aktifkan USART dgn CodeWizzardAVR.
fungsi mengirim karakter dengan misal : putchar('T');
fungsi mengirim kata / kalimat dengan misal : putsf("Too PayZ"); atau printf("Ganteng");
fungsi menerima karakter dengan misal : datarx = getchar();
nah kalo di main programnya jadinya :
#include <delay.h> //tambahkan fungsi delay
void main(
void)
{
...........
DDRC = 0xff; //PORTC jadi output
PORTC = 0x00; //led nyala saat diberi logika 1.
while(1)
{
datarx = getchar();
if (datarx=='A') { PORTC.0=1; delay_ms(1000);} // led PORTC.0 nyala 1 detik
else if (datarx=='B') { PORTC.1=1; delay_ms(1000);} // led PORTC.1 nyala 1 detik
else if (datarx=='C') { PORTC.2=1; delay_ms(1000);} // led PORTC.2 nyala 1 detik
PORTC=0x00;
}
}
until UDRE gunanya apa ya?? btw UDRE tuh register buat apaan ya??
oya, klo program buat UART TTL ma UART RS232 sama ga sih? inisiasi nya gmn?
USART TTL, RS232, dan RS485, sama yg berbeda level tegangannya dan konfigurasi kabel.
nanya lagi :
1. until UDRE guna nya apa ya???
2. program nya toopayz kalau saya teken tombol keyboard terus2an ntar uC ny ga mau ngrespon lagi knp ya? kayak yg ng hang gt.
too payz :
gw coba balik, jadi kondisi nya 0x00 semua LED nyala. klo 1 mati. koq LED nya kedip2 gt ya?
kayak yg ngrefresh terus. dan response ny lambat banget.
while (1)
{
// Place your code here
datarx = getchar();
if (datarx=='a') { PORTA.4=1; PORTA.5=0; PORTA.6=1; PORTA.7=0; delay_ms(1000); PORTA = 0x00;}
else if (datarx=='s') { PORTA.4=0; PORTA.5=1; PORTA.6=1; PORTA.7=0; delay_ms(1000); PORTA = 0x00; }
else if (datarx=='d') { PORTA.4=0; PORTA.5=1; PORTA.6=0; PORTA.7=1; delay_ms(1000); PORTA = 0x00;}
else if (datarx=='w') { PORTA.4=1; PORTA.5=0; PORTA.6=0; PORTA.7=1; delay_ms(1000); PORTA = 0x00;}
datarx ='';
};
Kutip dari: frans3q pada Agustus 08, 2009, 05:25:22 PM
too payz :
gw coba balik, jadi kondisi nya 0x00 semua LED nyala. klo 1 mati. koq LED nya kedip2 gt ya?
Kedap-kedipnya berapa lama? tiap 1 detik ? ???
Kalo tiap 1 detik ya memang benar kan ada delaynya 1 detik trus abis 1 detik LED dimatikan lagi. Jika mau LED menyala hanya saat tombol ditekan (ada karater-nya) kemudian jika tombol dilepas barulah LED mati, cukup dengan mengurangi delaynya misalnya
delay_ms(100); dan tambahkan
fugsi jika bukan 'a', 's', 'd', 'w' barulah LED d matikan. yaitu tinggal tambahkan
else PORTA=0x00; // jika Katoda LED ke ground (common katode) atau
else PORTA=0xff; // jika Anoda LED ke VCC (common anode).
Btw jgn lupa
PORTA=0x00 dalam
if-nya ilangin dan harus tau konfigurasi LED-nya
common anoda atau
common katoda.
Kutip dari: micro pada Agustus 06, 2009, 06:50:14 AM
saya coba buat tp blm di coba buat silahkan dicoba...
bagian if nya di isi kenginan.,misal jika huruf a di tekan maka led pada PORTC berubah., ;D
#include <mega8535.h>
#include <stdio.h>
#include <delay.h>
// Declare your global variables here
//unsigned char datax[8],i;
unsigned char datarx;
void kirim_serial(unsigned char datatx)
{
//UART data register empty, Until UDRE = 1
UDR=datatx; //Serial buffer content
while(!UCSRA.6); //Until TXC = 1
UCSRA.6 = 1; //Reset TXC with 1
}
void terima_serial()
{
//while(!UCSRA.5); //UART data register empty, Until UDRE = 1
while(!UCSRA.7); //Until RXC = 1
datarx=UDR;
//datax = datarx; //Serial buffer content
delay_ms(2);
UCSRA.7 = 1; //Reset RXC with 1
}
void main(void)
{
PORTA=0x00;
DDRA=0x00;
PORTB=0x00;
DDRB=0x00;
PORTC=0x00;
DDRC=0x00;
PORTD=0x00;
DDRD=0x00;
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
MCUCR=0x00;
MCUCSR=0x00;
TIMSK=0x00;
// USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: On
// USART Transmitter: On
// USART Mode: Asynchronous
// USART Baud rate: 9600
UCSRA=0x00;
UCSRB=0x18;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x47;
ACSR=0x80;
SFIOR=0x00;
while (1)
{
// Place your code here
terima_serial();
if (datarx=di isi dengan yang diinginkan)
{PORTC=di isi dengan keinginan}
else
{PORTC=di isi dengan keinginan}
kirim_serial(datarx);
//kirim_serial(datax);
};
}
sama sekali ga k terima datanya. LED nya gw taro d PORT A. kondisi nyala nya 0. kondisi mati nya 1.
gw uda set PORT A jd output. inisiasi nya PORTA = 0x00; DDRA = 0xFF;
ini while (1) nya :
terima_serial();
if (datarx== 0x77) //key w
{PORTA = 0x0A;}
else if (datarx== 0x64) // key d
{PORTA= 0x05;}
else
{PORTA = 0x00;}
yg ada semua LED nya nyala sambil blink ing cepet.
harus ny saat gw teken tombol keyboard ada bbrpa LED yg mati.
@tupai :
blink ny cepet banget.
dah gt jd ga respon sama input.
kayak ny dia ngulang2 mati in LED sama ngidupin LED terus2an, jd ga bisa nerima input.
ga ngerti common anoda ato common katoda.
inti nya klo Low Nyala klo High Mati. jadi klo 0x00 nyala semua. klo 0xFF mati semua LED nya.
gw isi program ny :
if (datarx=='a') { PORTA.4=1; PORTA.5=0; PORTA.6=1; PORTA.7=0; delay_ms(1000); PORTA = 0x00;}
else if (datarx=='s') { PORTA.4=0; PORTA.5=1; PORTA.6=1; PORTA.7=0; delay_ms(1000); PORTA = 0x00; }
else if (datarx=='d') { PORTA.4=0; PORTA.5=1; PORTA.6=0; PORTA.7=1; delay_ms(1000); PORTA = 0x00;}
else if (datarx=='w') { PORTA.4=1; PORTA.5=0; PORTA.6=0; PORTA.7=1; delay_ms(1000); PORTA = 0x00;}
datarx ='';
kalo bole sekalian minta list perintah2 yg bisa d pakai di CV AVR buat ngirim/terima data ke Terminal.
Hmm..... :-\ :-\
Blinknya cepet banget yaa.... aneh.. aneh...
Ini pake programmer serial AVR910 yang USB itu yaa...
Pake power supply atau supply minta dari USB.
Kalo minta dari USB wajar saja dia blink-nya cepet karena supply dari USB hanya untuk mendownload saja n g cukup tuk digunakan menyalakan LED yg banyak (8 LED).
Itu nge-blink karena sistem baru menyala sebentar trus mati lagi (mirkonya reset).
Kalo masalah perintah-perintah, coba baca Library dan HELP-nya CoViAVR dengan seksama dan searching dari internet... tar ilmunya lebih banyak dari yang diharapkan :kribo: :kribo:
Met berusaha aja.. ;) ;)
gw tambah bingung.... AVR910 kan programer. klo uda beres ngprogram uC,
AVR910 nya d cabut. dah gt baru colok LED nya.
jd apa hubungan ny LED ama USB??? 2 alat itu ga pernah terhubung k uC bersamaan.
gw jg dari awal cari sana sini. google sana sini. posting sana posting sini.
gw uda baca. tapi ga ngerti baca help ny CV AVR. gw tanya d sini aja ya.
1.
misal ny yg putchar.
kan klo toopayz ngasi contoh nya : putchar(data_rx); --> prosedur
klo data_rx = getchar(); --> function
nah klo
void putchar (char c); ----> ini apaan?
knp d dpn ny pake void??? dan knp parameter ny aneh gitu??? klo data_rx kan bisa d definisi in dulu sbg unsigned char misalnya.
2. void putsf(char flash*str);
arti nya char flash*str tuh apa ya?
3. penjelasan ny bilang : output using putchar the null terminated character string str, located in FLASH.
klo yg void puts(char*str) d bilangnya located in SRAM.
bedanya located in FLASH & SRAM dalam penggunaannya gmn? apa yg d SRAM perlu perintah dulu biar k kirim?
tq too payz
Kutip
gw tambah bingung.... AVR910 kan programer. klo uda beres ngprogram uC,
AVR910 nya d cabut. dah gt baru colok LED nya.
jd apa hubungan ny LED ama USB??? 2 alat itu ga pernah terhubung k uC bersamaan.
Ow kirain bersamaan, karena umumnya kalo masih coba" program, downloader USB-nya g d cabut.
Kutip
kan klo toopayz ngasi contoh nya : putchar(data_rx); --> prosedur
putchar(
data_tx);
Kutip
nah klo
void putchar (char c); ----> ini apaan?
knp d dpn ny pake void??? dan knp parameter ny aneh gitu??? klo data_rx kan bisa d definisi in dulu sbg unsigned char misalnya.
Micro membuat fungsi sendiri dengan nama
putchar dan tidak ada
return value makanya parameternya
void (hampa / kosong).
Parameter terserah programmernya selama dia memahami program-nya tersebut. Tetapi usahakan sesederhana mungkin, sesuai, dan tepat dengan kebutuhan.
Kutip
2. void putsf(char flash*str);
arti nya char flash*str tuh apa ya?
3. penjelasan ny bilang : output using putchar the null terminated character string str, located in FLASH.
Artinya tipe data
char dengan nama variabel
str dan disimpan
flash memori mikrokontroler. Kalo
* saya kurang paham tetapi seperti
array yang fleksibel banyaknya tergantung nilai
str-nya hingga menemukan nilai
null. Jika tidak terdapat data (
null) pada
str-nya maka akhir data
str dan fungsi
putsf() selesai, kalo dalam bahasa C seperti menulis
if (str[*)==null) break; (nb : harusnya kurung tutup kotak tapi g bisa.)
Misal ditulis putsf("test USART");
nah *str nilainya yaitu
str[0]='t', str[1]='e', str[2]='s', str[3]='t', str[4]=' ',
str[5]='U', str[6]='S', str[7]='A', str[8]='R', dan str[9]='T'.
Kutip
klo yg void puts(char*str) d bilangnya located in SRAM.
bedanya located in FLASH & SRAM dalam penggunaannya gmn? apa yg d SRAM perlu perintah dulu biar k kirim?
Bedanya apa yaa?? lom pelajari sih.. ???
Tapi ini sebagai informasi ke programmer saja dan kita hanya perlu tahu cara menggunakannya saja dulu. Kalau mau lebih jauh lagi ... ??
Hmmm...... :-\ :-\
Btw kalo tau kabarin yak. ;D
Oiya program yang kutulis ud kucoba n g masalah tuh..
berarti masalah nya. d uC gw.... T.T
tq Too Payz. skr uC gw ngadat lagi. mo d erase dulu pake STK 500. ntar gw coba lagi.
nanya lagi :
1. klo yg dikim dari HyperTerminal tuh berupa apa sih?
misal ny teken tombol keyboard 1, LED 1 nyala. tombol angka 2 LED 2 nyala.
nantinya tetep d perlakuin sbagai char ato sbagai angka d program nya?
if (datarx=='1') atau
if (datarx==1)
2. trus gmn cara nya klo qt pe ngen ngirim byte dari PC k uC. misal ny pengen ngirim 0000 1111
hex ny 0x0F. cara ngirim ny gmn ya?
Kutip
nanya lagi :
1. klo yg dikim dari HyperTerminal tuh berupa apa sih?
berupa ASCII coba search tentang ASCII.
Kutip
misal ny teken tombol keyboard 1, LED 1 nyala. tombol angka 2 LED 2 nyala.
nantinya tetep d perlakuin sbagai char ato sbagai angka d program nya?
if (datarx=='1') atau
if (datarx==1)
sebagai ASCII karena tombol keyboard nilainya adalah ASCII maka karakter '1' = 0x31 heksadesimal sedangkan nilai 1 = 0x01 heksadesimal.
Kutip
2. trus gmn cara nya klo qt pe ngen ngirim byte dari PC k uC. misal ny pengen ngirim 0000 1111
hex ny 0x0F. cara ngirim ny gmn ya?
Bisa saja anda kirim nilai 0x0F tersebut tetapi programmingnya (dengan DELPHI, Visual C, BASIC, dll) akan sedikit membingungkan.
Agar program anda
fleksibel dan bisa d pahami anda ataupun orang lain (misalkan ada yg mo ngembangin nantinya) usahakan komunikasi data dengan komputer berupa
ASCII juga
Jadi kalo datanya 0000 1111 dan anda membutuhkan kedua data tersebut terpisah maka konfersi dulu ke ASCII yaitu dibagi menjadi 2 kali pengiriman pengiriman pertama
nible atas kemudian
nible bawah.
Nible atas 0000 = dikonversi jadi '0' = 0x30;
Nible bawah 1111 = dikonversi jadi 'F' = 0x46;
OK... ;D ;D
1. i see. klo ASCII gw ngrti.
2. mksd ny gini. misal ny buat driver motor dc. misal ada 2 motor DC kiri ama kanan.
00 = stop; 01 = CW; 10 = CCW;
berarti perlu 4bit kan? (1motor 2bit, x2 motor).
misal ny mo bikin RC sederhana. jadi perintah dari PC --> uC --> Motor DC.
dari pada bikin program d mikro pake if() ato pake switch() trus d masuk in bnyk2 k FLASH uC, lebih efisien kalo dari PC nya ngirim data byte format 4bit kan? ntar tinggal d atur 4bit nya jdi MSB ato LSB d PORT X.
Kutip
2. mksd ny gini. misal ny buat driver motor dc. misal ada 2 motor DC kiri ama kanan.
00 = stop; 01 = CW; 10 = CCW;
berarti perlu 4bit kan? (1motor 2bit, x2 motor).
misal ny mo bikin RC sederhana. jadi perintah dari PC --> uC --> Motor DC.
dari pada bikin program d mikro pake if() ato pake switch() trus d masuk in bnyk2 k FLASH uC, lebih efisien kalo dari PC nya ngirim data byte format 4bit kan? ntar tinggal d atur 4bit nya jdi MSB ato LSB d PORT X.
Nah terus kira-kira gmana codingnya...
:-\ :-\
nah itu yg bikin gw bingung. ???
klo d uC ny tinggal PORTX = Datarx;
balik lagi k sample program yg buat ngatur LED dari keyboard PC.
gw masi stuck sampe skr. too payz, source code lengkap ny bole d share d sini? katanya uda berhasil ya?
gw bingung LED ny blink cepet banget. mirip klo jalan in perintah gini :
while (1) {PORTA =0x00; PORTA = 0xFF}
krn ga ada delay jadi ny blink cepet.
dan ga mau nerima perintah dari keyboard.
gw coba jalan in pake ext XTAL High Freq. d set nya jalan di 11MHz. ngaruh ga ya?
hyper terminal ny uda d cek baud rate, parity dll. mode di board AVR ny juga uda d set UART RS232, bukan yg TTL.
Ya udah coba secara bertahap g usa buru".
Kutip
gw bingung LED ny blink cepet banget. mirip klo jalan in perintah gini :
while (1) {PORTA =0x00; PORTA = 0xFF}
krn ga ada delay jadi ny blink cepet.
Kalo nyalain LED tiap 1 detik udah bisa kan.
Kutip
hyper terminal ny uda d cek baud rate, parity dll. mode di board AVR ny juga uda d set UART RS232, bukan yg TTL.
Coba buat program terima dan kirim kembali, siapa tau tidak terjadi komunikasi data.
MIsal keyboard ditekan 'A' diterima mikro trus mikro balasnya 'A'+1 atau = 'B'.
Jika dikomputer ada tampilan balasan berarti komunikasi terjadi. Harusnya udah g salah lg tuh.
test 1 => coba LED on off 1 detik
test 2 => komunikasi serial
while(1)
{
dataRX = getchar();
putchar(dataRX+1);
}
test 3 => penggabungan
while(1)
{
dataRX = getchar();
PORTB = dataRX; // posisi PORT LED
}
nanya lagi nih,
1. nemu istilah aneh.
DCD - Data Carrier Detect
DSR - Data Set Ready
DTR - Data Terminal Ready
RTS - Request to Send
CTS - Clear To Send
ada yg tau arti ny apa?
2. ada yg tau cara pake putsf(). puts() dan printf() buat ngirim data pake UART? gw coba gagal semua, yg berhasil cuma pake putchar();
@Too Payz
gw coba bikin program isi nya cuma :
datarx = terima();
putchar(datarx);
delay_ms(50);
harus nya apa yg d ketik dari keyboard d kirim ulang kan? tapi itu ga ke kirim apa2. gmn caranya ngecek kalo data yg d kirim dari PC uda k terima sama uC nya ya?
@Too Payz
gw uda coba klo skedar I/O pake LED doank ga ada masalah. I/O pake push button switch jg uda lancar.
kirim data serial dah bisa.
mintal source code lengkap nya donk... post d sini aja. biar gw bisa cek bedanya dmn.
ini code yg gw. bener2 polos tapi gagal ga ngirim apa2.
Sorry but you are not allowed to view spoiler contents.
sebenernya kirim data serial jg masi belom bener, wkt tu nyoba ngirim karakter 'a' doank dari uC k PC gagal mulu ternyata Clock nya, begitu gw turunin dari 11MHz jadi 4Mhz ga ada masalah sama sekali. mungkin ttg clock internal - external d bahas ntar lagi.
@Frans3q :
Yang saya jelaskan posting sebelumnya itu sudah mendasar dan sudah menjawab semua pertanyaannya.
Ditambah lagi penjelasan dari
Micro, tinggal ditambahkan dan disisipkan sudah bisa seharusnya.
Tapi saya bingung kok masih blum bisa ? ???
Kutip
sebenernya kirim data serial jg masi belom bener, wkt tu nyoba ngirim karakter 'a' doank dari uC k PC gagal mulu ternyata Clock nya, begitu gw turunin dari 11MHz jadi 4Mhz ga ada masalah sama sekali. mungkin ttg clock internal - external d bahas ntar lagi.
Kalo menggunakan kabel PC ke uC aj gagal gmana yg lainnya ? ???
Ini harus 100% tidak gagal baru bisa lanjut.
Clock-nya kok d ganti-ganti dari 11MHz ke 4MHz tanpa alasan,..?? ???
Lihat komponen
XTALL di boardnya berapa nilainya, itulah nilai Clocknya.
Jadi g bisa
trial n error.
Clock pada mikronya tidak masalah hingga 16MHz pun g masalah tinggal CodeVisionAVR-nya saja yang menyesuaikan dengan hardwarenya (
XTALL-nya).
Saya rasa Frans3q terlalu terburu-buru,..
Coba cari buku-buku tentang AVR bahasa C dengan CoViAVR.
Hardware, SOftware, Konfigurasi CodeWizzarAVR, pembacaan cara penggunaan library, penulisan C, tipe data, dst.
Kalo dasarnya paham dan kuat, aplikasi apapun akan cepat selesai..
SLAM itu tidak mudah tetapi tidak susah.
;) ;) ;)
thx Too Payz,(bonus BRP hahaha).
justru krena itu saya bingung. setelah baca2 dari buku, dari forum, tapi begitu praktek gagal. Tolong donk liatin source code yg sy lampirin d spoiler. apa yg salah dari source code nya. isi programnya sesuai kata Too Payz, cuma
while (1)
{
// Place your code here
dt = getchar();
putchar(dt);
};
tapi sama sekali ga k kirim balik k PC. saya uda coba tambah delay, sama aja. tetep ga k kirim.
kalau cuma putchar('a'); bisa k kirim k PC.
KutipKalo menggunakan kabel PC ke uC aj gagal gmana yg lainnya ?
Ini harus 100% tidak gagal baru bisa lanjut.
sbnernya ga buru2. tapi uda 1mggu lebih sy stuck d masalah ini, jd pengen cepet2 beres in masalah Transmit UART ini. soal ny masi bnyk hal lain ttg UART yg belum sy pelajari.
pertanyaan lain yg pending :
1. nemu istilah aneh.
DCD - Data Carrier Detect
DSR - Data Set Ready
DTR - Data Terminal Ready
RTS - Request to Send
CTS - Clear To Send
ada yg tau arti ny apa? RTS CTS ada d komunikasi wireless 802.11, tapi apa UART pake RS232 juga ngirim RTS/CTS ini?
2. ada yg tau cara pake putsf(). puts() dan printf() buat ngirim data pake UART? gw coba gagal semua, yg berhasil cuma pake putchar();
numpang nanyanih...
rs485???? gimanaya... cr pakenya... sy coba pke atmega128 buat ngontrol servo dinamixel ax-12 tp blm ngertinih >:(
numpang nanyanih...
rs485???? gimanaya... cr pakenya... sy coba pke atmega128 buat ngontrol servo dynamixel ax-12 tp blm ngertinih >:(
saya jg mo nanya lagi.
misal ny saya ngprogram uC buat menyalakan LED selama 2 detik jika angka 2 di keyboard ditekan.
saya buat program ny spt ini :
x = getchar();
if (x=='2') {PORTA.1 = 1; delay_ms(2000);}
tapi jika saya menekan 2x tombol keyboard secara cepat, maka terjadi queuing. hasil nya LED menyala 4 detik.
bagaimana caranya agar tidak terjadi antrian? jadi jika ada data UART terkirim saat mikrokontroler belum beres memproses yg sebelumnya, maka data tsb d hilangkan. sehingga tidak terjadi penumpukan.
apakah ada port pada AT Mega 8535 yang mengindikasikan apakah mikrokontroler dalam keadaan "Busy" atau tidak?
alow help donk.....
aow.... help donk... ada yg bisa ngasi ide?
Kutip dari: frans3q pada Agustus 27, 2009, 06:07:00 PM
saya jg mo nanya lagi.
misal ny saya ngprogram uC buat menyalakan LED selama 2 detik jika angka 2 di keyboard ditekan.
saya buat program ny spt ini :
x = getchar();
if (x=='2') {PORTA.1 = 1; delay_ms(2000);}
tapi jika saya menekan 2x tombol keyboard secara cepat, maka terjadi queuing. hasil nya LED menyala 4 detik.
bagaimana caranya agar tidak terjadi antrian? jadi jika ada data UART terkirim saat mikrokontroler belum beres memproses yg sebelumnya, maka data tsb d hilangkan. sehingga tidak terjadi penumpukan.
apakah ada port pada AT Mega 8535 yang mengindikasikan apakah mikrokontroler dalam keadaan "Busy" atau tidak?
Pake buffer dong ^^'
Kutip dari: arlan_hack pada Agustus 24, 2009, 09:42:52 PM
rs485???? gimanaya... cr pakenya... sy coba pke atmega128 buat ngontrol servo dynamixel ax-12 tp blm ngertinih >:(
rs485 itu jalur kirim-terima-nya hanya di laksanakan lewat 1 kabel,dengan misal IC MAX485,anda bisa pertama kirim data dulu... setelah itu ganti state MAX485 ke listen .. cari aza datasheet max485.. serial datanya (.. konfigurasi baudrate).. sama dengan serial biasa.. hanya dalam protokol RS485 biasanya ditambahkan field ID.. sehingga kita bisa berkomunikasi dengan device2 tertentu
Kutip dari: frans3q pada Agustus 27, 2009, 06:07:00 PM
x = getchar();
if (x=='2') {PORTA.1 = 1; delay_ms(2000);}
tapi jika saya menekan 2x tombol keyboard secara cepat, maka terjadi queuing. hasil nya LED menyala 4 detik.
bagaimana caranya agar tidak terjadi antrian? jadi jika ada data UART terkirim saat mikrokontroler belum beres memproses yg sebelumnya, maka data tsb d hilangkan. sehingga tidak terjadi penumpukan.
apakah ada port pada AT Mega 8535 yang mengindikasikan apakah mikrokontroler dalam keadaan "Busy" atau tidak?
pertanyaan dulu he :D PORTA.1 = 1 ... kapan 0-nya ?
Kutip dari: frans3q pada Agustus 06, 2009, 09:53:02 PM
until UDRE gunanya apa ya?? btw UDRE tuh register buat apaan ya??
baca datasheet mikro aja pasti ada plus potongan programnya juga ada.
saya mau nanya bagaimana caranya membuat komunikasi serial pake interupt
jadi kalo si mikro lagi nerima data..maka mikro akan memprioritaskan membaca data dari transmiternya
harapannya agar program mikro ga perlu memasukkan sintaks semacam getchar..
gak ada yang pakai interup ya? padahal kan lebih mudah dan bisa jalanin program lain selagi menunggu data dari serial diterima.
kalo pakai
getchat();
program jadinya nunggu and berhenti ditempat menunggu kiriman...dari siapa ya?
coba too payz....kamu kan jago....sebagai anak bangsa harus bisa dong.....
salam kenal.
saya menggunakan AT Mega 8535 utk kprluan TA saya. saya menggunakan program codevision AVR.
saya pnya msalah,saya menggunakan komunikasi serial UART RS2323 utk menamplkan data saya ke hyperterinal.
bagaimana caranya yah jika saya ingin menampilkan data yg sya peroleh dari sensor ke hyperterminal,tp tidak hanya menmpilkan tulisan seperti biasanya, tp sebuah angka yg nilainya dapat berubah2 secara otomatis ,sesuai data yg diperoleh dr sensor.
tlong dibantu yah..
trimakasih