Ablaktörlő időzítő szoftvere
Sajnos semmi.jwaldha írta:A megszakítás rutinban két return szerepel. Az álmoskönyv (Bascom Help) szerint ez nem sok jót jelent.
A kér return közül az egyik egy if-ben van. Ez nem reti, hanem ret utasítást generál.Bascom help:
ON interrupt label [NOSAVE]
.
.
.
You must return from the interrupt routine with the RETURN statement.
The first RETURN statement that is encountered that is outside a condition will generate a RETI instruction. You may have only one such RETURN statement in your interrupt routine because the compiler restores the registers and generates a RETI instruction when it encounters a RETURN statement in the ISR. All other RETURN statements are converted to a RET instruction.
Szimulátorban futtatva az if-ben levő return újraindítja a procit.
A programban:Talán segít, ha csak egy return kerül a megszakítás rutinba:Kód: Egész kijelölése
'------------------------------------------------------------------------------- Timer_int: ' Timer0 interrupt routine Timer0 = Timervalue 'reload Timer0 If Int_timer1 = 0 Then Return ' if timer is not set do nothing Int_timer1 = Int_timer1 - 1 ' else decrement it over each interrupt Return '-------------------------------------------------------------------------------
Kód: Egész kijelölése
'------------------------------------------------------------------------------- Timer_int: ' Timer0 interrupt routine Timer0 = Timervalue 'reload Timer0 If Int_timer1 <> 0 Then ' if timer is not set do nothing Int_timer1 = Int_timer1 - 1 ' else decrement it over each interrupt endif Return '-------------------------------------------------------------------------------
Áh szerintem egy ilyen eszköznél mint az avr a timer-t szó szerint
másra nem szabad használni.
Én javaslom neked ezt a programszerkezetet:
Az timerben csak mindenféle változót incrementálsz(vagy dec.) mást nem csinálsz.
Főprogram nézegeti a számlálóid mikor érnek el kivánt értéket.
Elérte? ha igen subrutin meghív.
szubrutinban :számlálók beállítása relé piszkálása kijelzés.etc. etc.
esetlegesen többféle szubrutin alkalmazása..
a kapcsolóval ugyanez a helyzet csak ott a int0-val kel változókat
piszkálni bár azt sem szabad elfelejtani hogy egy változó
betöltése is idő
másra nem szabad használni.
Én javaslom neked ezt a programszerkezetet:
Az timerben csak mindenféle változót incrementálsz(vagy dec.) mást nem csinálsz.
Főprogram nézegeti a számlálóid mikor érnek el kivánt értéket.
Elérte? ha igen subrutin meghív.
szubrutinban :számlálók beállítása relé piszkálása kijelzés.etc. etc.
esetlegesen többféle szubrutin alkalmazása..
a kapcsolóval ugyanez a helyzet csak ott a int0-val kel változókat
piszkálni bár azt sem szabad elfelejtani hogy egy változó
betöltése is idő
Akkor ez lehet, hogy nem lesz meg, mert nem értek a programozáshoz.herc1234 írta:Áh szerintem egy ilyen eszköznél mint az avr a timer-t szó szerint
másra nem szabad használni.
Én javaslom neked ezt a programszerkezetet:
Az timerben csak mindenféle változót incrementálsz(vagy dec.) mást nem csinálsz.
Főprogram nézegeti a számlálóid mikor érnek el kivánt értéket.
Elérte? ha igen subrutin meghív.
szubrutinban :számlálók beállítása relé piszkálása kijelzés.etc. etc.
esetlegesen többféle szubrutin alkalmazása..
a kapcsolóval ugyanez a helyzet csak ott a int0-val kel változókat
piszkálni bár azt sem szabad elfelejtani hogy egy változó
betöltése is idő
Félve, de reménykedve kérdezem meg, hogy nem tudna valaki az itt fórumozók közül egy új programot írni ehhez a készséghez?
Én sajnos nem tudom megcsinálni.
Nem én írtam. Sokat kutakodtam a netem és mindenképpen AVR-es cucc után, mivel ahhoz már (persze netes leírás alapján) raktam össze programozót. Tudok forrasztani, de az elektronikához olyan szinten nem értek, hogy saját tervezésű áramkört rakjak össze. Általában mindig neten közzétett cuccokat állítok össze és (AVR esetén) a hozzá mellékelt programot tolom fel.herc1234 írta:Miért amit mutattál programot azt ki irta?
Ha te irtad akkor amit te irtál sokkal bonyolultabb mint amit én
blokk-szinten vázoltam neked.
Kb 30 sorból meg lehet oldani..
Az előző oldalon leírtam, hogy mi is ez az áramkör és itt a linkje:
http://www.mcselec.com/index.php?option ... &Itemid=57
Igaz régi téma volt, de hátha valakinek segít!
Sikerült meg csinálnom ezt a projektet. Talán kicsit szerényebben, és nem kihasználva annyira a uC adottságait, de korrektül működik. A időzítést nem találtam annyira fontosnak, hogy pontos sec alapú legyen. Nekem +12-őt kap az egység, és azt is ad ki.
Remélem tudtam segíteni!
Sikerült meg csinálnom ezt a projektet. Talán kicsit szerényebben, és nem kihasználva annyira a uC adottságait, de korrektül működik. A időzítést nem találtam annyira fontosnak, hogy pontos sec alapú legyen. Nekem +12-őt kap az egység, és azt is ad ki.
Kód: Egész kijelölése
'********************************************************
'** **
'** Dacia Logan gépjármű ablaktörlő ütem vezérlő' **
'** **
'** Készitette: Horváth József **
'** allias: willmen **
'** Bascom 2073 verzió **
'** **
'** 2012 **
'********************************************************
$regfile = "attiny13.dat"
$crystal = 580000 'fuse 4,8Mhz kb. igy 1sec
$hwstack = 8
$swstack = 8
$framesize = 16
Config Portb.2 = Input 'ablaktörlő kapcsoló
Config Portb.1 = Output 'kimenet
Config Portb.4 = Output 'figyelő led
Led Alias Portb.4
Be Alias Pinb.2
Ki Alias Portb.1
Dim Alap As Word
Dim Utem_ido As Word
Dim Figyel As Word
Const Torol_ido = 800 'törlés inditáshoz szükséges idő
Pinb = &B0000000 'port beállítások
Portb.1 = 1
Utem_ido = 420 'alap törlési ütem: ha csak simán bekapcs kb.5 sec
Main:
Figyel = 0
Do
Do
If Be = 1 Then ' Ha be van kapcsolva
Waitms 20
If Be = 1 Then 'Prell mentesit
Figyel = 0
Gosub Be1 'Töröl
End If
End If
Loop
Be1:
If Be = 1 Then 'Ha be van kapcsolva töröl
Led = 0
Ki = 0
Waitms Torol_ido
Ki = 1
For Figyel = 0 To Utem_ido 'Alap vagy figyelt időközönként töröl
Waitms 10
If Be = 0 Then 'Ha törlés után kikapcsolom figyelni kezdi az időt
Goto Varak 'Ugrás az idő figyeléséhez
Else
Next
End If
End If
If Be = 0 Then
Gosub Varak
End If
Loop
Varak:
Utem_ido = 0 'Ütem idő törlése
Figyel = 1 'Figyelő led jelez
Do
If Be = 0 Then ' Ha kikapcs. figyelés indul
Led = 1 'Figyelő led jelez
Utem_ido = Utem_ido + 1 'Ütemidő növekszik
Waitms 10
End If
If Utem_ido > 6000 Then ' Ha figyelés több mint 1 min
Utem_ido = 420 'Vissza állítva alapra, figyelés kikapcs.
Led = 0 'Figyelő led kikapcs
Goto Main 'Alapállapot indul
End If
If Be = 1 Then
Return
End If
Loop