2 db ventillátor vezérlése ATTiny2313 avr-el
- jocoka1973
- Újonc

- Hozzászólások: 12
- Csatlakozott: 2007. augusztus 23. csütörtök, 6:00
2 db ventillátor vezérlése ATTiny2313 avr-el
Sziasztok
Egy kis segítség kellene,most kezdtem ismerkedni az avr-programozásával és lenne egy munkám amihez fel kellene programoznom egy ATTiny2313-mat.
De nem tudom hogy kezdjem el,arról van szó hogy van 2db ventillátorom amitt ki-be kellene kapcsoltatni de úgy hogy pl:az 1-es ventillátor mondjuk 4órát áll és 30percet megy,a 2-es ventillátor meg 6órát áll és 20percet megy,de ha megnyomok egygombot akkor csak az egyik ventillátor kapcsoljon be és mondjuk menyen 30percet.
Ez nekem egy szellőztető rendszerhez kellene.
Előre is köszönöm a segítséget.
Üdv:Józsi
Egy kis segítség kellene,most kezdtem ismerkedni az avr-programozásával és lenne egy munkám amihez fel kellene programoznom egy ATTiny2313-mat.
De nem tudom hogy kezdjem el,arról van szó hogy van 2db ventillátorom amitt ki-be kellene kapcsoltatni de úgy hogy pl:az 1-es ventillátor mondjuk 4órát áll és 30percet megy,a 2-es ventillátor meg 6órát áll és 20percet megy,de ha megnyomok egygombot akkor csak az egyik ventillátor kapcsoljon be és mondjuk menyen 30percet.
Ez nekem egy szellőztető rendszerhez kellene.
Előre is köszönöm a segítséget.
Üdv:Józsi
-
Hooligan01
Hello!
Használd az AvrCalc nevű progit,(google a barátod) itt a kvarchoz mérten ki tudod számítani a kívánt időzítéshez szükséges értékeket a timernek/timereknek.
A két timerrel meg már könnyedén össze tudod állitani a programot.
pl.: Timer1 1000ms-enként megszakít, interrupt rutinban növelsz egy számlálót, amit a főrutinban feltétellel figyelsz, stb....
A Robi által készített teljeskörű Bascom leírás a segítségedre lehet, mind a timer kezelésben, mind pedig a nyomógombok kezelésében, ha most kezded az alapokkal.
Használd az AvrCalc nevű progit,(google a barátod) itt a kvarchoz mérten ki tudod számítani a kívánt időzítéshez szükséges értékeket a timernek/timereknek.
A két timerrel meg már könnyedén össze tudod állitani a programot.
pl.: Timer1 1000ms-enként megszakít, interrupt rutinban növelsz egy számlálót, amit a főrutinban feltétellel figyelsz, stb....
A Robi által készített teljeskörű Bascom leírás a segítségedre lehet, mind a timer kezelésben, mind pedig a nyomógombok kezelésében, ha most kezded az alapokkal.
- jocoka1973
- Újonc

- Hozzászólások: 12
- Csatlakozott: 2007. augusztus 23. csütörtök, 6:00
Első körben várakozás lehet Wait illetve Waitms utasítás is.
Első körben én egy folyamatábrát rajzolnék mely csak a ki/bekapcs, várakozás és a gombfigyelés, valamint igen/nem elágazásból állhat. Ez könnyeb átemelhető Bascomba.
Ha nem szükséges tizedmilisec pontosság, akkor a sima várakozás elég. Első lépésben a Timerrel nem kellene játszani....
A program elvileg beleférhet a T2313-ba... Csak a folyamatábra segít sokat....
Első körben én egy folyamatábrát rajzolnék mely csak a ki/bekapcs, várakozás és a gombfigyelés, valamint igen/nem elágazásból állhat. Ez könnyeb átemelhető Bascomba.
Ha nem szükséges tizedmilisec pontosság, akkor a sima várakozás elég. Első lépésben a Timerrel nem kellene játszani....
A program elvileg beleférhet a T2313-ba... Csak a folyamatábra segít sokat....
- jocoka1973
- Újonc

- Hozzászólások: 12
- Csatlakozott: 2007. augusztus 23. csütörtök, 6:00
- nobody_hun
- Bitfaragó
- Hozzászólások: 425
- Csatlakozott: 2005. november 14. hétfő, 7:00
Mondjuk meghatározod a legkisebb várakozást. Pl. ez legyen 1 perc.
Összesen 4 változóra lesz szükséged még:
A kimenet mennyit álljon
A kimenet mennyit menjen
B kimenet mennyit álljon
B kimenet mennyit menjen
A megszakítás rutinban figyeled, hogy a kimenetek éppen milyen állapotban vannak. Ettől függően az állási vagy a menjen értéket csökkented megszakításonként.
Amikor az érték elérte a nullát, akkor állapotváltás (elindítod/megállítod), majd az eredeti érték visszaírása a változóba.
Nagyjából konyhaszinten a megszakításrutin:
És persze a megszakításban ugyanezt a B kimenetre...
Összesen 4 változóra lesz szükséged még:
A kimenet mennyit álljon
A kimenet mennyit menjen
B kimenet mennyit álljon
B kimenet mennyit menjen
A megszakítás rutinban figyeled, hogy a kimenetek éppen milyen állapotban vannak. Ettől függően az állási vagy a menjen értéket csökkented megszakításonként.
Amikor az érték elérte a nullát, akkor állapotváltás (elindítod/megállítod), majd az eredeti érték visszaírása a változóba.
Nagyjából konyhaszinten a megszakításrutin:
Kód: Egész kijelölése
Megszakit:
Rem a_kimenet=1->bekapcsolva, 0->kikapcsolva
a_kimenet=PINB.0
if a_kimenet=1 then
decr a_bekapcsol
if a_bekapcsol=0 then
a_bekapcsol=5
reset portb.0
endif
else
decr a_kikapcsol
if a_kikapcsol=0 then
a_kikapcsol=10
set portb.0
endif
endif
- jocoka1973
- Újonc

- Hozzászólások: 12
- Csatlakozott: 2007. augusztus 23. csütörtök, 6:00
Ajaj. Tessék elindulni a könyvben lassan.....
De hogy konstruktív is legyek:
Rajzolj kockás papírra folyamatábrát. Akár részfeladatonként is. És próbáld meg az egyes részfeladatkat megoldani. Egyesével, ne egyszerre.
Az egyik ventillátor ki/bekapcsolgat. Egyfolytaban. Sztem indulj ki ebből. A gombosra ráérsz később foglalkozni.... Ezen az alapbuktatók 1 részét megismered:)....
De hogy konstruktív is legyek:
Kód: Egész kijelölése
'--- Alapadatok ---
$crystal = 4000000 'Sebesseg
$regfile = "M168def.dat" 'Chip
$baud = 9600
'ha van sorosport. Javasolt, hogy legyen...
'a stackek a program működéséhez kellenek. A hibakeresés fejezetben van, a konyv nagyonvégén...
$swstack = 64
$hwstack = 64
$framesize = 64
Config Portd.2 As Input 'nyomógomb be
Config Portb.1 As Output 'ventillátor1
Config Portb.3 As Output 'ventillátor2
do
nop'foprogram helye
loop
Az egyik ventillátor ki/bekapcsolgat. Egyfolytaban. Sztem indulj ki ebből. A gombosra ráérsz később foglalkozni.... Ezen az alapbuktatók 1 részét megismered:)....
- nobody_hun
- Bitfaragó
- Hozzászólások: 425
- Csatlakozott: 2005. november 14. hétfő, 7:00
- jocoka1973
- Újonc

- Hozzászólások: 12
- Csatlakozott: 2007. augusztus 23. csütörtök, 6:00
-
Hooligan01
Hello!
Az időzítést az Avr Timer programmal számítottam ki.
Nem teljesen tökéletes, de talán arra jó lesz hogy szemléltesse mire gondoltam a timerrel kapcsolatban:
Az időzítést az Avr Timer programmal számítottam ki.
Nem teljesen tökéletes, de talán arra jó lesz hogy szemléltesse mire gondoltam a timerrel kapcsolatban:
Kód: Egész kijelölése
$regfile = "attiny2313.dat"
$crystal = 4000000
Const Timer1reload = 62500
Config Timer1 = Timer , Prescale = 64 'másodpercenként megszakítás
load timer1 , Timer1Reload
On Ovf1 Timer1_intsrv
'-------------------------------------------------------------------------------
'--------------------------------- I/O konfig ----------------------------------
'-------------------------------------------------------------------------------
Ventillator1 Alias Portb.1
Ventillator2 Alias Portb.3
Gomb1 Alias Pind.2
Config Ventillator1 = Output
Config Ventillator2 = Output
Config Gomb1 = Input
'-------------------------------------------------------------------------------
'---------------------------------- Változók -----------------------------------
'-------------------------------------------------------------------------------
Dim V1_be_szaml As Long
Dim V1_ki_szaml As Long
Dim V2_be_szaml As Long
Dim V2_ki_szaml As Long
Dim Gomb_flag As Bit
Const V1_be = 300 '5perc
Const V1_ki = 600 '10 perc
Const V2_be = 1200 '20 perc
Const V2_ki = 2400 '40 perc
Const V_gomb = 1800
'-------------------------------------------------------------------------------
'--------------------------------- Főprogram -----------------------------------
'-------------------------------------------------------------------------------
Enable Timer1
Start Timer1 'timer1 elidít
enable interrupts
Set Ventillator1 'ventillátorok be
Set Ventillator2
Main:
If Gomb1 = 0 Then 'ha a gomb megvan nyomva:
Set Gomb_flag 'jelzőflag beállítása
Set Ventillator1 'ventillátorok be
Set Ventillator2
End If
'ha gombnyomás történt, mindkét ventillátor bekapcsol a beállított ideig (V_gomb)
If Gomb_flag = 1 Then 'ha a jelzőflag=1, gombnyomás volt
If V1_be_szaml = V_gomb Then 'számláló figyelése, ha eléri a bellított értéket
Reset Gomb_flag 'akkor flag törlése
Reset Ventillator1 'ventillátorok ki
Reset Ventillator2
V1_be_szaml = 0 'számlálók törlése
V1_ki_szaml = 0
End If
Goto Main 'vissza a főprogramra
End If
If V1_be_szaml = V1_be Then 'számlálók figyelése '
Reset Ventillator1
V1_be_szaml = 0
V1_ki_szaml = 0
End If
If V1_ki_szaml = V1_ki Then
Set Ventillator1
V1_be_szaml = 0
V1_ki_szaml = 0
End If
If V2_be_szaml = V2_be Then
Reset Ventillator2
V2_be_szaml = 0
V2_ki_szaml = 0
End If
If V2_ki_szaml = V2_ki Then
Set Ventillator2
V2_be_szaml = 0
V2_ki_szaml = 0
End If
Goto Main 'vissza
'-------------------------------------------------------------------------------
'------------------------------ Timer1 Interrupt -------------------------------
'-------------------------------------------------------------------------------
Timer1_intsrv: 'másodpercenként megszakítás
Load Timer1 , Timer1reload 'timer1 feltöltése a megfelelő értékkel
If Ventillator1 = 1 Then Incr V1_be_szaml Else Incr V1_ki_szaml 'számlálók növelése a feltételek szerint
If Ventillator2 = 1 Then Incr V2_be_szaml Else Incr V2_ki_szaml
Return
'-------------------------------------------------------------------------------
'program vége
End
Ezért írtam a folyamatábra kis papíron.....
Simán kapcsolj egy ventillátort adott ideig be, majd várakozás, és adott idő után ki. ha jól értem a feladatkiírást, akkor ez a feladat egyik fele....
Ezzel már el lehet indulni.
A ventillátorbekapcsolás helyett vedd, mintha egyik lábon LED lenne....
Segítségként a villogó programja:
Simán kapcsolj egy ventillátort adott ideig be, majd várakozás, és adott idő után ki. ha jól értem a feladatkiírást, akkor ez a feladat egyik fele....
Ezzel már el lehet indulni.
A ventillátorbekapcsolás helyett vedd, mintha egyik lábon LED lenne....
Segítségként a villogó programja:
Kód: Egész kijelölése
$crystal = 4000000 'Sebesseg
$regfile = "M168def.dat" 'Chip
$baud = 9600
'ha van sorosport. Javasolt, hogy legyen...
'a stackek a program működéséhez kellenek. A hibakeresés fejezetben van, a konyv nagyonvégén...
$swstack = 64
$hwstack = 64
$framesize = 64
Config Portd.2 As Input 'nyomógomb be
Config Portb.1 As Output 'ventillátor1
Config Portb.3 As Output 'ventillátor2
do
portb.1=1'Eg
wait 1
portb.1 =0'kialszik
wait 1
loop -
Hooligan01