ايران ويج

نسخه‌ی کامل: استفاده همزمان از adc و تايمر در avr
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
با سلام خدمت دوستان

من برنامه اي بزبان بيسيك نوشته ام كه شامل يك ميكرو مگا8 و يك كليد است كه دو زير برنامه را شامل مي شود با قرار دادن كليد در حالت A برنامه A اجرا مي شود و مي بايست كميتي آنالوگ نيز به ديجيتال تبديل شود در همان زير گروه و با زدن كليد در حالت B زير برنامه B با مبدل آنالوگ به ديجيتال در كانال B اجرا شود ولي نمي دانم مبدل آنالوگ به ديجيتال را بايد براي هر كانال جداگانه تعريف كنم يا خير يا كجاي برنامه آن را قرار دهم كه درست كار كند.برنامه به اين شكل است لطفا براي اصلاح آن كمكم كنيد.

کد php:
$regfile "m8def.dat"
$crystal 8000000
Deflcdchar 0 
31 31 31 31 31 31 31 31 ' replace ? with number (0-7)
Deflcdchar 1 , 32 , 32 , 32 , 32 , 32 , 32 , 32 , 32 ' 
replace with number (0-7)

Config Lcd 16 2
Config Lcdpin 
Pin Db4 Portd.3 Db5 Portd.2 Db6 Portd.1 Db7 _
 Portd.0 
Rs Portd.5 Portd.4

Config Adc 
Single Prescaler Auto Reference Avcc
 Dim A 
As Word As Word As Word As Byte Cols As Byte

 Start Adc
 Cursor Off
 
Do
 
Getadc(5)
 
4

 P 
4
 Cols 
16
 Locate 2 
1
 
For 3 To Cols
 Select 
Case I
 
Case Lcd Chr(0)
 Case Else : 
Lcd Chr(0)
 
End Select
 Next I

 Cols 
Cols 1
 
For Cols To 16
 Select 
Case I
 
Case Lcd Chr(1)
 Case Else : 
Lcd Chr(1)
 
End Select
 Next I
Loop 

Dim A 
As Word

Cls
Home
Locate 1 
4
Lcd 
" HELLO "
Wait 1



'*******************************************************************************

A:

Home
Locate 2 , 6
Lcd "<A>"
'
Config Pinb.1 Input
'Config Portc.1 = Output

Config Timer1 = Timer , Prescale = 1
Stop Timer1
Config Portb = Output
Config Portd = Output
Portb.1 = 0
Portd.6 = 0
Portd.7 = 0
'
Dim A As Word

Startline1
:
Start Timer1
0
Portb.1 
1
Do
1
Loop Until A 
10
Stop Timer1
If Pinc.1 0 Then Goto B
Goto Startline1


'*******************************************************************************

B:

Home
Locate 2 , 6
Lcd "<B> "
'
Config Pinb.1 Input
'Config Portc.1 = Output

Config Timer1 = Timer , Prescale = 1
Stop Timer1
Config Portb = Output
Config Portd = Output
Portb.1 = 0
Portd.6 = 0
Portd.7 = 0
'
Dim A As Word

Startline2
:
Start Timer1
0
Portb.1 
1
Do
1
Loop Until A 
12
Stop Timer1
If Pinc.1 1 Then Goto A
Goto Startline2 
مهندس پستت رو ویرایش کردم تا برنامه ات بهتر دیده بشه !!


کد:
Cols = P / 16
مهندس Cols رو word انتخاب کن !
یا p رو تقسیم بر 16 کن و بعدش بریز تو cols
این تقسیم word و byte اینجوری درست انجام نمی ده !


بعدش هم یه مدل ورژن بسکام بودش که به دلیل مشکلات کرک ناقص یه عالمه ایرد داشت ( مخصوصا تو تایمر ها )
ترجیحا از ورژن 1.11.9.8 فول استفاده کن !!!
با تشكر
اگر در برنامه دقت كرده باشيد من هم بر 16 تقسيم كرده ام.من در اين پروژه يك كميت آنالوگ دارم كه مي خواهم زماني كه كليد در حالت 1 قرار دارد در اين كانال 1 اين كميت رو به ديجيتال تبديل كنم و وقتي كليد در حالت 2 است در كانال 2 اين كميت با استفاده از adc به ديجيتال تبديل شود.شايد بهتر باشد براي هر حالت (AوB)از يك كانال مجزاي adc ميكرو استفاده كنم به اين شكل
$regfile = "m8def.dat"
$crystal = 8000000
Deflcdchar 0 , 31 , 31 , 31 , 31 , 31 , 31 , 31 , 31 ' replace ? with number (0-7)
Deflcdchar 1 , 32 , 32 , 32 , 32 , 32 , 32 , 32 , 32 ' replace ? with number (0-7)

Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portd.3 , Db5 = Portd.2 , Db6 = Portd.1 , Db7 = _
Portd.0 , Rs = Portd.5 , E = Portd.4

Config Adc = Single , Prescaler = Auto , Reference = Avcc
Dim A As Word , W As Word , P As Word , I As Byte , Cols As Byte
Start Adc
Cursor Off



Cls
Home
Locate 1 , 4
Lcd " "
Wait 1



'*******************************************************************************

A:

Home
Locate 2 , 6
Lcd A""
'Config Pinb.1 = Input
'Config Portc.1 = Output

Config Timer1 = Timer , Prescale = 1
Stop Timer1
Config Portb = Output
Config Portd = Output
Portb.1 = 0
Portd.6 = 0
Portd.7 = 0
'Dim A As Word

Startline1:
Start Timer1
A = 0
Portb.1 = 1
Do
A = A + 1
Loop Until A =10
Portb.1 = 0
A = 0
Portd.7 = 0
Do
A = A + 1
Loop Until A = 12
Stop Timer1
If Pinc.1 = 0 Then Goto B
Goto Startline1
Do
W = Getadc(5)
W = W * 4

P = W / 4
Cols = P / 16
Locate 2 , 1
For I = 3 To Cols
Select Case I
Case 0 : Lcd Chr(0)
Case Else : Lcd Chr(0)
End Select
Next I

Cols = Cols + 1
For I = Cols To 16
Select Case I
Case 0 : Lcd Chr(1)
Case Else : Lcd Chr(1)
End Select
Next I
Loop


'*******************************************************************************

B:

Home
Locate 2 , 6
Lcd "<B> "
'Config Pinb.1 = Input
'Config Portc.1 = Output

Config Timer1 = Timer , Prescale = 1
Stop Timer1
Config Portb = Output
Config Portd = Output
Portb.1 = 0
Portd.6 = 0
Portd.7 = 0
'Dim A As Word

Startline2:
Start Timer1
A = 0
Portb.1 = 1
Do
A = A + 1
Loop Until A = 10
Portb.1 = 0
A = 0
Portd.7 = 0
Do
A = A + 1
Loop Until A = 8
Stop Timer1
If Pinc.1 = 1 Then Goto A
Goto Startline2
Do
W = Getadc(4)
W = W * 4

P = W / 4
Cols = P / 16
Locate 2 , 1
For I = 3 To Cols
Select Case I
Case 0 : Lcd Chr(0)
Case Else : Lcd Chr(0)
End Select
Next I

Cols = Cols + 1
For I = Cols To 16
Select Case I
Case 0 : Lcd Chr(1)
Case Else : Lcd Chr(1)
End Select
Next I
Loop