de mártartok vele valahol!
ez egy vezérlő lessz zsalukat fog mozgatni a cumó!
van benne egy fázis figyelés egy okos barátomtól aki a nasanal dolgozott még pár éve és most csak az atmeloknak él azt a tanácsot kaptam hogy int0 és int 1-et használjam erre ezért én így cselekedtem!
az adc-ket pedig sub rutinokba tettem!
tehát fut a főprogram amiben figyeli az adc channel0 és channel1 a bejövő ágat amin 0.4v felett vagy alatt van ennek függvényében engedélyezi az egyik motorvezérlő ic-t vagy a másikat ezzel nincs iss gond!
a harmadik adc figyeli az aksikat ha e
gy bizonyos töltöttségi szint alatt elkezd riasztani ami majd egy duda lessz de a proci mindígy csak logikai magas vagy alacsony szintet kell kiadjon magából! ez a rész is működik szépen! a riasztást utánn egy reset gomb megnyomásával ki lehet kapcsolni de attól még egy led bekapcsolva marad ami jelzi hogy az aksit lassan ki kell cserélni!
a reset gomb az int1 megszakítás kezeli ez is működik!
a gond a fázis figyeléssel van! a proci figyeli hogy elmegy e az áram vagy nem ha elmegy az aksisk tartják jó pár órán át a rendszert 3db aksi 12v 1.3mAh-ak! ezzel 5x lehet a 2 motort fel le engedni!
az kellene valahogy elérnem hogy a pillanatnyi áram ingadozásokat ne vegye észre a proci csak mondjuk azt hogy elmegy az áram és ki is marad legalább 10s ig!
a másik hogy a kiamaradás után egyből felgyulladjon a led Riaszt Alias Portc.3 -on de maradjon égve 1s idejig viszont közben attól az adc folyamatosan figyeljen! és ha gebasz van akkor vinnyogjon a dudám!
természetesen a reset gomb megnyomásra ez is ki kell aludjon!
kb ennyi majd még lesznek gondok itt az edig megírt program ami működik issss!
kivéve a két hibát ami fontos!
Kód: Egész kijelölése
$regfile = "M16def.dat"
$crystal = 16000000
Config Adc = Single , Prescaler = Auto , Reference = Internal
Config Pinb.2 = Input
Config Pina.0 = Input
Config Pina.1 = Input
Config Portc = Output
Config Pinb.0 = Input
Config Pinb.1 = Input
Config Portc.3 = Output
Config Portc.2 = Output
' megszakításhoz ------------------------
On Int0 Fazisjel
On Int1 Resetgomb
Config Int0 = Falling
Config Int1 = Rising
Enable Interrupts
Enable Int0
Enable Int1
' megszakításhoz vége -------------------------
Rem Nyomógombok
Fazis Alias Pinb.2
Fgomb Alias Pinb.0 ' fel állítása
Lgomb Alias Pinb.1 ' le állítása
E1 Alias Portc.7
E2 Alias Portc.4
L12 Alias Portc.6
F12 Alias Portc.5
Riaszt Alias Portc.3
Akkuled Alias Portc.2
Dim Ido As Byte
Dim A As Byte
Dim W As Word , Channel1 As Word
Channel1 = 0
Dim Z As Word , Channel2 As Word
Channel2 = 1
Dim X As Word , Channel3 As Word
Channel3 = 2
Const Debouncetime = 75
Admux = &B01000000
Declare Sub Adccurrent1(byref Channel1 As Word , W As Word )
Declare Sub Adccurrent2(byref Channel2 As Word , Z As Word )
Declare Sub Adccurrent3(byref Channel3 As Word , X As Word )
Start Adc
Riaszt = 1
A = 1
'Call Fazis0(a)
Do
Disable Int0
Call Adccurrent1(channel1 , W)
Call Adccurrent2(channel2 , Z)
Call Adccurrent3(channel3 , X)
Enable Int0
'L12 = 1
'F12 = 1
Waitms 50
If Fgomb = 0 Then F12 = 1 Else F12 = 0
Waitms 50
If Lgomb = 0 Then L12 = 1 Else L12 = 0
Loop ' Until Fazis = 1
Fazisjel:
L12 = 1
[color=red]Waitms 100[/color]
Riaszt = 0
[color=red]Waitms Debouncetime[/color]
Return
Resetgomb:
Riaszt = 1
Waitms 50
Return
Sub Adccurrent1(byref Channel1 As Word , W As Word ) ' adc 1 sub
W = 0
W = Getadc(channel1)
If W => 160 Then E1 = 0 Else E1 = 1
End Sub
Sub Adccurrent2(byref Channel2 As Word , Z As Word ) ' adc 2 sub
Z = 0
Z = Getadc(channel2)
If Z => 160 Then E2 = 0 Else E2 = 1
End Sub
Sub Adccurrent3(byval Channel3 As Word , X As Word ) ' adc 3 sub
X = 0
X = Getadc(channel3)
If X => 1000 Then Akkuled = 0 Else Akkuled = 1
If X <= 1000 Then Riaszt = 0
End Sub
End