ايران ويج

نسخه‌ی کامل: سوالات بدون انتهای من!
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
صفحه‌ها: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
بازهم مشکل با کامپایلر کدویژن.
بچه ها مگه تایمر کانتر 3 16بیتی نیس؟پس چرا تو کدویژن 8بیتیه فقت؟یعنی تا 255 میشموره.ولی با بیسکام اینطوری نیس.
مشکل از کجاس؟
(همه ی تایمر هارو کانفیگ کردم و جواب گرفتم بجز تایمر 3)
بعد یه چیز دیگه خودمم باورم نمیشه تایمر یکم منفی هم میشمورهAngry005033
واقعا که عجایب 7گانه 8گانه شد.Amaze
یعنی چه منفی هم میشموره! وقفه کانتر کاری به کامپایلر نداره که !
نقل قول: یعنی چه منفی هم میشموره!
یعنی تا یه جایی مثبت میموره بعد منفی میشه!

نقل قول: وقفه کانتر کاری به کامپایلر نداره که !
وقفه کجا بود؟کانتر کجابود؟
من مشکلم با تایمر 3 هستش.که تا 255 میشموره.
باید چیکارش کنم؟شیفتش کنم؟
توی چه میکرویی رو میگی؟تایمر سه که میگی اسمش سه هست یا شمارش؟
atmega128
(۰۳-شهریور-۱۳۹۱, ۰۹:۱۳:۱۰)h.unique نوشته است: [ -> ]
نقل قول: یعنی چه منفی هم میشموره!
یعنی تا یه جایی مثبت میموره بعد منفی میشه!

نقل قول: وقفه کانتر کاری به کامپایلر نداره که !
وقفه کجا بود؟کانتر کجابود؟
من مشکلم با تایمر 3 هستش.که تا 255 میشموره.
باید چیکارش کنم؟شیفتش کنم؟
وقتی وقفه روی بده کانتر صفر میشه اولا
دوما اگه منفی میشه شاید نوع متغییری که استفاده کردی درست نیست
متغیر استفاده نکردم.
ریجیستر رو مستقیما میخونم.
اشتباه از توی برنامه خودته کدویژن کانتر 3 رو 16 bit نوشته که

حالا بت میگم

صفحه 196 کتاب رو بخون ببین نکاتش رو رعایت کردی
بعد
برای خواندن کانتر 3و1(16 بیتی) باید دو بایت رو بخونی
1- tcntxl
2- tcntxh
به ترتیب هم باید بخونی که بایت کم ارزش پر ارزشه

اگر اول 1 رو نخونی پر ارزشه یا مقداری نداره یا درست نیست

کد:
int a,b;
      a=TCNT3L;
      b=TCNT3H<<8;
      b+=a;
      printf("%u",b);
دوستان هلپپپپپپپپپپپپپ.
باور کنید دیگه دارم بالا میارم اینقد دیگه با پی سی بودم.(البته گلاب به روتون)
من با تایمر 1و3 تو کد ویژن مشکل دارم.اونم اینه که هر تو تایمر که 16 بیتی هستش ولی تا 255 میشموره.تو کتابش یه چیزایی نوشته بود که نتونستم اونو درست اجرا کنم.یکی از دوستان گلمم که راهنمایی کرده بود اونم جواب نداد.

این برنامه بیسیک:(که مشکلی نداره):

کد:
$regfile = "m128def.dat"
$crystal = 8000000

Config Lcdpin = Pin , Db7 = Porta.7 , Db6 = Porta.6 , Db5 = Porta.5 , Db4 = Porta.4 , E = Porta.3 , Rs = Porta.1
Config Timer0 = Timer , Prescale = 8 : Config Timer1 = Timer , Prescale = 8 : Config Timer2 = Timer , Prescale = 8 : Config Timer3 = Timer , Prescale = 8
Config Pind.0 = Input

Dim S As String * 5

Start Timer0
Start Timer1
Start Timer2
Start Timer3

S = Space(5)

Cursor Off

Dim B As Word

Do
Locate 1 , 1 : Lcd "Timer0=" ; Timer0 ; S
Locate 2 , 1 : Lcd "Timer1=" ; Timer1 ; S
Locate 3 , 1 : Lcd "Timer2=" ; Timer2 ; S
Locate 4 , 1 : Lcd "Timer3=" ; Timer3 ; S
If Pind.0 = 1 Then
Stop Timer0
Stop Timer1
Stop Timer2
Stop Timer3
Locate 1 , 1 : Lcd "Timer0=" ; Timer0 ; S
Locate 2 , 1 : Lcd "Timer1=" ; Timer1 ; S
Locate 3 , 1 : Lcd "Timer2=" ; Timer2 ; S
Locate 4 , 1 : Lcd "Timer3=" ; Timer3 ; S
Timer0 = 0
Timer1 = 0
Timer2 = 0
Timer3 = 0
Wait 2
Start Timer0
Start Timer1
Start Timer2
Start Timer3
End If
Loop

End                                                         'end program


اینم برنامه سی که مشکل داره:
کد:
#include <mega128.h>
#include <alcd.h>
#include <stdio.h>
#include <delay.h>

char a[20];
char b[20];
char c[20];
char d[20];

unsigned int aa;

void main(){
PORTD=0x01;
DDRD=0x01;
TCCR0=0x02;
TCCR1B=0x02;
TCCR2=0x02;
TCCR3B=0x02;
lcd_init(20);
do{
aa= (TCNT1L*256,TCNT1L+TCNT1H);
sprintf(a,"Timer0=%d",TCNT0);
sprintf(b,"Timer1=%d",aa);
sprintf(c,"Timer2=%d",TCNT2);
sprintf(d,"Timer3=%d",aa);
lcd_gotoxy(0,0);lcd_puts(a);lcd_putsf("   ");
lcd_gotoxy(0,1);lcd_puts(b);lcd_putsf("   ");
lcd_gotoxy(0,2);lcd_puts(c);lcd_putsf("   ");
lcd_gotoxy(0,3);lcd_puts(d);lcd_putsf("   ");
if (PIND.0==1){
TCCR0=0x00;
TCCR1B=0x00;
TCCR2=0x00;
TCCR3B=0x00;
lcd_gotoxy(0,0);lcd_puts(a);lcd_putsf("   ");
lcd_gotoxy(0,1);lcd_puts(b);lcd_putsf("   ");
lcd_gotoxy(0,2);lcd_puts(c);lcd_putsf("   ");
lcd_gotoxy(0,3);lcd_puts(d);lcd_putsf("   ");
TCNT0=0;
TCNT1=0,
TCNT2=0;
aa=0;
TCCR0=0x02;
TCCR1B=0x02;
TCCR2=0x02;
TCCR3B=0x02;
delay_ms(2000);}
}while(1);
}

اینم شبیه ساز:
[تصویر:  Timer_p_b_c.jpg]

2.دستوری داریم که چند متغیر و عبارت رو با یک دستور رو lcd نشون بده.(تو کدویژن)
مثلا تو بیسیک این هستش:
کد:
Locate 1 , 1 : Lcd "Timer0=" ; Timer0 ; S
من تو کدویژن اینو میدونم که باید یه رشته بنویسی بعد اونو برگردونی بعد از اون رو lcd نشون بدی.که فقط یک متن و یک متغیر رو نشون میده.

3.اینی که میگن فرکانس رو با تایمر بسازی دقیق تره با PWM این کارو میکنن؟
بعد میکرو حداکثر تا چه مقدار میتونه فرکانس بسازه؟و چگونه؟

4.این دستور که تو بیسیک هستش تو کدویژن چطوریه؟
کد:
On Timer1 Label
On Harchize Dgei Label

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

با تشکر فراوان از همه ی شما عزیزان...HeartHeartHeartHeartHeart
(۰۳-شهریور-۱۳۹۱, ۱۳:۴۱:۰۶)h.unique نوشته است: [ -> ]دوستان هلپپپپپپپپپپپپپ.
باور کنید دیگه دارم بالا میارم اینقد دیگه با پی سی بودم.(البته گلاب به روتون)
من با تایمر 1و3 تو کد ویژن مشکل دارم.اونم اینه که هر تو تایمر که 16 بیتی هستش ولی تا 255 میشموره.تو کتابش یه چیزایی نوشته بود که نتونستم اونو درست اجرا کنم.یکی از دوستان گلمم که راهنمایی کرده بود اونم جواب نداد.

این برنامه بیسیک:(که مشکلی نداره):

کد:
$regfile = "m128def.dat"
$crystal = 8000000

Config Lcdpin = Pin , Db7 = Porta.7 , Db6 = Porta.6 , Db5 = Porta.5 , Db4 = Porta.4 , E = Porta.3 , Rs = Porta.1
Config Timer0 = Timer , Prescale = 8 : Config Timer1 = Timer , Prescale = 8 : Config Timer2 = Timer , Prescale = 8 : Config Timer3 = Timer , Prescale = 8
Config Pind.0 = Input

Dim S As String * 5

Start Timer0
Start Timer1
Start Timer2
Start Timer3

S = Space(5)

Cursor Off

Dim B As Word

Do
Locate 1 , 1 : Lcd "Timer0=" ; Timer0 ; S
Locate 2 , 1 : Lcd "Timer1=" ; Timer1 ; S
Locate 3 , 1 : Lcd "Timer2=" ; Timer2 ; S
Locate 4 , 1 : Lcd "Timer3=" ; Timer3 ; S
If Pind.0 = 1 Then
Stop Timer0
Stop Timer1
Stop Timer2
Stop Timer3
Locate 1 , 1 : Lcd "Timer0=" ; Timer0 ; S
Locate 2 , 1 : Lcd "Timer1=" ; Timer1 ; S
Locate 3 , 1 : Lcd "Timer2=" ; Timer2 ; S
Locate 4 , 1 : Lcd "Timer3=" ; Timer3 ; S
Timer0 = 0
Timer1 = 0
Timer2 = 0
Timer3 = 0
Wait 2
Start Timer0
Start Timer1
Start Timer2
Start Timer3
End If
Loop

End 'end program


اینم برنامه سی که مشکل داره:
کد:
#include <mega128.h>
#include <alcd.h>
#include <stdio.h>
#include <delay.h>

char a[20];
char b[20];
char c[20];
char d[20];

unsigned int aa;

void main(){
PORTD=0x01;
DDRD=0x01;
TCCR0=0x02;
TCCR1B=0x02;
TCCR2=0x02;
TCCR3B=0x02;
lcd_init(20);
do{
aa= (TCNT1L*256,TCNT1L+TCNT1H);
sprintf(a,"Timer0=%d",TCNT0);
sprintf(b,"Timer1=%d",aa);
sprintf(c,"Timer2=%d",TCNT2);
sprintf(d,"Timer3=%d",aa);
lcd_gotoxy(0,0);lcd_puts(a);lcd_putsf(" ");
lcd_gotoxy(0,1);lcd_puts(b);lcd_putsf(" ");
lcd_gotoxy(0,2);lcd_puts(c);lcd_putsf(" ");
lcd_gotoxy(0,3);lcd_puts(d);lcd_putsf(" ");
if (PIND.0==1){
TCCR0=0x00;
TCCR1B=0x00;
TCCR2=0x00;
TCCR3B=0x00;
lcd_gotoxy(0,0);lcd_puts(a);lcd_putsf(" ");
lcd_gotoxy(0,1);lcd_puts(b);lcd_putsf(" ");
lcd_gotoxy(0,2);lcd_puts(c);lcd_putsf(" ");
lcd_gotoxy(0,3);lcd_puts(d);lcd_putsf(" ");
TCNT0=0;
TCNT1=0,
TCNT2=0;
aa=0;
TCCR0=0x02;
TCCR1B=0x02;
TCCR2=0x02;
TCCR3B=0x02;
delay_ms(2000);}
}while(1);
}

اینم شبیه ساز:
[تصویر:  Timer_p_b_c.jpg]

2.دستوری داریم که چند متغیر و عبارت رو با یک دستور رو lcd نشون بده.(تو کدویژن)
مثلا تو بیسیک این هستش:
کد:
Locate 1 , 1 : Lcd "Timer0=" ; Timer0 ; S
من تو کدویژن اینو میدونم که باید یه رشته بنویسی بعد اونو برگردونی بعد از اون رو lcd نشون بدی.که فقط یک متن و یک متغیر رو نشون میده.

3.اینی که میگن فرکانس رو با تایمر بسازی دقیق تره با PWM این کارو میکنن؟
بعد میکرو حداکثر تا چه مقدار میتونه فرکانس بسازه؟و چگونه؟

4.این دستور که تو بیسیک هستش تو کدویژن چطوریه؟
کد:
On Timer1 Label
On Harchize Dgei Label

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

با تشکر فراوان از همه ی شما عزیزان...HeartHeartHeartHeartHeart

پسرخوب بایت کم ارزش رو که نباید در 256 ضرب کنی بایت پرارزش رو باید ضرب کنی
بعدم گفتم که چی کار کنی توجه نکردی که گفتم اول باید کم ارزش رو بخونی بعد پر ارزش رو! شما باید توی دو مرحله این کار رو بکنی با این چه مشکلی داری آخه!
کد:
int a,b;
a=TCNT3L;
b=TCNT3H<<8;
b+=a;\\مقدار تایمر!
برای مورد چهار این هارو لازم نداری
توی کد بگرد یه زیر برنامه برای هروقفه کدویزارد ایجاد می کنه که توی اون هرچی خواستی باید بنویسی و نمی تونی جای دیگه استفاده کنی
برای LCD باید اون هارو به هم متصل کنی بعد نمایش بدی یا به ترتیب بنویسیشون
فرکانس رو هم نخیر باید یه تایمر بزاری و با هر بار که وقفه اتفاق می افته پین رو نات کنی فرکانسش هم با مقدار اولیه ای که به تایمر می دی قابل تنظیم هست

برای وقفه هم اگر از کدویزارد نخواستی استفاده کنی باید توی کتاب دنبال اسم زیر برنامه ای که توی وقفه استفاده میشه رو پیدا کنی و بدون تعریفش دراول برنامه توی برنامه ازش استفاده کنی البته فعال کردن وقفه یادت نره کتابی هم که داری اگه هیچی نداره اسم اون هارو توی دیتاشیت میکرو نوشته به مثال های زبان C توی اون دقت کن

حداکثر بسته به فرکانس تایمر و مقدار اولیه اون داره ولی دیگه به حدکثر هرچی نزدیک تر شی بیشتر به مولد فرکانس میمونه تا میکرو! دیگه کار دیگه ای نمیتونه انجام بده

تهش اینه که تقسیم فرکانسش رو 1 میکنی و مقدار اولیه رو یکی کم تر از حد اکثر دیگه خودت حساب کن چقدر میشه چند کلاک هم برای تغییر وضعیت پین مقدار دهی ریجستر و رفتن به بردار وقفه و اینا کم میشه

البته اگه فقط حداکثر بخوای یه تغییر وضعیت پین(نات) توی یه حلقه میزاری دیگه
بچه ها چرا وقتی وقفه خارجی رو تعریف میکنی و برنامه رو اجرا میکنی اول میره تک تکه لیبل هارو چک میکنه؟
صفحه‌ها: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48