PDA

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



kendab
30-01-2013, 23:12
سلام
برنامه زیر برا یه سون سگمنت 4تایی نوشته شده برا اینکه تبدیلش کنم به سون سگمنت های تکی چه تغیراتی باید بدهم؟
ممنون
$regfile = "M8def.dat"
$crystal = 1000000


Config Adc = Single , Prescaler = Auto

Config Pinc.5 = Input


Config Portb = Output : Portb = 0
Config Pinc.0 = Output : S1 Alias Portc.0 : Set S1
Config Pinc.1 = Output : S2 Alias Portc.1 : Set S2
Config Pinc.2 = Output : S3 Alias Portc.2 : Set S3

Dim A As Word
Dim Aa As Word
Dim I As Byte
Dim T As Word : T = 1
Dim W As Single



Declare Sub Show(byval A As Word)

Do

Start Adc
A = Getadc(5)
Stop Adc

If A < 205 Then
A = 0
Else
A = A - 205
W = A / 2.72
A = W
End If

Call Show(a)

Loop

End


'******************************* Show
Sub Show(a As Word)
Do
Incr I
Aa = A Mod 10
Select Case I
Case 1:
Portb = Lookup(aa , Annode_display)
Set S1 : Waitms T
Case 2:
Portb = Lookup(aa , Annode_display)
Set S2 : Waitms T
Case 3:
Portb = Lookup(aa , Annode_display)
Set S3 : Waitms T
End Select
Reset S1 : Reset S2 : Reset S3
A = A \ 10 : If A = 0 Then Exit Do
Loop
I = 0
Reset S1 : Reset S2 : Reset S3
End Sub


'_____________________________ For Annode Display
Annode_display:
Data 192 , 249 , 164 , 176 , 153 , 146 , 130 , 248 , 128 , 144
'CHAR 0 1 2 3 4 5 6 7 8 9

Doloop
31-01-2013, 00:06
سلام مهندس

بعضی وقت ها نوشتن مجدد برنامه از تحلیل و ویرایش برنامه از پیش نوشته راحت تر و سریع تره..!!!:0013:

شما بگو میخای چیکار کنی ؟؟؟
این برنامه برای سگمنت 3تایی هست...!
منظور شما رو دقیقا متوجه نشدم ... میخواهید تنها یک رقم رو نمایش بدید یا چیز دیگه ایست قضیه ..!!!

برای نمایش کد ها هم میتونی گزینه code استفاده کنی :wink:
به این صورت :



$regfile = "M8def.dat"
$crystal = 1000000


Config Adc = Single , Prescaler = Auto

Config Pinc.5 = Input


Config Portb = Output : Portb = 0
Config Pinc.0 = Output : S1 Alias Portc.0 : Set S1
Config Pinc.1 = Output : S2 Alias Portc.1 : Set S2
Config Pinc.2 = Output : S3 Alias Portc.2 : Set S3

Dim A As Word
Dim Aa As Word
Dim I As Byte
Dim T As Word : T = 1
Dim W As Single



Declare Sub Show(byval A As Word)

Do

Start Adc
A = Getadc(5)
Stop Adc

If A < 205 Then
A = 0
Else
A = A - 205
W = A / 2.72
A = W
End If

Call Show(a)

Loop

End


'******************************* Show
Sub Show(a As Word)
Do
Incr I
Aa = A Mod 10
Select Case I
Case 1:
Portb = Lookup(aa , Annode_display)
Set S1 : Waitms T
Case 2:
Portb = Lookup(aa , Annode_display)
Set S2 : Waitms T
Case 3:
Portb = Lookup(aa , Annode_display)
Set S3 : Waitms T
End Select
Reset S1 : Reset S2 : Reset S3
A = A \ 10 : If A = 0 Then Exit Do
Loop
I = 0
Reset S1 : Reset S2 : Reset S3
End Sub

kendab
31-01-2013, 00:47
سلام مهندس

بعضی وقت ها نوشتن مجدد برنامه از تحلیل و ویرایش برنامه از پیش نوشته راحت تر و سریع تره..!!!:0013:

شما بگو میخای چیکار کنی ؟؟؟
این برنامه برای سگمنت 3تایی هست...!
منظور شما رو دقیقا متوجه نشدم ... میخواهید تنها یک رقم رو نمایش بدید یا چیز دیگه ایست قضیه ..!!!

برای نمایش کد ها هم میتونی گزینه code استفاده کنی :wink:
به این صورت :



$regfile = "m8def.dat"
$crystal = 1000000


config adc = single , prescaler = auto

config pinc.5 = input


config portb = output : Portb = 0
config pinc.0 = output : S1 alias portc.0 : Set s1
config pinc.1 = output : S2 alias portc.1 : Set s2
config pinc.2 = output : S3 alias portc.2 : Set s3

dim a as word
dim aa as word
dim i as byte
dim t as word : T = 1
dim w as single



declare sub show(byval a as word)

do

start adc
a = getadc(5)
stop adc

if a < 205 then
a = 0
else
a = a - 205
w = a / 2.72
a = w
end if

call show(a)

loop

end


'******************************* show
sub show(a as word)
do
incr i
aa = a mod 10
select case i
case 1:
portb = lookup(aa , annode_display)
set s1 : Waitms t
case 2:
portb = lookup(aa , annode_display)
set s2 : Waitms t
case 3:
portb = lookup(aa , annode_display)
set s3 : Waitms t
end select
reset s1 : Reset s2 : Reset s3
a = a \ 10 : If a = 0 then exit do
loop
i = 0
reset s1 : Reset s2 : Reset s3
end sub

سلام
میخواهم ورودی که یک تا 5 ولت میباشد را میکرو بگیرد یک واحد کم کند بعد ضربدر 75 کند
حالا عدد بدست امده مثلا 245است 5 را روی یک سون سگمنت 4 را روی یک سون سگمنت و 2 هم روی یک سون سگمنت نشون بدهد
ولی سون سگمنتهایمون جدا هستند
ممنون

Doloop
31-01-2013, 01:43
قسمت ADC که مشکلی نداری درسته ؟
برای نمایش هم همین برنامه رو میتونی استفاده کنی حتی بدون تغیر
ولی سخت افزارت تغیر میکنه :

توی سگمنت 3تایی کلا ما 8تا پین دیتا داریم , 3تا پین فعال ساز برای هر سگمنت و یک پین هم آزاد (اگه اشتب نکرده باشم ولی بر فرض همچین پین هایی هست)

اما توی سگمنت تکی ما 8تا پین دیتا داریم , 1 پین فعال ساز برای یک سگمنت (همون مشترک) و یک پین هم آزاد

پین های فعال ساز همون S1 و S2 و S3 در سگمنت 3تایی
و همون پین مشترک در سگمنت تکی هستند برای هر سگمنت

اگر شما از 3 سگمنت جدا گانه استفاده کنی باید همه پینهای دیتای (a;b;c;d;e;f;g;dp) همه سگمنت هارو نظیر به نظیر به هم وصل کنی a به a و b به b الی آخر

حالا پایه مشترک سگمنت اول (یکان) میشه همون S1

پایه مشترک سگمنت دوم (دهگان) میشه همون S2

پایه مشترک سگمنت اول (صدگان) میشه همون S3

یادت باشه فقط سخت افزار تغیر کرد :wink:

kendab
31-01-2013, 01:55
قسمت adc که مشکلی نداری درسته ؟
برای نمایش هم همین برنامه رو میتونی استفاده کنی حتی بدون تغیر
ولی سخت افزارت تغیر میکنه :

توی سگمنت 3تایی کلا ما 8تا پین دیتا داریم , 3تا پین فعال ساز برای هر سگمنت و یک پین هم آزاد (اگه اشتب نکرده باشم ولی بر فرض همچین پین هایی هست)

اما توی سگمنت تکی ما 8تا پین دیتا داریم , 1 پین فعال ساز برای یک سگمنت (همون مشترک) و یک پین هم آزاد

پین های فعال ساز همون s1 و s2 و s3 در سگمنت 3تایی
و همون پین مشترک در سگمنت تکی هستند برای هر سگمنت

اگر شما از 3 سگمنت جدا گانه استفاده کنی باید همه پینهای دیتای (a;b;c;d;e;f;g;dp) همه سگمنت هارو نظیر به نظیر به هم وصل کنی a به a و b به b الی آخر

حالا پایه مشترک سگمنت اول (یکان) میشه همون s1

پایه مشترک سگمنت دوم (دهگان) میشه همون s2

پایه مشترک سگمنت اول (صدگان) میشه همون s3

یادت باشه فقط سخت افزار تغیر کرد :wink:
ممنون
این کار کردم
مشکل اونجاست که در این حالت چشمک زن میشود
ثابت نشون نمیده
اینو چطور حل کنم
ممنون

Doloop
31-01-2013, 02:28
مشکل اونجاست که در این حالت چشمک زن میشود
ثابت نشون نمیده
اینو چطور حل کنم

این حالت چشمک زن از تاخیر هست...
مقدار متغیر t که برای تاخیر هست رو زیاد کن
5 تا 15 امتحان کن ببین درست میشه (تغیر بده تا مقدار مطلوب رو بدست بیاری)

kendab
31-01-2013, 09:24
این حالت چشمک زن از تاخیر هست...
مقدار متغیر t که برای تاخیر هست رو زیاد کن
5 تا 15 امتحان کن ببین درست میشه (تغیر بده تا مقدار مطلوب رو بدست بیاری)
سلام
شرمنده
تا 50 امتحان کردم باز درست نشد
امدم tرا برای هر کدوم مختلف گذاشتم بهتر میشه ولی خوب نه
به نظرتون نمیشه یه تاخیر یه جاش گذاشت

Doloop
31-01-2013, 14:41
سلام مهندس

اول مقدار فرکانس کاری رو 8 مگ قرار بده بعد ببین چطوره ؟
اگه خوب نشد بیا از این برنامه استفاده کن ببین مشکلی نداره ...!
همشو کپی کن :wink:




$regfile = "m8def.dat"
$crystal = 8000000


config adc = single , prescaler = auto

config pinc.5 = input


config portb = output : Portb = 0
config pinc.0 = output : S1 alias portc.0 : Set s1
config pinc.1 = output : S2 alias portc.1 : Set s2
config pinc.2 = output : S3 alias portc.2 : Set s3

Dim A As Word
Dim Aa As Word
Dim I As Byte
Dim T As Byte : T = 1
Dim W As Single


do

start adc
a = getadc(5)
stop adc

if a < 205 then
a = 0
else
a = a - 205
w = a / 2.72
a = w
end if

Gosub Show
Waitms 10
loop

end


'******************************* show
Show:
For I = 1 To 3

aa = a mod 10
select case i
case 1:
Portb = Lookup(aa , Annode_display)
Reset S2 : Reset S3 : Set S1
case 2:
Portb = Lookup(aa , Annode_display)
Reset S1 : Reset S3 : Set S2
case 3:
Portb = Lookup(aa , Annode_display)
Reset S1 : Reset S2 : Set S3
end select

Next
Return


'_____________________________ For Annode Display
Annode_display:
Data 192 , 249 , 164 , 176 , 153 , 146 , 130 , 248 , 128 , 144
'CHAR 0 1 2 3 4 5 6 7 8 9

kendab
01-02-2013, 00:45
سلام مهندس

اول مقدار فرکانس کاری رو 8 مگ قرار بده بعد ببین چطوره ؟
اگه خوب نشد بیا از این برنامه استفاده کن ببین مشکلی نداره ...!
همشو کپی کن :wink:




$regfile = "m8def.dat"
$crystal = 8000000


config adc = single , prescaler = auto

config pinc.5 = input


config portb = output : Portb = 0
config pinc.0 = output : S1 alias portc.0 : Set s1
config pinc.1 = output : S2 alias portc.1 : Set s2
config pinc.2 = output : S3 alias portc.2 : Set s3

dim a as word
dim aa as word
dim i as byte
dim t as byte : T = 1
dim w as single


do

start adc
a = getadc(5)
stop adc

if a < 205 then
a = 0
else
a = a - 205
w = a / 2.72
a = w
end if

gosub show
waitms 10
loop

end


'******************************* show
show:
For i = 1 to 3

aa = a mod 10
select case i
case 1:
Portb = lookup(aa , annode_display)
reset s2 : Reset s3 : Set s1
case 2:
Portb = lookup(aa , annode_display)
reset s1 : Reset s3 : Set s2
case 3:
Portb = lookup(aa , annode_display)
reset s1 : Reset s2 : Set s3
end select

next
return


'_____________________________ for annode display
annode_display:
Data 192 , 249 , 164 , 176 , 153 , 146 , 130 , 248 , 128 , 144
'char 0 1 2 3 4 5 6 7 8 9


سلام
فرکانس گذاشتم درست نشد
برنامه شما رو کپی کردم مشکلش اینه همیشه دوتا از سون سگمنت ها خاموشن