Sudah lama saya tidak menulis di blog, dan kali ini saya
akan berbagi sedikit pengalaman saya mengenai USART/UART di mikrokontroler AVR
ATMEGA series. Kesempatan kali ini saya akan menggunakan Atmega8 dan mengaktifkan
fitur USARTnya dengan CodeVision AVR versi 1.xx.x
Jalankan aplikasi Codevision kemudian pada menu
file pilih new, nanti akan muncul jendela create new file pilih project dan
klik OK, akan muncul jendela confirm klik yes,
kemudian akan muncul jendela code
wizard AVR
Pada gambar diatas pilih chip
Atmega8 dan clock nya 8MHz, klik usart
Buatlah setingan seperti gambar
diatas, pada kesempatan ini di gunakan TX(transmiter) dan RX(receiver) tanpa
interrupt dengan baud rate 9600 8 bit data, 1 bit stop dan No parity.
Kemudian klik file pilih Generate,
save and Exit
Akan
muncul jendela save c compiler source file,
beri
nama file usart (bebas) klik save
kemudian
muncul lagi jendela save c compiler project file,
beri
nama file usart klik save
kemudian
akan muncul lagi jendela save file,
beri
nama file usart klik save.
Kemudian
akan muncul
Untuk
memudahkan saya menjelaskan coba hapus semua program diatas kemudian ganti
dengan code berikut :
#include
<mega8.h>
//
Standard Input/Output functions
#include
<stdio.h>// didalam file ini fungsi getchar dan putchar di buat
//
Declare your global variables here
void
main(void)
{
//ini
adalah inisialisasi USART untuk atmega8
//
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=0x33;
while
(1)
{
//
Place your code here
If(getchar()==’M’) // jika RX menerima karakter ’M’
{ // maka TX akan
mengirim karakter 'A'
putchar(‘A’)
}
} ;
}
Kemudian
setelah code diatas di copy, compile code tersebut dengan menekan shift+F9 pada
keyboard
Maka
hasilnya
Klik
ok, nah sekarang file .Hex sudah ada, terserah anda mau langsung di upload ke
mikrokontroler atau di simulasi.
Saya
simulasi kan dengan PROTEUS dengan skematik sebagai berikut
Pada
simulasi klik jendelan virtual terminal kemudian pada keyboard tekan shift+m (‘M’),
maka akan muncul ‘A’ pada jendela virtual terminal.
mas, saya punya data tipenya int. Bagaimana mengkonversikan ke tipe char?
BalasHapusApakah bisa dengan cara di bawah ini :
//misal aja
unsigned int i = 4125;
char data_tx = (char) i;
//waktu saya compile sih bisa, tapi apakah data yang terkirim benar?Terima kasih.
adi.
di ubah saja dulu string pake itoa
Hapuscontoh
#include
unsigned char data_string[10];
unsigned int i=4125;
....
void main()
{
while(1)
{
itoa(i,data_string)//konversi dari integer ke string
puts(data_string);//kirim data string
}
}
semoga bisa membantu mas adi
untuk menggunakan fungsi itoa pake library stdlib.h
Hapuskok punya saya sudah nemplek plek sama seperti punya anda tp kok ga kluar karakter apa2 di virtual terminal???
BalasHapuscoba sebutkan langkah2 anda sampai di simulasi dengan proteus!
Hapuskasus saya sama mas, virtual terminalnya gak keluar outputnya.
Hapussaya pakai ATMega 8535, di code vision gak ada masalah, pas di proteus virtual terminal Tx saya hubungkan dengan Rx di 8535, Rx nya saya hubungkan Tx mikro. dan hasilnya gak terlihat
sebelum input 'M' dari keyboard jendela virtual terminalnya di klik dulu...
Hapusatau kalau tidak bisa juga, coba setingan clock di mikro sudah sama atau belum dengan setingan clock di program yang di buat dengan codevision...
cek juga bit rate nya di mikro harus sama dengan di virtual terminal...
maksudnya imput "M" dari keyboard?
Hapuskalo settingan mikro sama proteus udah sama gan, baud rate 9600
ya betul dari keyboard...
Hapuskalo di proteusnya muncul warning message "UCRSC0 register is not modelled" penyebabnya apa ya? saya pake ATMEGA32 ma codevision
BalasHapusprogramnya jalan tidak di proteus? bagaimana di code vision? apakah ada warning seperti itu?
HapusMau tanya mas, saya bkin program persis kaya yang mas posting, tpi pda " If(getchar() == 'M') " ada peringatan "invalid expression
BalasHapusprogram diatas jangan di copy paste, coba diketik ulang manual aja mas... ada karakter yang berbeda jika di copy paste
HapusMau tanya mas, kalau mau baca data string, ada perintah selain getchar() gak ya??
BalasHapusbiasanya saya pake getchar. coba cek di librarynya. hehe saya belum pernah pake selain getchar
Hapuskalau saya mau menampilkan sebuah kata ke virtual terminal bagaimana? misalnya "aku", saya coba tapi hasilnya tidak sempurna
BalasHapuscoba cek baud rate, data bits, stop bits dan parity nya sama tidak
Hapusbegini mas, anda kan vrtual ni, saya coba langsung ke sistem minimum asli, damana di sistem minimum pin tx0 dan rx0 itu tersambung ke pin miso, mosi buat downloader. dengan program yang sama dengan sampean, g keluar apa2 di terminal mas., bisa bantu kah mas? mungkin dengan fuse bit ato apa dah ma?,
BalasHapuspakai atmega apa? coba cek baud rate,data bits parity dan stop bits nya sama tidak. program diatas harus di picu dengan input 'M' dari keyboard komputer. coba perhatikan kalimat terakhir artikel diatas
Hapusmas saya sudah coba dan berhasil.
BalasHapusskrg saya inginnya kl di tekan huruf M maka portb.0 berlogika 1.
apakah nnti di terminalnya akan tampil logika 1?
soalny ktika saya coba, tdk mncul apa".
ini listing yg saya buat :
while (1)
{
if (getchar()=='M')
{
PORTB.0 = 1;
}
};
}
DDRB.0=1;
Hapuswhile (1)
{
if (getchar()=='M')
{
PORTB.0 = 1;
}
};
}
PORTB.0 harus di set menjadi output, dengan menambahkan DDRB.0=1
mw tanya saya punya list gini
BalasHapuswhile (1)
{ PORTC.3=PINC.0;
PORTC.4=PINC.1;
PORTC.5=~PINC.1;
PORTC.6=PINC.2;
}
misalkan jika saya ingin mengirim data ke komputer dengan keterangan:
jika PORTC.3==1(berlogika 1) maka kirim ke komputer ('PORTC.3=1')
ATAU jika PORTC.3==0(berlogika 0) maka kirim ke komputer ('PORTC.3=0')
jika PORTC.4==1(berlogika 1) maka kirim ke komputer ('PORTC.4=1')
ATAU jika PORTC.4==0(berlogika 0) maka kirim ke komputer ('PORTC.4=0')
jika PORTC.5==1(berlogika 1) maka kirim ke komputer ('PORTC.5=1')
ATAU jika PORTC.5==0(berlogika 0) maka kirim ke komputer ('PORTC.5=0')
TOlong dibantu .thx
Simple nya begini mas,
Hapusif(PINC.0==1)
{
putchar('P');
putchar('O');
putchar('R');
putchar('T');
putchar('C');
putchar('.');
putchar('3');
putchar('=');
putchar('1');
}
else
{
putchar('P');
putchar('O');
putchar('R');
putchar('T');
putchar('C');
putchar('.');
putchar('3');
putchar('=');
putchar('0');
}
YANG LAIN SAMA SEPERTI DIATAS
mas, kalau saya dari visual c# mengirim data 150, lalu diterima di mikro untuk dibandingkan dengan nilain lain.. misalnya if (getchar()<=150) itu bagaimana ya formatnya?
BalasHapus150 tipe data nya integer yaa. bisa langsung
Hapusif(getchar()<=150){};
atau di simpan ke variable
unsigned char buffer;
buffer=getchar();
if(buffer<=150){};
nah itu mas, cara pengiriman data int lewat serialport visual c# gmn ya mas?
Hapuskalau yg sekarang data yg saya kirim dari c# itu berupa text, misalnya saya ketik 5, maka di codevison masih bisa membacanya
Hapusif (getchar()<='5')
{
masukProgram();
}
utk kasus yg diatas masih bisa, cuma kalau udah perbandingan lebih dua digit , misalnya if (getchar()<='150') akan muncul warning:
pointless integer comparison with an out of range constant
bagaimana ya mas?
saya asumsikan mas ini udah ngerti cara kirim lewat serial di C#. begini mas, data text misal mas nya ngetik 150 sebelum di kirim lewat serialport, di conversi dulu ke integer kemudian di konversi lagi ke karakter baru kirim.
Hapuskarena 150 itu adalah tipe data string. data string ini di konversi ke integer. dari integer di konversi ke karakter kemudian kirim ke serialport
coding di code vision nya
Hapusif(getchar()<=150) bukan if(getchar()<='150')
atau
if(getchar()<=5) bukan if(getchar()<='5')
karena jika mas tulisnya '5' ini tipe data karakter dan ketika mas ketik '150' ini salah, '150' bukan karakter tapi string. dan getchar() hanya menampung 1 byte atau satu karakter.
berarti getchar hanya menampung 1 byte data mas. kalao kita ingin menambah karakter lg. seperti
Hapusif (getchar()=='makan')
{ }
apa yg perlu untuk pengenalannya mas?
if(getchar()=='m')
Hapus{
if(getchar()=='a')
{
if(getchar()=='k')
{
if(getchar()=='a')
{
if(getchar()=='n')
{
}
}
}
}
}
mas, saya mau bertanya.
BalasHapussaya lagi membuat program remote control dua buah micro [rx dan tx]. jadi txnya itu nanti akan mengirimkan inputan dari push button.
lalu rx nya akan membaca masukan dari push button dan di tampilkan menggunakan led.
masalahnya mas, program yang saya buat data yang dikirimkan tx tidak sama dengan yang ditampilkan rx...
berikut list program Transmitter
#include
#include
#include
#include
#asm
.equ __lcd_port=0x15;PORTC
#endasm
// Standard Input/Output functions
#define ADC_VREF_TYPE 0x40
// Read the AD conversion result
unsigned int read_adc(unsigned char adc_input) //membaca sebuah adc dari generator karakter LCD atau RAM tampilan
{
ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
// Delay needed for the stabilization of the ADC input voltage
delay_us(10);
// Start the AD conversion
ADCSRA|=0x40;
// Wait for the AD conversion to complete
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCW;
}
unsigned int temp=15;
char buff[33];
void main(void)
{
PORTA=0XFF;
DDRA=0X00;
PORTB=0X00;
DDRB=0XFF;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=FFh
// OC0 output: Disconnected
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer 1 Stopped
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer 2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// INT2: Off
MCUCR=0x00;
MCUCSR=0x00;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;
// USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: Off
// USART Transmitter: On
// USART Mode: Asynchronous
// USART Baud Rate: 9600
UCSRA=0x00;
UCSRB=0x08;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x19;
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;
// ADC initialization
// ADC Clock frequency: 31,250 kHz
// ADC Voltage Reference: AVCC pin
// ADC High Speed Mode: Off
// ADC Auto Trigger Source: None
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0x87;
SFIOR&=0xEF;
lcd_init(16);
while (1)
{
PORTB=PINA;
if(PINA.0==0) temp=1;
if(PINA.1==0) temp=2;
if(PINA.2==0) temp=3;
if(PINA.3==0) temp=4;
if(PINA.4==0) temp=5;
if(PINA.5==0) temp=6;
if(PINA.6==0) temp=7;
if(PINA.7==0) temp=8;
if(PINA==255) temp=0;
lcd_gotoxy(0,0);
sprintf(buff,"LED SING KE %d",temp);
lcd_puts(buff);
printf(" %4i",temp); //kirim data serial
delay_ms(10);
};
}
push button nya di PINA ya? berarti ada 8 push button ya? itu PORTB untuk LED?
Hapusiya gan, rangkaiannya seperti gambar ini gan https://twitter.com/KEKO_G_o_K_i_L/status/552302971883905024/photo/1
Hapusjadi kalau bisa saat push button ditekan. led pada kedua micro dapat menyala dan menyala di pin yang sama
rangkaian sama coding nya ngga nyambung, itu di mikrokontroler U1 harusnya yang terkoneksi TX bukan RX nya
Hapusooo, iya gan. tp masih belum bisa gan, di lcd sudah sama,tp di led nya belum sama...
Hapusdan ini program receivernya
BalasHapus#include
#include
// Alphanumeric LCD Module functions
#asm
.equ __lcd_port=0x15 ;PORTC
#endasm
#include
#define RXB8 1
#define TXB8 0
#define UPE 2
#define OVR 3
#define FE 4
#define UDRE 5
#define RXC 7
#define FRAMING_ERROR (1<
// Declare your global variables here
void main(void)
{
PORTA=0x00;
DDRA=0x00;
PORTB=0x00;
DDRB=0x08;
PORTC=0x00;
DDRC=0x00;
PORTD=0x00;
DDRD=0x00;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 3,906 kHz
// Mode: Fast PWM top=FFh
// OC0 output: Non-Inverted PWM
TCCR0=0x6D;
TCNT0=0x00;
OCR0=0x00;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer 1 Stopped
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer 2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// INT2: Off
MCUCR=0x00;
MCUCSR=0x00;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;
// USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: On
// USART Transmitter: Off
// USART Mode: Asynchronous
// USART Baud Rate: 9600
UCSRA=0x00;
UCSRB=0x90;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x19;
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;
// LCD module initialization
lcd_init(16);
// Global enable interrupts
#asm("sei")
while (1)
{
// Place your code here
};
}
kalau mas ada waktu mohon dikoreksi program saya mas, maklum, saya hanya copas dari internet. kerena saya kurang paham tentang USART ini mas.
terimakasih .
data yang diterima ngga sama nya gimana? di atas tidak ada instruksi untuk menerima data nya...
HapusKomentar ini telah dihapus oleh pengarang.
Hapuscontoh program untuk instruksi menerima data itu contohnya seperiti apa mas
Hapusmisal nya fungsi getchar() untuk menerima data
HapusKomentar ini telah dihapus oleh pengarang.
BalasHapuspermisi gan,
BalasHapusuntuk mengirim data integer - /negatif itu gimana coding-nya
trimakasih
Permisi gan mau tanya nie..
BalasHapusapakah kode diatas bisa untuk komunikasi mengunakan bluetooth
kalo bisa apakan buffer nya gak akan lansung penuh?
Gan, saat saya jalankan program berikut diproteus, pada vitual terminalnya koq ga bisa diketikkan huruf ya, apakah ada settingan yang lain,baudrate,atw yg lain.thanks
BalasHapusif(getchar()=='m')
{
if(getchar()=='a')
{
if(getchar()=='k')
{
if(getchar()=='a')
{
if(getchar()=='n')
{
}
}
}
}
}
kalau di proteus kayaknya per byte, program diatas bisa jalan jika menerima string "makan"
Hapussudah berhasil gan. tetapi sewaktu saya terapkan secara langsung hadwarenya, dengan settingan baudrate yg sama antara ATMega8535 dan hyperterminal (sebagai pemberi data), PORTB.0 nya tidak menyala, adakah yang harus diperhatikan lgi. Thanks.
HapusGambaran Skematik: PORTD.tx & rx(8535) to pin 11 & 12(max232) dan pin 13&14(max232) to Port DB9(Laptop)
sebelumnya ditambahin ini gan coba DDRB.0=1;
Hapussetelah ditambah DDRB.0=1; led nya menyala gan, walaupun belum menerima data:
HapusDDRB.0=1;
if(getchar()=='m')
{ if(getchar()=='a')
{ if(getchar()=='k')
{ if(getchar()=='a')
{ if(getchar()=='n')
{
PORTB.0=1;
}
}
}
}
sebelum loop while(1) di dalam fungsi main(), coba tambahkan PORTB.0=0; biar pasti sebelum di beri data pin b.0 di ukur tegangannya dengan voltmeter dan sesudah di beri data juga di ukur.
Hapussudah berhasil gan, ternyata max232 nya rusak, hehehe,,
Hapusthanks gan,
kalau ada waktu, share ilmunya yang lain gan, krn sngt membantu seperti saya yg masih pemula. thx
ini apa sudah benar cara pemanggilan AT COMMENT memakai program codevision avr
BalasHapuslcd_clear();
puts("AT+CMGF=1 \r");
delay_ms(700);
lcd_puts("Kirim sms...");
puts("AT+CMGS=\"083831608711\"\r");
//----nomor HP tujuan : 0857XXXXXXXX, bisa ganti yang lain
//----- tunggu 700 ms
delay_ms(700);
//----- isi sms yang dikirim
puts("Tes Kirim SMS");
//----- kode akhiran untuk perintah kirim sms
putchar(0x1A);
//----- tunggu 1 detik
delay_ms(1000);
//----- hapus tampilan LCD
lcd_clear();
//----- tampilan pada LCD
lcd_puts("SMS terkirim");
//----- selesai
while (1)
{
// Place your code here
}
saya belum pernah pakai AT Command, saya koreksi fungsi stdio.h sama lcd aja ya..
Hapuslcd_clear();
putsf("AT+CMGF=1 \r");
delay_ms(700);
lcd_putsf("Kirim sms...");
putsf("AT+CMGS=\"083831608711\"\r");
//----nomor HP tujuan : 0857XXXXXXXX, bisa ganti yang lain
//----- tunggu 700 ms
delay_ms(700);
//----- isi sms yang dikirim
putsf("Tes Kirim SMS");
//----- kode akhiran untuk perintah kirim sms
putchar(0x1A);
//----- tunggu 1 detik
delay_ms(1000);
//----- hapus tampilan LCD
lcd_clear();
//----- tampilan pada LCD
lcd_putsf("SMS terkirim");
//----- selesai
while (1)
{
// Place your code here
}
ok mas maksih banyak
HapusKomentar ini telah dihapus oleh pengarang.
BalasHapusmas,supaya data yg masuk itu bisa lgsg kosong lg data program yg benar gmn ya mas??
BalasHapuswhile(penanda==3)
{
h=0;
while(data[h]!=0x0A)
{
temp2=getchar();
if(temp2=='' || temp2==0x0D || temp2==0x0A|| temp2==0x03)
break;
if(temp2!=0x02)
{
h++;
data[h]=temp2;
sprintf(gbg,"%c",temp2);
strcat(convert,gbg);
}
}
delay_ms(100);
penanda=5;
while ((strcmp (id3,convert) == 0) && (penanda==5))
{
delay_ms(50);
lcd_clear();
lcd_gotoxy(0,0);
lcd_putsf(" Akses Diterima ");
delay_ms(200);
motor();
surat_off();
delay_ms(2000);
lcd_clear();
strcat(convert," ");
penanda=0;
goto menu;
}
while (((strcmp (id2,convert) == 0) || (strcmp (id1,convert) == 0)) && (penanda==5))
{
delay_ms(50);
lcd_clear();
lcd_gotoxy(0,0);
lcd_putsf(" Akses Ditolak ");
delay_ms(200);
lampu_alarm();
alarm();
delay_ms(2000);
lcd_clear();
lampu_off();
strcat(convert," ");
penanda=0;
goto menu;
}
}
maksudnya gmn ya?
Hapusmau nanya mas, saya buat program komunikasi serial kalo dikasih input "a" dari komputer, mikro kirim data "1" ke komputer sedangkan kalo tidak dikasih input ataupun input tidak samadengan "a" mikro ngirim data "2" ke komputer, ini program yang saya buat;
BalasHapusif(getchar()!='a'){
printf("1");
}
printf("2");
tapi setelah di eksekusi mikro hanya kirim "2" ke komputer ketika input diberi tidak sama dengan "a" sedangkan yang saya inginkan mikro terus ngirim "2" walaupun tidak diberi inputan
mau nanya mas, saya buat program komunikasi serial kalo dikasih input "a" dari komputer, mikro kirim data "1" ke komputer sedangkan kalo tidak dikasih input ataupun input tidak samadengan "a" mikro ngirim data "2" ke komputer, ini program yang saya buat;
BalasHapusif(getchar()!='a'){
printf("1");
}
printf("2");
tapi setelah di eksekusi mikro hanya kirim "2" ke komputer ketika input diberi tidak sama dengan "a" sedangkan yang saya inginkan mikro terus ngirim "2" walaupun tidak diberi inputan
mohon pencerahnnya mas...
1. itu if(getchar()!='a') bukannya if(getchar()=='a') ya?
Hapus2. dalam fungsi getchar, jika tidak ada masukan ke RX mikro maka akan looping forever sampai ada masukan ke RX. coba pake cara ini http://marizaazhar.blogspot.com/2015/03/trik-keluar-loop-fungsi-getchar-dengan.html
mas saya mau tanya
BalasHapusdari vb saya punya kodingan kaya gini buat menyalakan led di proteus dengan mengirim X dengan tipe data String
Private Sub Command1_Click()
Dim dataKeluar As String
dataKeluar = "X"
If Command1.Caption = "ON" Then
Command1.Caption = "OFF"
MSComm1.Output = dataKeluar
nah di codevisionavr saya intinya seperti ini
char tes;
while (2){
tes = getchar();
if(getchar()=='X'){
PORTA.0=1;PORTA.1=1;
}
tapi di proteus led nya ga nyala. tapi di komponen compim (rs232 di proteus) itu keliatan kalo ada nilai yg masuk
minta tolong koreksi mas atau sarannya
maaf ada kesalahan
Hapuswhile (2){
tes = getchar();
if(tes=='X'){
PORTA.0=1;PORTA.1=1;
}
nah,siip udah bisa belum?
Hapusbelum bisa juga.
Hapusdari kodingan diatas ada kesalahan ga ya?
soalnya ngirim nilai dari mikro ke vb lancar
apa saya kirim aja mas full kodingan nya ?
HapusKomentar ini telah dihapus oleh pengarang.
HapusDDRA.1=1;
HapusDDRA.0=1;
while(1)
{
tes = getchar();
if(tes=='X'){
PORTA.0=1;
PORTA.1=1;
}
coba pakai code diatas
sama aja mas
Hapussemua porta saya pake buat output
while (1)
BalasHapus{
if(PIND.6==1){
delay_ms(200);
lcd_clear();
data13=0;data14=0;PORTA.2=0;PORTA.3=0;
data21=0;PORTA.6=0;PORTA.7=0;PORTB.0=0;
data31=data31+1;
if(data31==2){data37=data32;};
if(data31==3){data37=data33;};
if(data31==4){almt1=data32;almt2=data33;data31=1;}; //END SETTING
};
//BT DECREAS
if(PIND.4==1){
delay_ms(200);
if(data31==2){if (data32>1){data32=data32-1;};}; //ST TOILET
if(data31==3){if (data33>1){data33=data33-1;};};
};
//BT INCREAS
if(PIND.5==1){
delay_ms(200);
if(data31==2){if (data32<60){data32=data32+1;};};
if(data31==3){if (data33<60){data33=data33+1;};};
};
if(data31==1){
//GROUP1 TOILET
data11=PINC.0;data12=PINC.1;
//if(data11==1 | data12==1)//{PORTA.1=1;};
nah disini tadinya saya kasih logika ATAU
JIKA DATA11==1 ATAU GETCHAR()=='X'
tapi malah semua button jd ga fungsi sampe kebawah
if(data11==1){serial='A';putchar(serial);data13=data32*data34;} //set timer cuci tangan
if(data12==1){serial='B';putchar(serial);data14=data32*data34;} //set timer BAB
if(data13>0){PORTA.0=1; PORTA.1=1;}
else{if(data13==0){serial='a';putchar(serial);PORTA.0=0; PORTA.1=0;};};
if(data14>0){PORTA.2=1;PORTA.3=1;}
else{if(data14==0){serial='b';putchar(serial);PORTA.2=0; PORTA.3=0;};};
//GROUP2 LORONG
data24=PIND.2;data25=PIND.3;
if(PIND.2==1|PIND.3==1)//{PORTA.5=1;}; //PORT.A.5=penanda inputan sensor
if(data24==1|data25==1){serial='C';putchar(serial);data21=data33*data34;PORTA.4=1;}; //set timer
if(data21>0){
if(data21==(data33*data34)-1){serial='D';putchar(serial);PORTA.5=1; PORTA.6=1;};
if(data21==(data33*data34)-2){serial='E';putchar(serial);PORTA.7=1; PORTB.0=1;};
if(data21==2){serial='c';putchar(serial);PORTA.4=0;};
if(data21==1){serial='d';putchar(serial);PORTA.5=0; PORTA.6=0;};
}
else{serial='e';putchar(serial);PORTB.0=0; PORTA.7=0;};
};
//LCD DISPLAY
if(data31==1){
lcd_gotoxy(0,0);lcd_putsf("SYSTEM:RUNING");
lcd_gotoxy(0,1);lcd_putsf("TA:");
lcd_gotoxy(5,1);lcd_putsf("TA:");
lcd_gotoxy(10,1);lcd_putsf("LL:");
if(data14>=0){itoa(data14,temp);
}
lcd_gotoxy(3,1);lcd_puts(temp);
if(data13>=0){itoa(data13,ta);
}
lcd_gotoxy(8,1);lcd_puts(ta);
itoa(data21,wc);lcd_gotoxy(13,1);lcd_puts(wc);
if(data14==9){lcd_gotoxy(4,1);lcd_putsf(" ");};
if(data13==9){lcd_gotoxy(9,1);lcd_putsf(" ");};
if(data21==9){lcd_gotoxy(14,1);lcd_putsf(" ");};};
if(data31==2){
lcd_gotoxy(0,0);lcd_putsf("SYSTEM:SET-TA1");
lcd_gotoxy(0,1);lcd_putsf("Timer:");
itoa(data32,temp);lcd_puts(temp);
if(data32==9){lcd_putsf(" ");};
};
if(data31==3){
lcd_gotoxy(0,0);lcd_putsf("SYSTEM:SET-TA2");
lcd_gotoxy(0,1);lcd_putsf("Timer:");
itoa(data33,temp);lcd_puts(temp);
if(data33==9){lcd_putsf(" ");};
};
if(data31==4){
lcd_gotoxy(0,0);lcd_putsf("SYSTEM:SET-LL");
lcd_gotoxy(0,1);lcd_putsf("Timer:");
itoa(data33,temp);lcd_puts(temp);
if(data33==9){lcd_putsf(" ");};
};
}
nah disini tadinya saya buat while (2) yg kodingan singkat sebelumnya
tapi sama aja
}
Saya ada tugas komunikasi serial antara 2 mikro kontroler
BalasHapusBagaiamana ya listing programnya jika mikro 1 mengirim data agar mikro 2 menerima data dan menghidupkam 4 buah LED karena saya mash bingung konsepnya
Terima kasih
saya mau tanya, untuk mengirim data float melalui uart bagaimana ya? thx
BalasHapusassalamuallaikum mas saya mau tnya cara membuat biar keluarannya 7 segmen bagai mana ya dari program ini
BalasHapus#include
#include
#asm
.equ_lcd_port=0x15 ; // POTRC
#endasm
#include
unsigned char wadah [16];
unsigned char kar;
void terima_data(void);
void main (void)
{
lcd_init (16);
lcd_clear ();
UCSRA = 0X00;
UCSRB = 0X10; // RXEN
UCSRC = 0X86; //
UBRRH = 0X00;
UBRRL = 0X51;
lcd_gotoxy(0,0);
lcd_putsf("ketikan huruf");
lcd_gotoxy(0,1);
lcd_putsf("huruf anda");
while (1)
{
terima_data();
sprintf(wadah, "%c", kar);
lcd_gotoxy(12,1);
lcd_puts (wadah);
}
}
void terima_data (void)
{
while ( ! (UCSRA&0X80));
{
};
kar = UDR;
}
trima kasih
Masnya harus singkronkan dg program dlu utk ke 7segmen
Hapusmas mau tanya, kalau simulasi di proteus komponen nya apa aja ya yg buat komunikasi serial...?
BalasHapusBang mau tanya seandainya di dalam program ada lcd,segmen utk menampilkan voltmeter
BalasHapusnah usart saya aktifkan kok tidak bisa trbca di komputer dg aplikasi cvavr ya.
Apa yang harus saya lakukan ?
apa perlu tambahan aplikasi proteus atau pakai rx 232 dg converter jga.terimakasih tlong bantuannya bang
bisa liat script nya?
Hapushello gan, bisa berikan contoh interrupt usart ??? misalkan secara berulang saya kirim ke mikro karakter 'M' trus saya interrupkan untuk mengirim karakter 'K'tanpa menghentikan pengiriman karakter 'M'ke mikrokontroller
BalasHapusgan mohon pencerahan nya...
BalasHapusmaslahnya ginigan
ini program suka stuck kang. inputnya tu harus di kirim 3 sampe 4 kali baru ter exse kusi
misal ini gan
if(getchar()=='W')
{
PORTB.4=1;
};
nah ngirim hurup W nya tu harus sampe 4 kali baru keluar prt b nya tu 1
// Place your code here
if(getchar()=='W')
{
PORTB.4=1;
};
if(getchar()=='A')
{
PORTB.4=0;
};
if(getchar()=='M')
{
PORTB.5=1;
};
if(getchar()=='S')
{
PORTB.5=0;
};
if(getchar()=='E')
{
PORTB.6=1;
};
if(getchar()=='D')
{
PORTB.6=0;
};
if(getchar()=='R')
{
PORTB.7=1;
};
if(getchar()=='F')
{
PORTB.7=0;
};
if(getchar()=='P')
{
arus=read_adc(0);
volt=read_adc(1);
sprintf(buf,"I= %d'A", arus);
lcd_gotoxy(0,1);
lcd_puts(buf);
sprintf(buf,"V= %d'V", volt);
lcd_gotoxy(8,1);
lcd_puts(buf);
printf("%d",arus);
printf("A";
printf("%d",volt);
printf("B#";
};
};
}
coba gini
Hapusunsigned char bufchar;
bufchar=getchar();
if(bufchar=='W')
{
PORTB.4=1;
}
else if(bufchar=='A')
{
PORTB.4=0;
}
else if(bufchar=='M')
{
PORTB.5=1;
}
else if(bufchar=='S')
{
PORTB.5=0;
}
else if(bufchar=='E')
{
PORTB.6=1;
}
else if(bufchar=='D')
{
PORTB.6=0;
}
else if(bufchar=='R')
{
PORTB.7=1;
}
else if(bufchar=='F')
{
PORTB.7=0;
}
else if(bufchar=='P')
{ ...
gan kenapa ga mau jalan programnya ? saya pake putchar doang, putchar('A'); , yang keluar itu malah kaya huruf CCCCCCCCC, kenapa ya ?
BalasHapusGan mau tanya ini kalo konversi dari string ke char bisa pake apa ya?? Soalnya ini aku pake bluethooth data bisa rerkirim tapi ga bisa kebaca apa yg dikirimnya itu (tamoilan di lcd huruf lambang ngaco2)
BalasHapusGan mau tanya ini kalo konversi dari string ke char bisa pake apa ya?? Soalnya ini aku pake bluethooth data bisa rerkirim tapi ga bisa kebaca apa yg dikirimnya itu (tamoilan di lcd huruf lambang ngaco2)
BalasHapuskalau pake getchar, data string dari bluetooth di simpan dulu ke variable array bertipe char atau unsigned char, setelah itu ditampilkan ke lcd. pastikan juga baudrate nya dan parity nya sama
Hapusgan, saya ngirim data berupa sejumlah kata kan dari labview ke AVR , menggunakan fungsi scanf, kenapa ya karakter "spasi " dan enter ga ke baca ?
BalasHapusgan saya mau nanya kalo coding usart untuk mpu6050 bagaimana ya?
BalasHapusOm cara mengirimkan variabel ke usart gimana ya?
BalasHapusContoh int a;
a=100;
gimana cara mengirim data a ke usart?
saya pake microcontroller8535 real gak pake simulasi terus untuk receivernya pake software hyperterminal,,
BalasHapusadakah tutorialnya mas atau ada buku pdf yang bisa saya gunakan?
terima kasih
saya belum buat tutorialnya untuk itu, kalau mau dipraktekan langsung, harus menggunakan converter usb to ttl, rx tx konverter di hubungkan dengan tx rx atmega
HapusMas kalau saya coba berhasil tapi kalau saya coba pakai 3 mikro kok tdk bisa ya? 1 sbg penrima 2 pengirim
BalasHapusMas kalau saya coba berhasil tapi kalau saya coba pakai 3 mikro kok tdk bisa ya? 1 sbg penrima 2 pengirim
BalasHapusumm mas maaf nih klo boleh tanya, klo mau munculin nilai ADC ke serial monitor apa aja yah perintah yang di kasih ?
BalasHapusputchar(nilai_adc); nila_adc adalah char atau integer
Hapuskalau coding di arduino print(nilai_adc)
mas, saya sudah coba mengubah data integer ke data string sebelum dikirim (fungsi putchar), dan pada virtual terminal sudah mengirim karakter string yang merupakan hasil dari konversi data integer tadi ke string. Namun, bagaimana cara menerima data dengan fungsi getchar. saya sudah coba pake getchar dengan memanggil karakter string yang dikirim tadi, namun hasilnya tidak ada nilai alias kosong, mohon pencerahannya mas.
BalasHapusTerima Kasih
min mau nanya min, saya mau buat program komunikasi serial untuk menampilkan suhu dari sensor LM35 ke computer
BalasHapuspada software HyperTerminal/Terminal. itu gimana ya min? sy bingung untuk memasukkan perintah di CVAVRnya. apakah untuk menampilkan hasil dari sensornya ke hyperterminal menggunakkan perintah scanf() atau getchar() ?
kalau pakai cvavr bisa menggunakan program di atas, pakai putchar(),tipe data di fungsi putchar 8 bit atau 1 byte dari 0-255(integer), bisa juga menggunakan putsf(), tipe data nya string
Hapus