سلام به همگی . من تو راه اندازی این دو ماژول گیر کردم هر کاری می کنم نمی شه مگه مثل ارسال سریال نباید با هاشون برخورد کرد لطفا راهنمایی کنید . منظورم اینه که اگر نکته ی خاصی برای استفاده از این ماژول ها هست ممنون می شم بگید
اطلاعیه
Collapse
No announcement yet.
کمک کنید نمی تونم HMt و HMR رو راه بندازم
Collapse
X
-
پاسخ : کمک کنید نمی تونم HMt و HMR رو راه بندازم
بله نحوه ارتباط با این ماژول بصورت سریال یا همون usart هستش
با تنظیمات پایه USART در هر دو سمت فرستنده و گیرنده میشه بینشون ارتباط برقرار کرد
یعنی باود 9600 ، دیتای 8 بیت ، بدون بیت توازن و یک بیت پایان
فقط چند تا نکته رو دقت کنید :
1- تنظیمات سریال هر دو ماژول باید یکسان باشد
2- فاصله بین ارسال هر بایت نباید از 75 میلی ثانیه بالاتر برود در این صورت ماژول به حالت SLEEP می رود و دیتایی ارسال نمی کند
3- پایه VCC ماژول فرستنده یا HM-T باید توسط میکروکنترلر کنترل شود یعنی فرضاً شما با یک ترانزیستور مثبت در هنگام روشن شدن مدار در ابتدا تغذیه ماژول را قطع کنید و سپس تغذیه ماژول را وصل کنید
4- بند سه را می توان برای ماژول گیرنده نیز به کار بست
5- ماژول گیرنده در زمانی که فرستنده دیتایی نمی فرسته خود به خود در حال دریافت دیتای تصادفی است (نشانه آماده به کار بودن گیرنده)
بنده با این نکات تا حالا چندین عدد از این ماژول ها را راه اندازی کرده ام
-
پاسخ : کمک کنید نمی تونم HMt و HMR رو راه بندازم
سلام به دوستان
علاوه بر نکات ذکر شده که من تا حالا چندین دفعه ایی که تست کردم ولی اونها رو انجام ندادم(بند های 2و 3 )ولی بازم جواب گرفتم این نکته رو در نظر داشته باشید که چند تا فرستنده یا گیرنده در کنار هم روشن نباشند چون باعپ
اختلال میشه و نکته ی دیگه اینه که در برنامه نویسی دقت کنید که ممکن است دستورات "خط جدید" و "برگشت به اول سطر" نیز ارسال شود که باید اونها رو در برنامه نویسی در نظر بگیرید.
نکته دیگه اینه که این ماژول ها در دو نوع TTL و RS232 موجوده که اگه از نوع rs232 استفاده کنی باید از مبدل سطح max232 استفاده کنی. :bye
دیدگاه
-
پاسخ : کمک کنید نمی تونم HMt و HMR رو راه بندازم
نوشته اصلی توسط پیمان ذوالنوری
در برنامه نویسی دقت کنید که ممکن است دستورات "خط جدید" و "برگشت به اول سطر" نیز ارسال شود که باید اونها رو در برنامه نویسی در نظر بگیرید
دیدگاه
-
پاسخ : کمک کنید نمی تونم HMt و HMR رو راه بندازم
میشه بیشتر توضیح بدید البته با یه مثال عملی کوچیک ممنون می شم مثل دوستم از کجا نوع ttl یا rs232 معلوم می شه ؟؟
برای توضیات برنامه نویسی باید بگم که زمانی که از بسکام استفاده می کنید بعد از دستور PRINT به صورت خودکار دوکارکتر با کد اسکی 10 و 13 ارسال میشوند برای جولگیری از این کار باید بعد از دستور PRINT علامت سیمی کالن قرار بدید.
به عنوان مثال :
PRINT "HELLO" ;
و اگه توی کد ویژن کار میکنید این کارکتر ها با دو کد n\ و r\ ارسال می شوند که البته این کار به صورت خودکار انجام نمیشود وکاربر باید خود گاهانه اونا رو قرار بده البته در صورت نیاز
دیدگاه
-
پاسخ : کمک کنید نمی تونم HMt و HMR رو راه بندازم
نوشته اصلی توسط پیمان ذوالنوریمیشه بیشتر توضیح بدید البته با یه مثال عملی کوچیک ممنون می شم مثل دوستم از کجا نوع ttl یا rs232 معلوم می شه ؟؟
برای توضیات برنامه نویسی باید بگم که زمانی که از بسکام استفاده می کنید بعد از دستور PRINT به صورت خودکار دوکارکتر با کد اسکی 10 و 13 ارسال میشوند برای جولگیری از این کار باید بعد از دستور PRINT علامت سیمی کالن قرار بدید.
به عنوان مثال :
PRINT "HELLO" ;
و اگه توی کد ویژن کار میکنید این کارکتر ها با دو کد n\ و r\ ارسال می شوند که البته این کار به صورت خودکار انجام نمیشود وکاربر باید خود گاهانه اونا رو قرار بده البته در صورت نیاز
UDR=0x55;دلیل اینم که اول 0x55 رو می فرستم برای خروج از حالت sleep و سنکرون کردن گیرنده با فرستنده هستش . با این برنامه گیرنده همون زمانی که فرستنده می فرسته فعال می شه و عددی هم دریافت می کنه اما نه اون عددا یه شش هفتا عدد خاص مثل 253 یا 255 یا 32 و ... ممنون می شم اگر می تونید راهنمایی کنید بازم مرا بی نصیب نذارید
delay_ms(50);
UDR=number;
دیدگاه
-
پاسخ : کمک کنید نمی تونم HMt و HMR رو راه بندازم
خوب ظاهرا از نظر ارسال مشکلی نداری ولی بهتر قبل از ارسال از خالی بودن بافر مطمئن باشی
wcnt=0;
while ((UCSR0A & DATA_REGISTER_EMPTY)==0){
wcnt+=1;if(wcnt>=100000) return 0; delay_us(10);}
UDR0=number;
ولی به نظر من اول واسه تست کردن hmr به کامپیوتر وصل کن بعد مطمئن شو که از نظر سخت افزار مشکلی نداری بعد تست نرم افزاری انجام بده :job:
دیدگاه
-
پاسخ : کمک کنید نمی تونم HMt و HMR رو راه بندازم
نوشته اصلی توسط majid.4206
موقعی که می خری باید مازولو نگاه کنی اگه ایسی max 232 روش باشه RS232 هستش... وگرنه TTL
اینم یه عکس از ماژول هستش به نظر شما از کدوم نوعه؟؟؟
دیدگاه
-
پاسخ : کمک کنید نمی تونم HMt و HMR رو راه بندازم
نوشته اصلی توسط Ali65این ماژول HM-R از نوع TTL هستش !
الآن هم روی میز چند تایی وجود داره :mrgreen:
سلام خدمت دوست عزیز.
بین موضوعات من بحث کار با ماژول hmt و hmr 915mhz رو اینجا دیدم.من هم همین مشکل رو دارم.البته از کدگذاری داده ها هم استفاده کردم باز نتیجه نگرفتم.من کدهای برنامه رو خدمتتون ارائه میدم.لطفاً من رو هم راهنمایی کنید.با تشکر.
بخش گیرنده
کد:Chip type : ATmega16 Program type : Application Clock frequency : 11.059200 MHz Memory model : Small External SRAM size : 0 Data Stack size : 256 *********************************************/ #include <mega16.h> #include <delay.h> #include <string.h> char j; // Alphanumeric LCD Module functions #asm .equ __lcd_port=0x18 #endasm #include <lcd.h> #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<<FE) #define PARITY_ERROR (1<<UPE) #define DATA_OVERRUN (1<<OVR) #define DATA_REGISTER_EMPTY (1<<UDRE) #define RX_COMPLETE (1<<RXC) // USART Receiver buffer #define RX_BUFFER_SIZE 8 char rx_buffer[RX_BUFFER_SIZE]; unsigned char rx_wr_index,rx_rd_index,rx_counter; // This flag is set on USART Receiver buffer overflow bit rx_buffer_overflow; // USART Receiver interrupt service routine #pragma savereg- interrupt [USART_RXC] void uart_rx_isr(void) { char status,data; #asm push r26 push r27 push r30 push r31 in r26,sreg push r26 #endasm status=UCSRA; data=UDR; if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0) { rx_buffer[rx_wr_index]=data; if (++rx_wr_index == RX_BUFFER_SIZE) rx_wr_index=0; if (++rx_counter == RX_BUFFER_SIZE) { rx_counter=0; rx_buffer_overflow=1; }; }; #asm pop r26 out sreg,r26 pop r31 pop r30 pop r27 pop r26 #endasm } #pragma savereg+ #ifndef _DEBUG_TERMINAL_IO_ // Get a character from the USART Receiver buffer #define _ALTERNATE_GETCHAR_ #pragma used+ char getchar(void) { char data; while (rx_counter==0); data=rx_buffer[rx_rd_index]; if (++rx_rd_index == RX_BUFFER_SIZE) rx_rd_index=0; #asm("cli") --rx_counter; #asm("sei") return data; } #pragma used- #endif // Standard Input/Output functions #include <stdio.h> // Declare your global variables here void main(void) { // Declare your local variables here // Input/Output Ports initialization // Port A initialization // Func0=In Func1=In Func2=In Func3=In Func4=In Func5=In Func6=In Func7=In // State0=T State1=T State2=T State3=T State4=T State5=T State6=T State7=T PORTA=0x00; DDRA=0x00; // Port B initialization // Func0=In Func1=In Func2=In Func3=In Func4=In Func5=In Func6=In Func7=In // State0=T State1=T State2=T State3=T State4=T State5=T State6=T State7=T PORTB=0x00; DDRB=0x00; // Port C initialization // Func0=In Func1=In Func2=In Func3=In Func4=In Func5=In Func6=In Func7=In // State0=T State1=T State2=T State3=T State4=T State5=T State6=T State7=T PORTC=0x00; DDRC=0x00; // Port D initialization // Func0=In Func1=In Func2=In Func3=In Func4=In Func5=In Func6=In Func7=In // State0=T State1=T State2=T State3=T State4=T State5=T State6=T State7=T PORTD=0x00; DDRD=0x00; // 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 TCCR1A=0x00; TCCR1B=0x00; TCNT1H=0x00; TCNT1L=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 GICR|=0x00; 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=0x47; // Analog Comparator initialization // Analog Comparator: Off // Analog Comparator Input Capture by Timer/Counter 1: Off // Analog Comparator Output: Off ACSR=0x80; SFIOR=0x00; // LCD module initialization lcd_init(16); // Global enable interrupts #asm("sei") while (1) { j=getchar(); if (j=='1' ){ lcd_clear(); lcd_gotoxy(0,0); lcd_putchar(getchar()); } } }
کد:Chip type : ATmega8 Program type : Application Clock frequency : 11.059200 MHz Memory model : Small External SRAM size : 0 Data Stack size : 256 *********************************************/ #include <mega8.h> #include <delay.h> #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<<FE) #define PARITY_ERROR (1<<UPE) #define DATA_OVERRUN (1<<OVR) #define DATA_REGISTER_EMPTY (1<<UDRE) #define RX_COMPLETE (1<<RXC) // USART Transmitter buffer #define TX_BUFFER_SIZE 8 char tx_buffer[TX_BUFFER_SIZE]; unsigned char tx_wr_index,tx_rd_index,tx_counter; // USART Transmitter interrupt service routine #pragma savereg- interrupt [USART_TXC] void uart_tx_isr(void) { #asm push r26 push r27 push r30 push r31 in r26,sreg push r26 #endasm if (tx_counter) { --tx_counter; UDR=tx_buffer[tx_rd_index]; if (++tx_rd_index == TX_BUFFER_SIZE) tx_rd_index=0; }; #asm pop r26 out sreg,r26 pop r31 pop r30 pop r27 pop r26 #endasm } #pragma savereg+ #ifndef _DEBUG_TERMINAL_IO_ // Write a character to the USART Transmitter buffer #define _ALTERNATE_PUTCHAR_ #pragma used+ void putchar(char c) { while (tx_counter == TX_BUFFER_SIZE); #asm("cli") if (tx_counter || ((UCSRA & DATA_REGISTER_EMPTY)==0)) { tx_buffer[tx_wr_index]=c; if (++tx_wr_index == TX_BUFFER_SIZE) tx_wr_index=0; ++tx_counter; } else UDR=c; #asm("sei") } #pragma used- #endif // Standard Input/Output functions #include <stdio.h> // Declare your global variables here void main(void) { // Declare your local variables here // Input/Output Ports initialization // Port B initialization // Func0=In Func1=Out Func2=In Func3=In Func4=In Func5=In Func6=In Func7=In // State0=T State1=0 State2=T State3=T State4=T State5=T State6=T State7=T PORTB=0x00; DDRB=0x02; // Port C initialization // Func0=In Func1=In Func2=In Func3=In Func4=In Func5=In Func6=In // State0=T State1=T State2=T State3=T State4=T State5=T State6=T PORTC=0x00; DDRC=0x00; // Port D initialization // Func0=In Func1=In Func2=In Func3=In Func4=In Func5=In Func6=In Func7=In // State0=T State1=T State2=T State3=T State4=T State5=T State6=T State7=T PORTD=0x00; DDRD=0x00; // 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 TCCR1A=0x00; TCCR1B=0x00; TCNT1H=0x00; TCNT1L=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 GICR|=0x00; 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=0x48; UCSRC=0x86; UBRRH=0x00; UBRRL=0x47; // Analog Comparator initialization // Analog Comparator: Off // Analog Comparator Input Capture by Timer/Counter 1: Off // Analog Comparator Output: Off ACSR=0x80; SFIOR=0x00; // Global enable interrupts #asm("sei") while (1) { // Place your code here printf("%b",1); printf("A"); delay_ms(75); }; }
دیدگاه
-
پاسخ : کمک کنید نمی تونم HMt و HMR رو راه بندازم
سلام
من با این ماژول یک رباط ساختم و کاملا به طرز کارشون اشنا هتم
اطلاعات اوله رو اینجا
http://najdi.persiangig.ir/document/mohZen.pdf
ببینید اگر کاتون راه نیفتاد بیشتر توضیح مدم
در اولین فرصت کدهای گیرنده و فرستنده رو براتون قرار می دهم
دیگر کارهای خودم رو هم اینجا میتونید ببینید
http://www.eca.ir/forum2/index.php?topic=30861.msg149053#msg149053www.tehranelec.com
دیدگاه
-
پاسخ : کمک کنید نمی تونم HMt و HMR رو راه بندازم
نوشته اصلی توسط محسن محمد خانیسلام
من با این ماژول یک رباط ساختم و کاملا به طرز کارشون اشنا هتم
اطلاعات اوله رو اینجا
http://najdi.persiangig.ir/document/mohZen.pdf
ببینید اگر کاتون راه نیفتاد بیشتر توضیح مدم
در اولین فرصت کدهای گیرنده و فرستنده رو براتون قرار می دهم
دیگر کارهای خودم رو هم اینجا میتونید ببینید
http://www.eca.ir/forum2/index.php?topic=30861.msg149053#msg149053
دوست عزیز روباتی که ساختید رو دیدم.واقعا متفکرانه ساخته شده.اگر ممکنه همونطور که اشاره کردید راجع به بخش فرستنده وگیرنده یک مقدار بیشتر توضیح بدید.با تشکر.
دیدگاه
دیدگاه