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

Hogyan programozzak AVR chipet? Programozók beállításai...
Bascom nyelvű programok...
Avatar
jocoka1973
Újonc
Ú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

Hozzászólás Szerző: jocoka1973 »

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
Hooligan01

Hozzászólás Szerző: 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. :D
Avatar
jocoka1973
Újonc
Újonc
Hozzászólások: 12
Csatlakozott: 2007. augusztus 23. csütörtök, 6:00

Hozzászólás Szerző: jocoka1973 »

Szia

Köszi a segítséget probálok valamit összehozni,olvasgatom a fórumot meg a könyvet is.
Csak nagyon kezdő vagyok és probálom felfogni az egészet remélem sikerül a dolog.
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

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....
Avatar
jocoka1973
Újonc
Újonc
Hozzászólások: 12
Csatlakozott: 2007. augusztus 23. csütörtök, 6:00

Hozzászólás Szerző: jocoka1973 »

szia
Az a gondom hogy két különbözö kimeneten nem tudom úgy beállitani a az idözitést hogy egymástól független legyen.
Pl: PB0-lábon modjuk 5percet megy a ventillátor és 10percet áll
PB1-lábon 10percet megy 20 percet álljon.
Ebben kellene egy kis segítség.
Avatar
nobody_hun
Bitfaragó
Hozzászólások: 425
Csatlakozott: 2005. november 14. hétfő, 7:00

Hozzászólás Szerző: nobody_hun »

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:

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
És persze a megszakításban ugyanezt a B kimenetre...
Avatar
jocoka1973
Újonc
Újonc
Hozzászólások: 12
Csatlakozott: 2007. augusztus 23. csütörtök, 6:00

Hozzászólás Szerző: jocoka1973 »

szia

Én a progit bascom-ban irom,de nagyon kezdő vagyok :oops: ezért teljesen az elejétől kellene,leirnod a progit.
Hogy lásam hogy is néz ki.

Megadom a paramétereket : ATTiny2313 4MHz-en
Nyomógomb PD2-es lábon, a kétt kimenet pedig PB1-es és PB3-as láb.
Elöre is köszönöm.
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

Ajaj. Tessék elindulni a könyvben lassan.....
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
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:)....
Avatar
nobody_hun
Bitfaragó
Hozzászólások: 425
Csatlakozott: 2005. november 14. hétfő, 7:00

Hozzászólás Szerző: nobody_hun »

jocoka1973 írta:...ezért teljesen az elejétől kellene,leirnod a progit.
Hogy lásam hogy is néz ki.
8O
Nem akarlak megbántani, tőlem ilyet ne kérj...
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

Teljesen előlről leírva itt sztem nem lesz program :twisted: . Lépésenként mindenki szívesen segít, de helyetted senki nem írja meg. Ezért jönnek a részfeladatokra az ötletek, ezért írja nobody_hun is hogy tessék magadnak megtanulni. szívesen segít mindenki, de más helyett dolgozni nem fog....
Avatar
jocoka1973
Újonc
Újonc
Hozzászólások: 12
Csatlakozott: 2007. augusztus 23. csütörtök, 6:00

Hozzászólás Szerző: jocoka1973 »

sziasztok

okés értem csak elkezdeni nehéz nagyon és nem azért kértem a segítséget mert azt akartam hogy más írja meg helyetem,ezt senkitől se vártam. :oops:
Hooligan01

Hozzászólás Szerző: 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:

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

Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

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:

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 
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

Ajaj. Kezdőként nem biztos hogy a pontos Timer alapú időzítést kell első feladatként megismerni....... Én a Wait (kb-i) várakozással írnám meg.... (kezdőként a megszakítás ls a sallangjai nem túl nehezek?)

Ebből is látszik, hogy 1 problémára van 3-4-5 sok megoldás:). A mérnöki feladatok szépsége:).
Hooligan01

Hozzászólás Szerző: Hooligan01 »

Igyekeztem átláthatóan megírni, hiba azért tuti van benne :twisted:

Remélem segít megérteni, de boldogabb nem lesz tőle :twisted:
Válasz küldése