PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : مشکل با ارسال داده با rs232



zahrashariati
13-12-2012, 19:30
سلام دوستان
من با مگا128 یه برنامه نوشتم که یه رشته روی tx بنویسه و از طریق max232 و پورت سریال با کامپیوتر در ارتباط باشه. اتصالات درست هست و یک کاراکتر رو می تونم بفرستم و بخونم. مشکلم اینه که توی کد سراغ خط بعدی نمیره و مدام اون کاراکتر رو ارسال می کنه، حتی وقتی یه رشته رو می فرستم، فقط کاراکتر اولش رو دائم می فرسته و سراغ کاراکترهای بعدی نمیره. یجوری انگار که متوجه نمیشه که ارسال دیتا درست انجام شده. سوالی که دارم اینه که حتما باید پین 3 سریال رو هم به پورت rx وصل کنم؟ چون من فقط میخواستم از میکرو روی خروجی بنویسم و احتیاجی به دریافت اطلاعات از طریق پورت سریال نداشتم، فقط پایه های 2 و زمین رو وصل کردم.
اگر لازم باشه که پایه 3 هم وصل شه، حتما باید از طریق max232 اونو هم وصل کنم؟
پیشاپیش ممنون

zakariya moradi
13-12-2012, 21:34
سلام
سورس کد رو بذارید همین جا تا مشکل رو بررسی کنیم .

habib_sadeghi
13-12-2012, 23:21
لزومی به وصل کردن پایه 3 نیست من بارها این کار رو انجام دادم و از این موضوع مطمئن هستم که ارسال و دریافت میتواند بصورت مستقل انجام شود .

zahrashariati
13-12-2012, 23:49
سلام
سورس کد رو بذارید همین جا تا مشکل رو بررسی کنیم .
ممنون
این هست کد توی کد ویژن


#include <mega128.h>
#include <delay.h>
#include <stdio.h>



void main(void)
{
// Declare your local variables here
PORTA=0x00;
DDRA=0x00;

PORTB=0x00;
DDRB=0x00;

PORTC=0x00;
DDRC=0x00;

PORTD=0x00;
DDRD=0x00;

PORTE=0x00;
DDRE=0x00;

PORTF=0x00;
DDRF=0x00;

PORTG=0x00;
DDRG=0x00;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=0xFF
// OC0 output: Disconnected
ASSR=0x00;
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer1 Stopped
// Mode: Normal top=0xFFFF
// OC1A output: Discon.
// OC1B output: Discon.
// OC1C output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
// Compare C Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
OCR1CH=0x00;
OCR1CL=0x00;

// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer2 Stopped
// Mode: Normal top=0xFF
// OC2 output: Disconnected
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;

// Timer/Counter 3 initialization
// Clock source: System Clock
// Clock value: Timer3 Stopped
// Mode: Normal top=0xFFFF
// OC3A output: Discon.
// OC3B output: Discon.
// OC3C output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer3 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
// Compare C Match Interrupt: Off
TCCR3A=0x00;
TCCR3B=0x00;
TCNT3H=0x00;
TCNT3L=0x00;
ICR3H=0x00;
ICR3L=0x00;
OCR3AH=0x00;
OCR3AL=0x00;
OCR3BH=0x00;
OCR3BL=0x00;
OCR3CH=0x00;
OCR3CL=0x00;

// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// INT2: Off
// INT3: Off
// INT4: Off
// INT5: Off
// INT6: Off
// INT7: Off
EICRA=0x00;
EICRB=0x00;
EIMSK=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;

ETIMSK=0x00;

// USART0 initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART0 Receiver: Off
// USART0 Transmitter: On
// USART0 Mode: Asynchronous
// USART0 Baud Rate: 9600
UCSR0A=0x00;
UCSR0B=0x08;
UCSR0C=0x06;
UBRR0H=0x00;
UBRR0L=0x2F;

// USART1 initialization
// USART1 disabled
UCSR1B=0x00;

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;

// ADC initialization
// ADC disabled
ADCSRA=0x00;

// SPI initialization
// SPI disabled
SPCR=0x00;

// TWI initialization
// TWI disabled
TWCR=0x00;
#asm("sei");
while (1)
{
puts("salam");
putchar('a');

}
}

البته توی مدار هم خروجی رو به max232 دادم
پایه های 13 و 8 (R1in , R2in) رو هم به زمین وصل کردم که بعید می دونم ربطی داشته باشه!
با هایپر ترمینال هم تستش می کنم

habib_sadeghi
13-12-2012, 23:59
هیچ لزومی به زمین کردن پایه هایی که گفتین وجود نداره .

zahrashariati
14-12-2012, 00:08
آره ولی اشکالی هم ایجاد نمی کنه
من تو پروتئوس چک می کنم مشکلی نداره، تنها حدسم اینه که توی اتصالات max232 یا خازن هاش یه مشکلی داشته باشم
کسی در این زمینه میتونه راهنمایی کنه؟ یا اینکه کلا دلیل اینکه کاراکتر اول مدام ارسال میشه چی میتونه باشه؟

habib_sadeghi
14-12-2012, 00:21
یه نگاه به این مطلب بکنید بد نیست

zahrashariati
14-12-2012, 01:10
ممنون، اتصالات max232 م درست بود
یه احتمالی که خودم میدم اینه که میکرو دائم در حال ریست شدن هست. با یه کد دیگه که ال ای دی روشن خاموش می کرد تستش کردم و دیگه این مشکل رو نداشت، یعنی به نظر نمی اومد که ریست بشه، اما وقتی usart رو فعال می کنم و باهاش دیتا ارسال می کنم به محض فرستادن کاراکتر اول ریست میشه
ممنون میشم اگر کسی نظری داره دریغ نکنه :(

habib_sadeghi
14-12-2012, 12:18
انجام این کار در بیسیک بسیار راحت تره

zahrashariati
14-12-2012, 12:50
مشکل از کد نیست که، توی پروتئوس هم مشکلی ندارم، مشکل از مدار یا پی سی بی هست

habib_sadeghi
14-12-2012, 16:49
پلاریته خازنهای الکترولیت همچنین مقدارشون و سالم بودنشون خیلی مهمه سالم بودن خازن رو چک کردید .

zahrashariati
14-12-2012, 17:09
یه بار دیگه که چک کردم دیدم به خاطر استفاده از تابع delay هست که ریست میشه. هر وقت به این تابع می رسه خودبخود ریست میشه. موقع ارسال کاراکتر هم فکر می کنم توی کتابخونه اش از این تابع استفاده کرده که ریست میشه.
برای کریستالم دو تا خازن عدسی 22 پیکو گذاشتم
برای max232 خازن هام یک میکرو هستن، چطور می تونم سالم بودنشون رو چک کنم؟

zahrashariati
14-12-2012, 17:53
دوستان ممنون از راهنمایی هاتون
مشکلش حل شد ولی باورم نمیشه این باشه
نشستم فیوز بیت ها رو یکی یکی تغییر دادم، مشکل از 0 بودن فیوز بیت M103، کامپتیبل بودن با mega103 بود

marcopolo13
21-07-2013, 21:30
با سلام
من اون برنامه ای رو که فایلشو گذاشته بودید بستم ولی روی LCD به جای چیزایی که میفرستم خونه ی سیاه میاد. خازن هامم 1u هست
از چی میتونه باشه؟
با تشکر