ايران ويج

نسخه‌ی کامل: ارسال میکرو به pc
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
کسی هست بتونه به منه بدبخت کمک کنه؟؟؟
من یه برنامه دارم که دمای دو نقطه را با سنسور lm35 و با adc اندازه گرفته و به pc میفرسته
برنامه روی پروتئوس درست کار میکنه
حتی با virtual terminal پروتئوسم چک کردم داده هارو درست میفرسته به پی سی
اما برنامه سمت پی سی فقط عدد 0 به من نشون میده
مشکل از کجاسـت؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟
این برنامه سمت میکرو:
کد:
#include <stdio.h>
#include <mega16.h>
#include <delay.h>
#include <lcd.h>
#define xtal 8000000
#asm
    .equ __lcd_port=0x18 //portb
#endasm
#define ADC_VREF_TYPE 0xC0
float t0,t1;
unsigned int read_adc(unsigned char adc_input){
    float temp1,temp2,var1,var2;
    ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
    delay_us(10);
    ADCSRA|=0x40;
    while ((ADCSRA & 0x10)==0);
    ADCSRA|=0x10;
    var1=ADCW/255;
    temp1=((var1*2.56)/1023)*100;
    var2=ADCW%255;
    temp2=((var2*2.56)/1023)*100;
    return temp1,temp2;
}
void main(void){
    char buffer1[16],buffer2[16];
    lcd_init(16);
    SFIOR=0x00;
    ADMUX=ADC_VREF_TYPE & 0xff;
    ADCSRA=0x86;
    UCSRA=0x00;
    UCSRB=0x08;
    UCSRC=0x86;
    UBRRH=0x00;
    UBRRL=0x33;
    while (1){
        t0=read_adc(0);
        t1=read_adc(1);
        lcd_clear();
        sprintf(buffer1,"T0=%f\n",t0);
        lcd_puts(buffer1);
        sprintf(buffer2,"T1=%f",t1);
        lcd_puts(buffer2);
        printf("%s%s",buffer1,buffer2);
        delay_ms(100);
    };
}

اینم برنامه سمت pc :
کد:
[align=left]Option Explicit
Option Base 1
Dim buffer As Variant, b As Variant
Private Sub Form_Load()
MSComm1.Settings = "9600,n,8,1"
MSComm1.RThreshold = 1
MSComm1.SThreshold = 1
MSComm1.InputLen = 1
MSComm1.CommPort = 6
MSComm1.PortOpen = True
End Sub
Private Sub Form_Unload(Cancel As Integer)
MSComm1.PortOpen = False
End Sub
Private Sub MSComm1_OnComm()
If MSComm1.CommEvent = comEvReceive Then
buffer = MSComm1.Input
Text1.Text = Asc(buffer)
End If
End Sub[/align]

اینم پروتئوس :
http://www.upload.iran-forum.ir/download32571.html
چرا هیچکس جواب نمیدهههههههههههههههههههههههه؟؟؟؟؟؟؟؟
برنامه کامپیوتر مرتب عدد صفر رو دریافت می کنه؟ یا اصلا هیچی دریافت نمی کنه؟
فکر کنم با کلاک 8 مگاهرتز و باند ریت 9600 به مشکل بر میخوره.توی پروتئوس ارور ها رو در نظر نمیگیره.
کلاک رو بکن 1 مگاهرتز و باند ریت رو بزار 110.سرعتش اونقدری هست که حس نشه ولی احتمالا مشکل حل میشه.
اگه این کار رو کردی حتما توی دیواس منیجر هم تغیرات رو انجام بده و توی ترمینال هم همینطور.
من کاریکه گفتید کردم
اما بازم عدد صفر نشون میده همه تنظیماتی که گفتید انجام دادم
اما فقط عدد 0 نشون میده
حالا باید چه کنم؟ Confused
سلام.

من با C# قبلا همچين كاري كردم ...
اگر اشتباه نكنم با baud 19200 هم بود ، با بيشترش هم مي شه جواب گرفت ...
با VB6 كار نكردم ، اما ...
طبق اين كد زير :
Text1.Text = Asc(buffer)

شما داري مقداري رو كه دريافت كردي به فرم ASCII توي textBox مي ريزي ...
به نظرم اين كار اشتباه باشه ... ، تاجايي كه من مي دونم textBox مقادير نوشته شده درش string هستن و براي نوشتن به textBox هم بايد داده ها رو به string تبديل كني ...
حداقل تو C# كه اينطوريه ...
يه امتحاني كن ،‌شايد اشكال از همين باشه ... ، البته كل برنامه رو چك نكردم و اتفاقي چشم به اون كد كه گفتم افتاد ...
براي امتحان كردن چيزي كه گفتم هم تو خود VB راحت مي شه تستش كرد و لازم نيست حتما ارتباطي با ميكرو برقرار كني ...
به هر حال هر جور مي توني امتحانش كن ...

موفق باشي.
يا علي.
خوب من داده ایی که دریافت میکنم عدد هست
به فرم اسکی کردم که تبدیل به رشته بشه و بعد توی text نشون بده
راستش من خودمم vb زیاد بلد نیستم
اما دوستامم برای پروژه هاشون توی برنامه سمت pc دقیقا همینکارو انجام دادن چون عددی که دریافت میکنه از میکرو که رشته نیست پس باید یه جوری تبدیلش کنه به رشته بعد نشون بده درسته؟
من با باد ریت های مختلف انجام دادم بازم همین مشکلو داره
توی هایپر ترمینالم تست کردم داده رو میفرسته اما نمیدونم چرا سمت pc مدام عدد 0 نشون میده!!!
حتی ارتباط FT232 هم چراغ RXش 10 بار روشن میشه یعنی معلومه که داده رو میفرسته اما روی پی سی نمیدونم چرا 0 نشون میده به هزار نفر هم نشون دادم گفتن برنامه میکرو هیچ مشکلی نداره شاید ایراد از برد باشه یا از برنامه سمت pc اما روی دو تا برد دیگه هم بستم امتحان کردم همین مشکلو داره!
یعنی یه عددی نشون میده بعدش سریع تبدیل میکنه به 0 انقدر سریع اینکارو میکنه که من اصلا نمیتونم بخونم اون عدد اولیه چنده! یعنی اصلا نمیبینمش فورا 0 میشه!
دوست عزیز شما با HyperTerminal تست کنید.
(۲۵-دى-۱۳۹۰, ۱۷:۵۸:۵۲)pouya75 نوشته است: [ -> ]دوست عزیز شما با HyperTerminal تست کنید.
دوست عزیز ممنون از پاسختون
اما اگه نظر قبلی منو باد قت خونده باشید نوشتم که با هایپر ترمینال هم تست کردم درست بود و داده رو میفرستاد!
هم با ویرژوال ترمینال پروتئوس تست کردم ، هم با هایپر ترمینال هردو درست کار میکرد
من به خیلیها این پروژه رو نشون دادم حتی به استادم نشون دادم اونم نفهمید ایرادش کجاست فقط میگه باید پروژت جواب بده تا کامل درست نشه نمرتو نمیدم....... کمک کنید لطفا
ای خدآآآآآآآآآآآآآآآآآآآآآآآآآآآآآآآآآآآآآآآآآآآ
آهان ...

خوب زودتر مي گفتيد.
براي ASCii هنوز سر حرفم هستم !! ، Ascii كد هاي 3 رقميه ... ، مگر اينكه اين VB اتوماتيك تبديلش كنه به String
به هر حال با توجه به چيزي كه گفتيد ،‌داده ها روي هم Over write مي شن ... !
مشكل برنامه ي سمت PC هست ،‌100%
توي C# من اين كار رو مي كنم ، ببين توي VB جواب مي دهه يا نه ... ( البته از تابع هاي .net استفاده مي كنم نه Ascii !! )

Text1.Text += Asc(buffer)
اون + قبل از مساوي ، باعث مي شه اعداد پشت سر هم به نمايش در بيان و روي هم ديگه نوشته نشن ... !

موفق باشي.
يا علي.
InputLen و RThreshold برابر تعداد کاراکتر ارسالی در هر دوره بگذارید و بعد از هر دریافت پورت را بسته و مجددا باز کنید و متن دریافتی را مستقیما در Text Box بریزید.Question
نکته خاص دیگری هم یادم نمی آید.
مشکلی بود در خدمتیم.
در ضمن من از این روش جواب گرفتم.Question