www.elektronik.si Seznam forumov www.elektronik.si
Forum o elektrotehniki in računalništvu
 
 PomočPomoč  IščiIšči  Seznam članovSeznam članov  SkupineSkupine  StatisticsStatistika  AlbumAlbum  DatotekeFilemanager DokumentacijaDocDB LinksPovezave   Registriraj seRegistriraj se 
  PravilaPravila  LinksBolha  PriponkePriponke  KoledarKoledar  ZapiskiZapiski Tvoj profilTvoj profil Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil PrijavaPrijava 

Atmega8 preverjanje stanja vhoda (tipka)

 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Elektronika
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
lamela123
Član
Član



Pridružen-a: Sob 10 Mar 2012 15:15
Prispevkov: 235
Aktiv.: 1.45
Kraj: Celje

PrispevekObjavljeno: Sob Feb 02, 2013 5:33 pm    Naslov sporočila:  Atmega8 preverjanje stanja vhoda (tipka) Odgovori s citatom

Lep pozdrav!

Izdelujem program za nadzor bazena. Ker sem ravno začel programirati, imam začetniške težave. Na vhod PD0 sem priključil tipko, s katero bi vklopil rele na izhodu, zraven pa izpisal določeno besedilo na LCD display-ju. Problem je v tem, da ko program teče, tipka ne reagira, dokler ne pride program (ki je v zanki) do točke preverjanja vhodnih portov. Kako bi rešil ta problem, da bi kjerkoli v programu lahko preverjal stanje na vhodu?

Koda:

Do
Inputtest:
Debounce Pind.0 , 1 , Rele1stevec
Debounce Pind.0 , 0 , Standby







Rele1stevec:

Incr Stevec
 If Stevec = 2 Then
Stevec = 0
End If
Goto Izbira1


Izbira1:
If Stevec = 1 Then
Goto Rele1
Else
Goto Izbira2
End If

Izbira2:
If Stevec = 0 Then
Goto Rele1neg
Else
Goto Standby
End If





Rele1:
Pinc.5 = 1
Locate 1 , 1
Lcd "Vklop crpalke"
Waitms 300
Cls
Goto Standby

Rele1neg:
Pinc.5 = 0
Locate 1 , 1
Lcd "Izklop crpalke"
Waitms 300
Cls
Goto Standby










 Standby:
 Locate 1 , 1
 Lcd "Temp.bazena:   c"
 Locate 2 , 1                                               'izpišem besedilo
 Lcd "Temp.kolekt:   c"
 Waitms 500
Cls
 Locate 1 , 1
 Lcd "Temp.zunaj:    c"
 Waitms 500
 Cls                                                        'počakam 1 sekudnoLocate 1 , 1
Loop
End

_________________
Lep pozdrav!
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Jaka57
Moderator
Moderator



Pridružen-a: Ned 12 Dec 2004 21:47
Prispevkov: 5824
Aktiv.: 24.51
Kraj: Grosuplje

PrispevekObjavljeno: Sob Feb 02, 2013 5:46 pm    Naslov sporočila:   Odgovori s citatom

Mogoče s prekinitvijo (interupt).
Nekaj primerov najdeš tukaj. Mislim, da imaš tudi v Helpu Bascoma Helpu Bascoma opis kako.

_________________
Lp, Jaka
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
LEDuser
Član
Član



Pridružen-a: Pon 31 Mar 2008 12:06
Prispevkov: 1104
Aktiv.: 5.25
Kraj: Ljubljana

PrispevekObjavljeno: Sob Feb 02, 2013 6:00 pm    Naslov sporočila:   Odgovori s citatom

Prvo kar si naredil narobe je, da nesmiselno bereš tipko. Če imaš tipko vezano na maso (pritisnjeno stanje "0") potem moraš napisati tako:

Debounce , Pind.0 , 0 , Rele1stevec , Sub

Pri tem ukazu ti bo ob pritisku na tipko skočilo na interrrupt "Rele1stevec"

_________________
Razsvetljujemo od leta 1920!
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
lamela123
Član
Član



Pridružen-a: Sob 10 Mar 2012 15:15
Prispevkov: 235
Aktiv.: 1.45
Kraj: Celje

PrispevekObjavljeno: Sob Feb 02, 2013 6:21 pm    Naslov sporočila:   Odgovori s citatom

Tipko sem vezal na PIN in na +5V z 10k uporom. Hvala za pomoč!
_________________
Lep pozdrav!
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
mucek
Član
Član



Pridružen-a: Tor 01 Avg 2006 10:47
Prispevkov: 5538
Aktiv.: 24.02
Kraj: Domzale

PrispevekObjavljeno: Sob Feb 02, 2013 9:34 pm    Naslov sporočila:   Odgovori s citatom

Vse podprograme zmeci ven iz do loopa in jih klici s sub funkcijo, kot je napisal leduser. Podprogram mora biti zakljucen z return in ne z goto!!!

Do
Berem tipko 1
Loop

Sub1:
Naredim nekaj za tipko 1
Return

Lp, g

_________________
...lahko pa se tudi motim ...
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
lamela123
Član
Član



Pridružen-a: Sob 10 Mar 2012 15:15
Prispevkov: 235
Aktiv.: 1.45
Kraj: Celje

PrispevekObjavljeno: Ned Feb 03, 2013 10:31 am    Naslov sporočila:   Odgovori s citatom

Koda:

Config Portd = Input
 Config Portc = Output
 Config Debounce = 25
 Config Timer0 = Timer , Prescale = 8
 Dim Stevec As Byte
On Timer0 Inputtest
 Enable Interrupts
 Enable Timer0

Do
Inputtest:
Debounce Pind.0 , 1 , Rele1stevec
Debounce Pind.0 , 0 , Standby
Loop

Standby:
 Locate 1 , 1
 Lcd "Temp.bazena:   c"
 Locate 2 , 1
 Lcd "Temp.kolekt:   c"
 Waitms 500
Cls
 Locate 1 , 1
 Lcd "Temp.zunaj:    c"
 Waitms 500
 Cls
 Goto Inputtest







Rele1stevec:

Incr Stevec
 If Stevec = 2 Then
Stevec = 0
End If
Goto Izbira1


Izbira1:
If Stevec = 1 Then
Goto Rele1
Else
Goto Izbira2
End If

Izbira2:
If Stevec = 0 Then
Goto Rele1neg
End If
Return





Rele1:
Pinc.5 = 1
Locate 1 , 1
Lcd "Vklop crpalke"
Waitms 300
Cls
Goto Standby




Rele1neg:
Pinc.5 = 0
Locate 1 , 1
Lcd "Izklop crpalke"
Waitms 300
Cls
Goto Standby
End


Mi lahko prosim nekdo popravi kodo, ker se ne znajdem z tem interruptom.

_________________
Lep pozdrav!
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Elektronika Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Stran 1 od 1

 
Pojdi na:  
Ne, ne moreš dodajati novih tem v tem forumu
Ne, ne moreš odgovarjati na teme v tem forumu
Ne, ne moreš urejati svojih prispevkov v tem forumu
Ne, ne moreš brisati svojih prispevkov v tem forumu
Ne ne moreš glasovati v anketi v tem forumu
Ne, ne moreš pripeti datotek v tem forumu
Ne, ne moreš povleči datotek v tem forumu

Uptime: 10 dni


Powered by phpBB © 2001, 2005 phpBB Group