۲۲-اسفند-۱۳۹۲, ۱۲:۱۱:۲۴
سلام دوستان من رو پروژه ای کارمیکردم که باید از راه دور یه دستگاهیو کنترل میکردم.توی این پروژه من از ماژول فرستندهhmt وگیرنده hmr به دلیل ارزانی وراه اندازی آسون استفاده کردم که خداروشکرهم به سرانجام رسید.
من برای برنامه نویسی از زبانC ونرم افزار کدویژن استفاده کردم.
درابتدا برنامه نویسی،تو اینترنت هرچی سرچ میکردم که یه راهنماییه اولیه پیدا کنم فقط بازبان بیسیک پیدامیکردم.
حالا که خودم تونسم این پروژه رو با زبان C به پایان برسونم گفتم این اطلاعاتو در اختیار دیگر دوستان قرار بدم تا احیانا اگه خواستن با زبان C برا این ماژول برنامه نویسی کنن 1 مقدار کار براشون راحتتر باشه.
توی نرم افزار کدویژن تو قسمت کدویزارد بعداز انتخاب نوع چیپ وتنظیمات ورودی خروجی در قسمت USART برا فرستنده حالت Transmitter رو انتخاب میکنیم بعد باید Buad Rate که همون نرخ ارسال اطلاعات هستو تنظیم کنیم که ما همون 9600 رو انتخاب میکنیم و *2 رو اکتیو نمیکنیم.البته اگه بخواییم سرعت بالاتر باشه اکتیوش میکنیم بعد در قسمت Mode ما اینجا حالت Asynchronuos را انتخاب میکنیم.
دیگه تقریبا تنظیماتو برا ارسال انجام دادیم.
اینم برنامه فرستنده:
تو این برنامه من از ADC استفاده کرده بودم که اینجا نیاز نبود باشه حذفش کردم اگه جایی چیزی در این مورد دیدی باز خودتون حذفش کنید امامن همه شو حذف کردم من باب اطلاع گفتم که تفاوتی تو بعضی قسمتا بود هنگ نکنید.
تو این برنامه من PINB.1,2,3,4 رو بعنوان ورودی تعریف کردم که 4 تا کلید بهشون وصله که اگه هرکدومش زده بشه علاوه بر اینکه کدیو ارسال میکنه 1 خروجی رو اینطرف ON میکنن که برا اطمینان اینکه که کلید زده شده من 1 LED رو روشن میکردم(مثلا اگه PINB.1==0 بشه LED که رو پورت PORTB.0 هستشو روشن میکنه)
دستور putchar() کار ارسال اطلاعاتو انجام میده.
یکی از ضعف های این ماژول اینه که نویز روش زیاد تاثیر میذاره که برا جلوگیری از این مورد در ابتدا برنامه 1 کد امنیتی ارسال میکنیم و در گیرنده هم میگیم که اگه اول این کدو دریافت کردی برو به ادامه کار.
اینم 1 عکس از شبیه ساز تو قسمت فرستنده:
[attachment=11197]
امیدوارم قسمت فرستنده رو تا حدودی یاد گرفته باشید که بتونید سریعتر به هدفتون برسید.
من برای برنامه نویسی از زبانC ونرم افزار کدویژن استفاده کردم.
درابتدا برنامه نویسی،تو اینترنت هرچی سرچ میکردم که یه راهنماییه اولیه پیدا کنم فقط بازبان بیسیک پیدامیکردم.
حالا که خودم تونسم این پروژه رو با زبان C به پایان برسونم گفتم این اطلاعاتو در اختیار دیگر دوستان قرار بدم تا احیانا اگه خواستن با زبان C برا این ماژول برنامه نویسی کنن 1 مقدار کار براشون راحتتر باشه.
توی نرم افزار کدویژن تو قسمت کدویزارد بعداز انتخاب نوع چیپ وتنظیمات ورودی خروجی در قسمت USART برا فرستنده حالت Transmitter رو انتخاب میکنیم بعد باید Buad Rate که همون نرخ ارسال اطلاعات هستو تنظیم کنیم که ما همون 9600 رو انتخاب میکنیم و *2 رو اکتیو نمیکنیم.البته اگه بخواییم سرعت بالاتر باشه اکتیوش میکنیم بعد در قسمت Mode ما اینجا حالت Asynchronuos را انتخاب میکنیم.
دیگه تقریبا تنظیماتو برا ارسال انجام دادیم.
اینم برنامه فرستنده:
کد:
/*****************************************************
This program was produced by the
CodeWizardAVR V2.03.4 Standard
Automatic Program Generator
© Copyright 1998-2008 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com
Project : hmt
Version :
Date : 09/28/2002
Author :
Company : sba
Comments: Saeed Bolqan Abadi
Chip type : ATmega8
Program type : Application
Clock frequency : 8.000000 MHz
Memory model : Small
External RAM size : 0
Data Stack size : 256
*****************************************************/
#include <mega8.h>
// Standard Input/Output functions
#include <stdio.h>
#include <delay.h>
int a,b;
// Declare your global variables here
void main(void)
{
// Declare your local variables here
// Input/Output Ports initialization
// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=Out
// State7=P State6=P State5=P State4=P State3=P State2=P State1=P State0=0
PORTB=0xFE;
DDRB=0x01;
// Port C initialization
// Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0x00;
// Port D initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
PORTD=0x00;
DDRD=0xFF;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
TCCR0=0x00;
TCNT0=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
MCUCR=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=0x33;
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;
// ADC initialization
// ADC Clock frequency: 1000.000 kHz
// ADC Voltage Reference: AVCC pin
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0x83;
while (1)
{
putchar(001);
s:
PORTB.0=0;
PORTD.7=0;
PORTD.6=0;
PORTD.5=0;
//**************************************
if(PINB.1==0)
{putchar(12) ;
PORTB.0=1;
delay_ms(2);
goto s;}
if(PINB.2==0)
{putchar(9);
PORTD.7=1;
delay_ms(2);
goto s;}
if(PINB.3==0)
{PORTD.6=1;
putchar(8);
delay_ms(2);
goto s;}
if(PINB.4==0)
{PORTD.5=1;
putchar(2);
delay_ms(2);
goto s;}
}
// Place your code here
};
}
تو این برنامه من PINB.1,2,3,4 رو بعنوان ورودی تعریف کردم که 4 تا کلید بهشون وصله که اگه هرکدومش زده بشه علاوه بر اینکه کدیو ارسال میکنه 1 خروجی رو اینطرف ON میکنن که برا اطمینان اینکه که کلید زده شده من 1 LED رو روشن میکردم(مثلا اگه PINB.1==0 بشه LED که رو پورت PORTB.0 هستشو روشن میکنه)
دستور putchar() کار ارسال اطلاعاتو انجام میده.
یکی از ضعف های این ماژول اینه که نویز روش زیاد تاثیر میذاره که برا جلوگیری از این مورد در ابتدا برنامه 1 کد امنیتی ارسال میکنیم و در گیرنده هم میگیم که اگه اول این کدو دریافت کردی برو به ادامه کار.
اینم 1 عکس از شبیه ساز تو قسمت فرستنده:
[attachment=11197]
امیدوارم قسمت فرستنده رو تا حدودی یاد گرفته باشید که بتونید سریعتر به هدفتون برسید.