ايران ويج

نسخه‌ی کامل: ولتمتر با سون سگمنت 4تایی
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
سلام دوستان
من یک ولتمتر 0 تا 15 ولت نیاز دارم
این ولتمتر ساختم ولی نمی دونم کجاش مشکل داره که اصلا درست کار نمی کنه و فقط یکی از سون سگمنت ها روشن میشه و عدد 8 نشون میده (بصورت چشمک زن)
چندین بار تست کردم ولی ...
لینک :
http://www.avrprojects.info/avr-projects...voltmeter/
برنامه :
کد php:
$regfile "m8def.dat"
$crystal 4000000

Config Timer0 
Timer Prescale 8

Dim Timecount 
As Word Timecount 0
Config Adc 
Single Prescaler Auto Reference Internal


Enable Interrupts
Enable Ovf0
On Ovf0 Overflow_isr
Tcnt0 
= &H19

Dim I 
As Byte
Config Pinc.5 
Input

Config Portd 
Output
Portd 
0
Config Pinb.0 
Output
Portb.0 
0
Config Pinb.1 
Output
Portb.1 
0
Config Pinb.2 
Output
Portb.2 
0
Config Pinb.3 
Output
Portb.3 
0

Dim L
(10) As Byte
 
' L(1) = &B11111100

L(1) = &B11111001
L(2) = &B10100100
L(3) = &B10110000
L(4) = &B10011001
L(5) = &B10010010
L(6) = &B10000010
L(7) = &B11111000
L(8) = &B10000000
L(9) = &B10010000
L(10) = &B11000000
Dim Le(10) As Byte
Le(1) = &B01111001
Le(2) = &B00100100
Le(3) = &B00110000
Le(4) = &B00011001
Le(5) = &B00010010
Le(6) = &B00000010
Le(7) = &B01111000
Le(8) = &B00000000
Le(9) = &B00010000
Le(10) = &B01000000
Dim Channel As Byte
Dim W As Long
Dim Ss As Byte
Dim Ad As Long
Dim S(4) As String * 1
Dim Sa As String * 5

Dim Sl(4) As Byte                                           '
Show variables

Do

'------------------------------------ Battery voltage detection
W = 0
Ss = 1
Ad = 0
For Ss = 1 To 20
Start Adc
Channel = 5
W = Getadc(channel)
Stop Adc
Ad = Ad + W
Next Ss
Ad = Ad / 20
Ad = Ad * 2560
Ad = Ad / 1023
Ad = Ad * 10



If Ad < 1000 Then
Sa = Str(ad)
Sa = Format(sa , "000")

S(1) = Mid(sa , 3 , 1)
S(2) = Mid(sa , 2 , 1)
S(3) = Mid(sa , 1 , 1)
'
(4) = Mid (sa11)
Val(s(1))
If 
0 Then
Sl
(1) = L(10)
Else
Sl(1) = L(i)
End If

Val(s(2))
If 
0 Then
Sl
(2) = L(10)
Else
Sl(2) = L(i)
End If

Val(s(3))
If 
0 Then
Sl
(3) = L(10)
Else
Sl(3) = L(i)
End If


Sl(4) = Le(10)

End If



If 
Ad >= 1000 And Ad 10000 Then
Sa 
Str(ad)
Sa Format(sa "0000")

S(1) = Mid(sa 1)
S(2) = Mid(sa 1)
S(3) = Mid(sa 1)
S(4) = Mid(sa 1)
Val(s(1))
If 
0 Then
Sl
(1) = L(10)
Else
Sl(1) = L(i)
End If

Val(s(2))
If 
0 Then
Sl
(2) = L(10)
Else
Sl(2) = L(i)
End If

Val(s(3))
If 
0 Then
Sl
(3) = L(10)
Else
Sl(3) = L(i)
End If

Val(s(4))
If 
0 Then
Sl
(4) = Le(10)
Else
Sl(4) = Le(i)
End If

End If

If 
Ad >= 10000 And Ad 100000 Then
Sa 
Str(ad)
Sa Format(sa "0000")

S(1) = Mid(sa 1)
S(2) = Mid(sa 1)
S(3) = Mid(sa 1)
S(4) = Mid(sa 1)
Val(s(1))
If 
0 Then
Sl
(1) = L(10)
Else
Sl(1) = L(i)
End If

Val(s(2))
If 
0 Then
Sl
(2) = L(10)
Else
Sl(2) = L(i)
End If

Val(s(3))
If 
0 Then
Sl
(3) = Le(10)
Else
Sl(3) = Le(i)
End If

Val(s(4))
If 
0 Then
Sl
(4) = L(10)
Else
Sl(4) = L(i)
End If
End If

Waitms 200
'------------------------------------
Loop

End




Overflow_isr:

Tcnt0 = &H19
Incr Timecount
If Timecount = 15 Then                                      '
1 m 502 1s 4m 2008 1s
Timecount 
0
Portb.0 
1
Portd 
Sl(1)
Waitms 5
Portb.0 
0
Portb.1 
1
Portd 
Sl(2)
Waitms 5
Portb.0 
0
Portb.1 
0
Portb.2 
1
Portd 
Sl(3)
Waitms 5
Portb.0 
0
Portb.1 
0
Portb.2 
0
Portb.3 
1
Portd 
Sl(4)
Waitms 5
Portb.3 
0

End 
If
Return
'------------------------------------------------- -------------------------------- 


ولی وقتی این برنامه پروگرام می کنم درست جواب میده و فقط مشکلش اینه که سون سگمنتش 3 تایی هست و تا 5 ولت اندازه میگیره ممنون میشم کمک کنید این مدار به سون سگمنت 4تایی و محدوده اندازه گیری بالاتری افزایش بدم

لینک در ایرانویج :
http://www.iranled.com/forum/thread-2471...#pid175308

برنامه :
کد php:
$regfile "m8def.dat"
$crystal 500000
Config Adc 
Single Prescaler Auto Reference Off
Config Portb 
Output
Config Portd 
Output
Dim A 
As Word
Dim B 
As Long
Dim C 
As Word
Dim D 
As Word
Dim E 
As Word
Dim F 
As Byte
Dim G 
As Byte
Dim I 
As Byte
Dim J 
As Word
Declare Sub Yekan
Y Alias Portb.3
D0 Alias Portb.2
S Alias Portb.1
Enable Adc
Start Adc
'*******************************************************************************
Do
A = Getadc(0)
B = A * 4887
B = B / 10000
'
*******************************************************************************
Call Yekan
Portb.4 
1
1
Portd 
F
Waitms 4
0
D0 
1
Portd 
G
Waitms 4
D0 
0
1
Portb.4 
0
Portd 
I
Waitms 4
0
Loop
End                                                         
'end program
'
*******************************************************************************
Hadi:
Data &B1000000 , &B1111001 , &B0100100 , &B0110000
Data 
&B0011001 , &B0010010 , &B0000010 , &B1111000
Data 
&B0000000 , &B0010000
'*******************************************************************************
Sub Yekan
C = B / 10
C = C * 10
C = B - C
F = C
F = Lookup(f , Hadi)
D = B / 100
D = D * 100
D = B - D
D = D / 10
G = D
G = Lookup(g , Hadi)
E = B / 100
I = E
I = Lookup(i , Hadi)
End Sub 

شماتیک :
[تصویر:  86119580509765409189.jpg]
سلام دوست عزیز.
برنامه که داری خیلی شلوغه ، من خودم نهایتاً تا ساعت 12 امشب این برنامه رو برات مینویسم :)
بعدشم واسه اینیکه بتونی محدوده ی اندازه گیری رو افزایش بدی باید سخت افزار رو هم علاوه بر نرم افزار تغییر بدی :)

راستی تو این عکسی که گذاشتی یکی از سون سگمنت ها پایه اش وصل نیستا ، اسه همین خاموشه
خدمت داداش گلم :)
یه ولت متر 0 تا 15 ولت DC ، با سون سگمنت 4 تایی با 2 رقم اعشار :)