szintváltás utáni várakozás!

Hogyan programozzak AVR chipet? Programozók beállításai...
Bascom nyelvű programok...
Válasz küldése
Avatar
szovhoz
Bitfaragó
Hozzászólások: 608
Csatlakozott: 2007. április 7. szombat, 6:00

szintváltás utáni várakozás!

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

Adott egy atinny13 vagy 25!

szeretném megoldani hogy egy lábon van egy gomb, ha a gomb 0 lessz akkor egy másik lábon egy led csak 20s után aludjon ki.
de ha a gomb 1 lessz akkor 5 percig ne gyulladjon ki a led.

és ezt folyamatosan figyelje, csak ezt, más dolga nincs is!!!


írtam egy próbát 2db bementettel az egyik csak ezt míg a másik csakazt figyeli. De az a gond hogy alapból vagy 0 vagy 1 a gomb és program oda ugrik amelyik, és azt az időt előbb kivárja csak utánna vált!!

Kód: Egész kijelölése


$regfile = "attiny13.dat"
$crystal = 10000000

Config Pinb.0 = Input
Config Pinb.1 = Input
Config Portb.2 = Output

Declare Sub Fazisvan

Declare Sub Fazisnincs

Do

If Pinb.0 = 1 Then Call Fazisvan

If Pinb.1 = 0 Then Call Fazisnincs




Loop







Sub Fazisvan
Waitms 100
If Pinb.0 = 1 Then
Waitms 2400
Portb.2 = 0
End If
End Sub

Sub Fazisnincs
Waitms 100
If Pinb.1 = 0 Then
Waitms 2000
Portb.2 = 1
End If
End Sub


End

ha nem lenne az idő egyszerű lenne!

gondoltam az int0-a lábra is de nem akarja az igazságot az se!
gondoltam a logikai kapukra de az istenért se találtam meg a sintaxot hogy kell pontosan!?


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

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

Lényeg kimaradt:

Megy a várakozás. Ha megnyomom a gombot, akkor automatikusan a másik eset induljon el?

Tipp:

Kód: Egész kijelölése

$regfile = "attiny13.dat" 
$crystal = 10000000 

Config Pinb.0 = Input 
Config Pinb.1 = Input 
Config Portb.2 = Output 
Dim Waitmsec as long

Declare Sub Fazisvan 

Declare Sub Fazisnincs 

Do 
If Pinb.0 = 1 Then Call Fazisvan 
If Pinb.1 = 0 Then Call Fazisnincs 
Loop 


Sub Fazisvan 'ebben varok kb. 2500 msec-t vagy gombnyomást
waitmsec=0
Portb.2 = 0 

Do
  waitmsec=waitmcsec+1
  waitms 1
  if pinb.1=0 then exitdo
loop until waitmsec=2500
End Sub 

Sub Fazisnincs '20 sec varakozas vagy gombnyomas
  waitmsec=0
  Portb.2 = 1
  Do
    waitmsec=waitmcsec+1
    waitms 1
    if pinb.0=0 then exitdo
  loop until waitmsec=20000
End Sub 

De olvashatóbban a magja:

Kód: Egész kijelölése

Sub Fazisnincs '20 sec varakozas vagy gombnyomas
  waitmsec=0
  Portb.2 = 1
  for waitmsec= 1 to 20000
    waitms 1
    if pinb.0=0 then waitmsec=20001
 next waitmsec
End Sub 


Eredetihez kérdések:

Kód: Egész kijelölése

$regfile = "attiny13.dat" 
$crystal = 10000000 

Config Pinb.0 = Input 
Config Pinb.1 = Input 
Config Portb.2 = Output 

Declare Sub Fazisvan 

Declare Sub Fazisnincs 

Do 
If Pinb.0 = 1 Then Call Fazisvan 
If Pinb.1 = 0 Then Call Fazisnincs 
Loop 


Sub Fazisvan 
Waitms 100 
If Pinb.0 = 1 Then 'Ez minek? Direkt ugrott ide, mert 0 volt....
Waitms 2400 
Portb.2 = 0 
End If 
End Sub 

Sub Fazisnincs 
Waitms 100 
If Pinb.1 = 0 Then 'Ez minek? Direkt ugrott ide, mert 0 volt....
Waitms 2000 
Portb.2 = 1 
End If 
End Sub 
A prell-t en a foprogramban figyelném.....

Kód: Egész kijelölése

Do 
If Pinb.0 = 1 Then 
     waitms 10
     If Pinb.0 = 1 Then 
         Call Fazisvan 
     endif
endif

If Pinb.1 = 0 Then 
     waitms 10
     If Pinb.1 = 0 Then 
         Call Fazisnincs
     endif
endif

Loop 
Avatar
szovhoz
Bitfaragó
Hozzászólások: 608
Csatlakozott: 2007. április 7. szombat, 6:00

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

Kód: Egész kijelölése

Sub Fazisvan
Waitms 100
If Pinb.0 = 1 Then 'Ez minek? Direkt ugrott ide, mert 0 volt....
Waitms 2400
Portb.2 = 0
End If
End Sub 
ez a prellé miatt volt betéve hogy csak 100ms utánit vegyen észre majd kis ingadozást ne! a 10mhz sebességnél kb 100ms 1 másodpercre jött ki.
ki próbálom amit írtál délután köszi!

egy másik gond hogy ez a proci nem fogadja el a dim as A word -t
azt mondja kívűl van az sram-on! Xram-ba vagy eram-ba lehet csak állítani!
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

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

sw/hwstack mérete csökkentendő!
Avatar
szovhoz
Bitfaragó
Hozzászólások: 608
Csatlakozott: 2007. április 7. szombat, 6:00

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

de azt bele se írtam neki méreteket!!! akkor is az a hiba?
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

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

Az Options->Programmer->Chip az alapértelmezett, ha nem írod felül a programból....
Avatar
szovhoz
Bitfaragó
Hozzászólások: 608
Csatlakozott: 2007. április 7. szombat, 6:00

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

Kipróbáltam a te javításoddal írt progit de nem jó össze adja az időket!

megpróbálom leírni mit szeretnék ebből kihozni.

Tehát ha a bemeneten magas szint van akkor vár 20s és csak utánna, egy kimeneten lévő ledet lekapcsol.
Utána ha megnyomom és a gombon alacsony szint lesz akkor a led felgyullad, de 5percet várjon a felgyulladás előtt.

1 input 1 output.

A probléma az, hogy az egyik állapot létezik folyamatosan, ez amikor nem nyomom a gombot, a magas szint a bemeneten.

emellett a nyomkodást nem szabad észre vennie. csak ha folyamatosan nyomom a gombot.

van erre időzítő ic ami tök jó de az a baj hogy könnyen elmászik külső hatásra.

próbáltam az int lábat is de azzal is előjött a gond hogy össze adta az időket.

én azért gondoltam két lábra, hogy mindkettőre ugyan az a gomb lenne kötve, és az egyik csak a magas szintre reagálna, a másik csak az alacsonyra. de mindketőn egyzserre van magas és alacsony is.


Kép
A képet a Képfeltöltés.hu tárolja. http://www.kepfeltoltes.hu

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

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

A "nyomkodás' fogalmát definiáljuk:
- 100 msecnél rövidebb nyomvatartás?
- 10 msec és ismétlődik?
- 150 msecenként nyomkodom ismétlődően - az mi?


Ezesetekben a nullaérték (LED váltás a megnyomás pillanata, vagy a türelmi idő letelte) - azaz honna számolok?



valami folyamatábra jó lenne.... :P
Avatar
szovhoz
Bitfaragó
Hozzászólások: 608
Csatlakozott: 2007. április 7. szombat, 6:00

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

a nyomkodás 10ms lenne és a led villágítás az a türelmi idő letelte után.
Avatar
szovhoz
Bitfaragó
Hozzászólások: 608
Csatlakozott: 2007. április 7. szombat, 6:00

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

sikerült egy mega88 ban mostmár csak át kell írjam egy tinybe!

ha megnyomom a gombot 6s után a led kialszik.
ha nem nyomom vagy elengedem 21s után kigyullad a led.
nem adja össze az időt 3 egymás utáán folyamatosna mértem stopperrel!
:D
:D

de a prelét hova tegyem 10ms lenne.

Kód: Egész kijelölése

$regfile = "m88def.dat"
$crystal = 20000000
$baud = 19200

Config Pinb.0 = Input
Config Pinb.1 = Input
Config Portc.0 = Output
  Dim A As Word
  Dim B As Word
Do

   Do
   If Pinb.0 = 1 Then
    For A = 0 To 1000
    Waitms 1
    If Pinb.0 = 0 Then Exit Do
    Waitus 50
    Next A
    Portc.0 = 0


    Loop
    End If

   Do
   If Pinb.0 = 0 Then
      For B = 0 To 300
      Waitms 1
      If Pinb.0 = 1 Then Exit Do
      Waitus 50
      Next B
      Portc.0 = 1

   Loop
   End If
Loop

End
Válasz küldése