# برنامه نویسی میکروکنترلر (MicroController) ها و MicroProcessor ها > برنامه نویسی سیستم های Embeded > AVR >  مشکل ارتباط میکرو با ماژول sim908

## saba7darya

سلام 
من در ارتباط میکرو با ماژولم مشکل دارم
برنامه ارسال پیام رو روی میکرو atmega16 با بادریت 9600 پیاده کردم در ضمن بادریت ماژول sim908 ام رو هم با استفاده از هایپر ترمینال روی 9600 تنظیم کردم و با usbasp programmer اونو پروگرم کردم البته بگم که تنظیمات پیش فرض این پروگرمر رو تغییر ندادم از کریستال خارجی هم استفاده نکردم تنظیمات فیوز بیتها رو هم تغییر ندادم میکروی من با همین پروگرمر تغذیه میشه که دایم به pc ام وصله jtag اون فعاله
برای ارتباط ماژول با pc هم از usb به سریال استفاده کردم tx ,rx ها رو هم ضربدری از ماژول به میکروم و pc وصل کردم دستورات از pc به ماژول قابل پیاده سازی هست و مشکلی هم در ارسال و دریافت پیامک نداره ولی از میکرو به ماژول مشکل دارم در ضمن اتصالات پایه های vcc , GND,RX,TX,powerkey رو برقرار کردم و از بقیه پایه ها بهره نبردم
میشه لطفا بگید مشکل کجاست

----------


## مهدی کرامتی

شما در مورد چیزهایی که کار می کنه کلی توضیح دادید. اما در مورد مشکل اصلی تون غیر از عبارت "ولی از میکرو به ماژول مشکل دارم" توضیح خاصی ندادید که دقیقا چه مشکلی موقع کار با میکرو دارید.

----------


## saba7darya

آقای مهندس همه توضیحاتی که دادم برای این بوده که اگه در انجام هر کدوم مشکلی هست با راهنمایی و کمک دوستان برطرف کنم برنامه ارسال sms رو در میکرو پروگرم کردم  و ارتباط میکرو و ماژولم هم طبق آنچه که گفتم برقراره ولی ماژولم sms نمیفرسته

----------


## amir_mhdi

اگر درست متوجه شده باشم ، شما با هایپر ترمینال که به ماژول وصله میتونید sms بفرستید ولی با میکرو که به ماژول وصله نمیتونید ، درسته؟
من تقریبا سال 85 بود که با این ماژولها (MC35) کار کردم ، شاید خیلی خوب یادم نباشه ولی خاطرم هست که بعد از اینکه متن sms رو تایپ میکردیم (البته تو مود تکست) ، آخرش باید Ctrl+Z رو میزدیم.
آیا تو میکرو هم شما به عنوان آخرین بایت ارسالی این کاراکتر رو میفرستید؟ یعنی کاراکتر 26 .

----------


## saba7darya

بله من مطمئنم که در تنظیم فیوز بیتها مشکل دارم البته تازه فهمیدم که باید از کریستال خارجی استفاده کنم برنامه مشکلی نداره چون توی اینترنت خیلی ها با این برنامه به جواب رسیده بودند مشکل اصلی تو اینه که چه کریستالی و چه تنظیماتی باید انجام بشه لطفا اگه میدونید راهنمایی کنید ، ممنون

----------


## amir_mhdi

چیپت چیه؟ فیوزبیتهات رو بخون ببینیم روی چه وضعیتی هستی.

----------


## saba7darya

از آی سی atmega16 با بادریت 9600 و کریستال خارجی 11.0592 بهره بردم

----------


## saba7darya

در حقیقت هیچی از تنظیمات فیوزبیتها و دستورات مربوط و ... در کدویژن نمیدونم لطفا راهنمایی کنید چگونه این کار رو انجام بدم البته یکی از دوستان گفتش کلاک ها رو موقع پروگرم کردن 1101 بگیرم نمیدونم توی برنامه نویسی هم باید دستوراتی منظور شه یا خیر،لطفا به طور کامل این مبحث رو توضیح بدید قبلا از صبر و راهنماییتون سپاسگذارم

----------


## amir_mhdi

تو این سایت اطلاعات خوبی راجع به فیوزبیتها هست :
http://www.eca.ir/forum2/index.php?topic=20473.0
شما اول یمقدار مطالعه بفرمایید ، بعد اگر سوالی بود در خدمتم.

موفق باشید.

----------


## saba7darya

همونطور که گفتم چون کریستال خارجی 11059200 استفاده کردم ،فیوز بیتها رو هم طبق اون 12Mبا برنامه fast help پیدا کرده و با پروگرمرusbasp programmer تغییر دادم اما هیچ نتیجه ای حاصل نشد (راستی تو یه سایتی برای این کریستال همه کلاکها رو 1 کرده بود)  مشکل کار کجاست در ضمن من با این sim908 خریداری شده از eca کلی مشکل دارم خصوصا توی آنتن دهی و راه اندازیش با این که خازن 2200 میکرو فاراد سر راه تغذیه اش استفاده کردم و آداپتور 5 ولت 5 آمپر البته با یک دیود سر راه تغذیه، ولی باز مشکلات آنتن دهی و راه اندازیش به قوه خود باقی است اکثر جاها آنتن ندارم

----------


## amir_mhdi

شما برای بادریت 9600 نیازی به کریستال خارجی ندارین و با همون 8 مگ داخلی میتونید کار کنید. برای اینکار باید بزارید روی 0100 یعنی فقط CKSEL 2  رو یک کنید و بقیه صفر باشند.
کامپایلرتون هم اگر کدویژن هست ، دو تا کار انجام بدین. اولا تو کانفیگ پروژت کریستال رو بزار رو 8 مگ و. ثانیا این رجیستر رو تغییر بده UBRRL=0x33; تا با کریستال 8 مگ بتونی بادریت 9600 داشته باشی.
مشکل آنتن دهی :
باید ببینیم شما از چه دیودی استفاده کردید. ممکنه اون دیود تو لحظه ای که جریانکشی دارید نمیتونه اون میزان جریان رو عبور بده و افت ولتاژ ایجاد میشه.
شما باید ولتاژ ورودی ماژول رو که مثلا باید بین 3.2 تا 4.8 ولت باشه که البته 4 ولت پیشنهاد میشه رو بگیرید. ببینید وقتی ماژول داره به شبکه وصل میشه آیا تغییری تو سطح ولتاژ ایجاد میشه یا نه.
اگر ایجاد بشه و بیشتر از 300 میلی ولت باشه ، نشون میده که تغذیتون مشکل داره. حالا باید ولتاژ خروجی تغذیه قبل از دیود رو بگیرید تا ببینید که اون هم افت داره یا نه.
اگر افت نداشت ، احتمالا دیودتون رو باید عوض کنید.

----------


## saba7darya

سلام ، از اینکه اینطور دقیق توضیح میدید ممنون ، در ضمن روزتون هم مبارک آقای مهندس، 
متاسفانه با تنظیماتی هم که گفتید  باز هم پیامک ارسال نشد و همچنان این مشکل به قوه خود باقیست در مورد تغذیه هم بعد از دیود هنگام راه اندازی در ابتدا 4.49 بود وقتی دنبال شبکه میگشت 4.34 و الان که ثابت شده 4.41 اینها روی پایه های ماژول هست بعد از دیود 1N4007 ، تغذیه اصلی هم 5.19 هستش البته اینجا آنتن دارم
در ضمن من تنها پایه های vcc,GND,rx,tx,xtal,int0 + button for send sms میکرو رو استفاده کردم اصلا نمیدونم مشکل کجاست برای ماژول هم تنها از پایه های تغذیه و rx,tx که ضربدری به میکرو وصلش کردم بهره بردم درحالی که آنتن دارم اما ...

----------


## amir_mhdi

ممنون.
تغذیه میکروت چنده؟ دیتایی که باید به سمت ماژول بره باید 3.3 ولت باشه؟ اصلا به AT Command های ارسالی از میکرو جواب میده؟ مثلا وقتی میزنی که phonebook رو بخونه ، آیا این کار رو انجام میده؟

اگر بتونی کدت رو بصورت کامل بزاری اینجا بهتر میشه راجع بهش صحبت کرد.
موفق باشی.

----------


## saba7darya

> ممنون.تغذیه میکروت چنده؟ دیتایی که باید به سمت ماژول بره باید 3.3 ولت باشه؟ اصلا به AT Command های ارسالی از میکرو جواب میده؟ مثلا وقتی میزنی که phonebook رو بخونه ، آیا این کار رو انجام میده؟اگر بتونی کدت رو بصورت کامل بزاری اینجا بهتر میشه راجع بهش صحبت کرد.موفق باشی.


سلام دوست عزیز ممنون از راهنماییتونتغذیه میکروم 4.4 هست من میتونم ارتباط ماژول و pc رو برقرار کنم به ماژولم فرمان بدم پیامک بفرستم بخونم و ... ولی نمیدونم چطوری بین میکرو و pc ارتباط برقرار کنم و چه برنامه ای بنویسم و کلا تو این قسمت مشکل دارم شاید اگه برنامه یا روشی برای این منظور در اختیارم قرار بدید متوجه مشکل بشم اما برنامه ای که گفتید  من عین برنامه ای که توی لینک زیر هست رو نوشتم http://www.mrkelectronic.com/forums/...ad.php?tid=419 در ضمن زمانیکه از کدویزارد استفاده میکردم ubrrl=0x33 هنگام تنظیمات در قسمت usart بادریت رو 9600 انتخاب کردم فرکانس چیپ رو هم 8 مگ گرفتم هنگام تنظیمات فیوز بیتها هم کلاک 2پروگرمر رو 1 زدم اینها برای زمانی بود که از کریستال داخلی استفاده کردم  زمانی هم که از کریستال خارجی 11059200 استفاده کردم هم یه بار تمام کلاک ها رو یک کردم وهم بار دیگر 1101 هر کاری میکنم درست نمیشه 

#include <mega16.h>
#include <stdio.h>
#include <delay.h>
char Enter=13;
char double_quote=34;
char Ctrlz=26;
void main(void)
{
PORTD=0x00;
DDRD=0x00;
UCSRA=0x00;
UCSRB=0x18;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x26;
while (1)
{
if (PIND.2==0){
printf("at%c",Enter);
delay_ms(500);
printf("AT+CMGF=1%c",Enter);
delay_ms(500);
printf("at+cmgs=%c+9891***%c%c",double_quote,doubl  e_quote,Enter);
delay_ms(100);
printf("Are you ok?%c",Ctrlz);
delay_ms(100);
};
} ;
}


دقیقا نمیدونم چه باید بکنم شاید تنظیماتم مشکل داره لطفا دقیقا راهنمایی کنید چه قسمتهایی رو باید مد نظر قرار بدم ممنون

----------


## amir_mhdi

این کد رو تست کنید تا ببینیم هر کاراکتری که توی ترمینال ویندوز میزنید ، میکرو دریافت میکنه یا نه.
این برنامه ساده میاد هر کاراکتری رو که شما میزنید رو میگه "data is A"  ، فرضا اگر کلید A رو زده باشید.
اگر این برنامه درست کار کنه یعنی اینکه ارتباط میکرو و pc برقراره. البته تنظیمات با همون کریستال 11.0592  هست. یعنی 0x47.
اگر با 8 مگ بخواید میشه 0x33.

#include <mega16.h>
#include <stdio.h>
#include <stdlib.h>
#include <delay.h>
//--------------------------------------------------------------
interrupt [USART_RXC] void usart_rx_isr(void)
{
    char status,data;
    status=UCSRA;
    data=UDR;
    if ((status & 28)==0)
    {
        printf("data is %c\r",data);
    };
}
//--------------------------------------------------------------
void main(void)
{
    UCSRA=0x00;UCSRB=0x98;UCSRC=0x86;UBRRH=0x00;UBRRL=  0x47;
    #asm("sei"); 
    while (1);
}

----------


## saba7darya

ممنون از راهنماییتون  :تشویق: برنامه رو پروگرم کردم از کریستال 11.0592استفاده کرده و  همه فیوزبیتها رو یک کردم منظورم clock,stu هاست در این حالت زمانی که bit per second هایپرترمینال رو 9600 کردم جواب داد روی بقیه جواب نداد 
خوب استاد حالا میگید چی کار کنم

----------


## amir_mhdi

اگر جواب داد ، یعنی میزد که data is فلان ، یعنی ارتباط میکرو و pc برقراره.
راستی مگه از مگا 16 استفاده نمیکنی؟ اونکه یکی پورت سریال بیشتر نداره. چجوری هم به کامپیوتر وصلش کردی هم به ماژول؟
حالا....  :لبخند: 
کدت رو هم اینجوری تغییر بده :

printf("AT\r\n");
delay_ms(500);
printf("AT+CMGF=1\r\n");
delay_ms(500);
printf("AT+CMGS=\"+9891***\"\r\n");
delay_ms(100);
printf("Are you ok?%c",Ctrlz);
delay_ms(1000);


موفق باشی.

----------


## saba7darya

سلام 
ممنون از پاسختون ولی این هم جواب نداد من حتی تاخیر رو هم بیشتر کردم ولی جواب نداد
به نظر شما برنامه اشکال نداره ؟
من هم برنامه شما رو پروگرم کردم و هم آخرین تغییرات که دادم البته تو یه سایت خارجی این مشکل مطرح شده بود که برنامه اون تاخیراتی این چنینی داشت
http://www.edaboard.com/thread307338.html

#include <mega16.h>
#include <stdio.h>
#include <delay.h>
void main(void)
{
PORTD=0x00;
DDRD=0x00;
UCSRA=0x00;
UCSRB=0x18;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x47;
while (1)
{
if (PIND.2==0){
printf("AT\r\n");
delay_ms(500);
printf("AT+CMGF=1\r\n");
delay_ms(500);
printf("AT+CMGS=\"+9891******\"\r\n");
delay_ms(2000);
printf("Are you ok?");
delay_ms(2000);
putchar(26);
};
} ;
}
انگار مشکل من یه مشکلی بوده که خیلیها باهاش درگیر بودند  :متفکر: 
حالا  میگید چی کار کنم

----------

