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 

AVR in tipke

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



Pridružen-a: Tor 18 Dec 2007 13:20
Prispevkov: 668
Aktiv.: 3.14
Kraj: Postojna

PrispevekObjavljeno: Sre Feb 18, 2009 9:47 pm    Naslov sporočila:  AVR in tipke Odgovori s citatom

Ker me tipke pri programiranju še ne ubogajo čisto bi prosil za primer v C ju, ki bi delal to, da ko pritisnem tipko da se ledica prizge, in da se ugasne ko tipko ponovno pritisnem. To mi je sicer uspelo napisati z ukazom delay ampak problem nastane ko tipko drzim, ker ledica utripa. Prosil bi za primer brez brez ukaza delay. Vnaprej hvala.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo Obišči avtorjevo spletno stran MSN Messenger - naslov
Jan
Član
Član



Pridružen-a: Sob 10 Jun 2006 14:19
Prispevkov: 313
Aktiv.: 1.35
Kraj: Dolenjska

PrispevekObjavljeno: Čet Feb 19, 2009 12:35 am    Naslov sporočila:   Odgovori s citatom

Poskusi to:

Koda:
DDRB = 0b10000000;  // PB7 -> ledica, PB0 -> tipka

char tipka = 0;
char staro_stanje = 0;

while (1)
{
    tipka = PORTB & (0b00000001); 

    // če je tipka pritisnjena in prejšnji cikel ni bila, jo preklopi
    if (tipka && (staro_stanje == 0)) PORTB = PORTB ^ 0b10000000;   

    // shranimo staro stanje, da ga naslednji cikel primerjamo
    staro_stanje = tipka;
}


Preveri če dela.

lp
Jan
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
drVrh
Član
Član



Pridružen-a: Sre 20 Feb 2008 20:17
Prispevkov: 918
Aktiv.: 4.35
Kraj: Slovenija-Koroska-Prevalje-Lese

PrispevekObjavljeno: Čet Feb 19, 2009 12:29 pm    Naslov sporočila:   Odgovori s citatom

Mogoče veš zakaj ti vse obstoji ko pritisneš tipko!

Zato ker uporabljaš ukaz delay in kaj ta ukaz pomeni, pomeni, da MCU obstoji, čisto obstoji nič ne sprejme v vhode nič ne da na izhode in to je ta delay! Za špilarijo lahko to uporabljaš za resne zadeve pa moraš uporabiti števec, ki šteje čas! Rolling Eyes

_________________
Iz dneva v dan sem se spraševal kaj je to elektrika, vendar nisem našel odgovora ... in še vedno si postavljam to vprašanje
LP
Grega
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo MSN Messenger - naslov
Silvo
Moderator
Moderator



Pridružen-a: Pon 24 Feb 2003 17:09
Prispevkov: 14673
Aktiv.: 61.93
Kraj: Koroška-okolica Dravograda

PrispevekObjavljeno: Čet Feb 19, 2009 1:03 pm    Naslov sporočila:   Odgovori s citatom

drVrh je napisal/a:
Mogoče veš zakaj ti vse obstoji ko pritisneš tipko!

Zato ker uporabljaš ukaz delay in kaj ta ukaz pomeni, pomeni, da MCU obstoji, čisto obstoji nič ne sprejme v vhode nič ne da na izhode in to je ta delay! Za špilarijo lahko to uporabljaš za resne zadeve pa moraš uporabiti števec, ki šteje čas! Rolling Eyes


Kje si to prebral Confused Softwersko mikrokontrolerja ne moreš ustaviti. Razen delno, da ga daš v mirovanje (sleep) Iz "spanja" pa ga lahko v vsakem trenutku "zbudiš".

V assemblerju bi preverjanje tipke napisal takole:

Koda:
sbi DDRB,1           ;Pin PB1 je izhod
 sbi PORTB,0          ;na pinu PB0 vključen pulup

Zanka:
 sbic PINB,0           ;je tipka stisnjena
 rjmp PC-1             ;ne
 //rcall Pavza                 ;tukaj lahko dodaš par uS dolgo pavzo da preprečiš motnje zaradi odskakovanja kontaktov
 sbis PORT,1           ;ledica na izhodu gori?
 rjmp LedOn
 cbi PORTB,1           ;izklop izhoda
 sbis PINB,0             ;je tipka spuščena
 rjmp PC-1
 rjmp Zanka
LedOn:
 sbi PORTB,1            ;vklop izhoda
 sbis PINB,0
 rjmp PC-1
 rjmp Zanka


;-----------------------------------------------------------
;Pavza 50uS   Oscilator 4Mhz
;-----------------------------------------------------------
Pavza:
   push r20
   ldi r20,63
P_zanka:
   dec r20
   brne P_zanka
   pop r20
   ret





_________________
lp
Silvo
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
lojzek
Član
Član



Pridružen-a: Pet 25 Jan 2008 8:00
Prispevkov: 3387
Aktiv.: 15.99

PrispevekObjavljeno: Čet Feb 19, 2009 2:00 pm    Naslov sporočila:   Odgovori s citatom

običajno tak pogoj (gledanja pritisnjene tipke) dam v zanko WHILE, in potem izhod zamenjam šele, ko tipko spustim. pa običajno zaradi debounca tipke dodam še manjši _ delay_ms (50). Izhod najlažje zamenjaš z XOR funkcijo (primer PORTB ^=0b10000000)
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
linel
Član
Član



Pridružen-a: Čet 06 Mar 2008 21:14
Prispevkov: 178
Aktiv.: 0.85
Kraj: prekmurje

PrispevekObjavljeno: Čet Feb 19, 2009 6:45 pm    Naslov sporočila:  AVR in tipke Odgovori s citatom

kako bi pa to izgledalo v bascomu? vklop izklop lučke z eno tipko, tuhtam in tuhtam, pa ničSmile
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
dkone
Član
Član



Pridružen-a: Sre 07 Mar 2007 18:53
Prispevkov: 2116
Aktiv.: 9.51
Kraj: Krško

PrispevekObjavljeno: Čet Feb 19, 2009 6:52 pm    Naslov sporočila:  Re: AVR in tipke Odgovori s citatom

linel je napisal/a:
kako bi pa to izgledalo v bascomu? vklop izklop lučke z eno tipko, tuhtam in tuhtam, pa ničSmile



Čisto enostavno. Uporabiš dve zanke.

primer: (potrebno ga bi bilo še malo poštimat,kar se tiče odčitavanja tipke)

Koda:

Config Portb = Output
Config Pinc.0 = Input
Izhod Alias Portb.1

Tipka Alias Pinc.0
Ddrb = 255

Portc.0 = 1                                                 'pullup on


Zanka1:
Do
Waitms 10
If Tipka = 0 Then
   Waitms 10
      If Tipka = 0 Then
         Izhod = 1
         Goto Zanka2
      End If
End If
Loop

Zanka2:
'Waitms 5
Do

If Tipka = 0 Then
   Waitms 10
      If Tipka = 0 Then
         Izhod = 0
         Goto Zanka1
      End If
End If
Loop

_________________
Denis
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
gumby
Član
Član



Pridružen-a: Sob 28 Apr 2007 12:32
Prispevkov: 4066
Aktiv.: 18.41

PrispevekObjavljeno: Čet Feb 19, 2009 6:59 pm    Naslov sporočila:   Odgovori s citatom

RB0 tipka
RB1 LED

Koda:
#define F_CPU 4800000

#include <avr/io.h>
#include <util/delay.h>

int main()
{

   DDRB=0b00111110;
   PORTB=1;

   for(;;)
   {
      while(PINB & 1) ;
      PORTB^=2;
      _delay_ms(30);
      while(!(PINB & 1)) ;
      _delay_ms(30);
   }
}

_________________
Tule nisem več aktiven.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
linel
Član
Član



Pridružen-a: Čet 06 Mar 2008 21:14
Prispevkov: 178
Aktiv.: 0.85
Kraj: prekmurje

PrispevekObjavljeno: Čet Feb 19, 2009 7:12 pm    Naslov sporočila:  AVR in tipke Odgovori s citatom

alias, a je to ukaz ali kaj je to?
ddrb = 255 kaj pomeni ddrb?
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Silvo
Moderator
Moderator



Pridružen-a: Pon 24 Feb 2003 17:09
Prispevkov: 14673
Aktiv.: 61.93
Kraj: Koroška-okolica Dravograda

PrispevekObjavljeno: Čet Feb 19, 2009 7:16 pm    Naslov sporočila:  Re: AVR in tipke Odgovori s citatom

linel je napisal/a:
alias, a je to ukaz ali kaj je to?
ddrb = 255 kaj pomeni ddrb?



Joj, joj... Sad branje datasheta! Brez pozanvanja arhitekture ni programiranja, pa če tudi v visokonivojskem jeziku. DDRB je je register s katerim določimo I/O funkcijo pinov porta B.

_________________
lp
Silvo
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
dkone
Član
Član



Pridružen-a: Sre 07 Mar 2007 18:53
Prispevkov: 2116
Aktiv.: 9.51
Kraj: Krško

PrispevekObjavljeno: Čet Feb 19, 2009 7:40 pm    Naslov sporočila:  Re: AVR in tipke Odgovori s citatom

linel je napisal/a:
alias, a je to ukaz ali kaj je to?
ddrb = 255 kaj pomeni ddrb?


z ukazom alias, pinu portc.0 priredim pomožno ime,da je potem program bolj razumljiv.

Na drugo vprašanje ti je pa Silvo odgovoril.

To je sicer pisano za atmega32,kjer sem z portc.0=1 vključil notranje pullup porte,pri seriji tiny je drugače,oz isto,pišemo lahko pa tudi kot set pinx.y .

Namesto alias bi lahko dal tudi : tipka=pinc.0,še pred tem pa deklariral tipk kot bit. Sicer pa,imaš HELP od bascoma. Pritisni F1 Wink

_________________
Denis
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
dkone
Član
Član



Pridružen-a: Sre 07 Mar 2007 18:53
Prispevkov: 2116
Aktiv.: 9.51
Kraj: Krško

PrispevekObjavljeno: Čet Feb 19, 2009 8:09 pm    Naslov sporočila:   Odgovori s citatom

Pa še malo spremenjen,kjer sem odpravil motnje z odskakovanjem kontaktov tipk. Dela 100%.

Koda:

Config Portb = Output
Config Pinc.0 = Input
Izhod Alias Portb.1

Tipka Alias Pinc.0
Ddrb = 255

Portc.0 = 1                                                 'pullup on


Zanka1:
Do
Waitms 250
While Tipka = 0
Izhod = 1
Waitms 250
Goto Zanka2
Wend
Loop

Zanka2:
Do
Waitms 250
While Tipka = 0
Izhod = 0
waitms 250
Goto Zanka1
Wend
Loop

_________________
Denis
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
Silvo
Moderator
Moderator



Pridružen-a: Pon 24 Feb 2003 17:09
Prispevkov: 14673
Aktiv.: 61.93
Kraj: Koroška-okolica Dravograda

PrispevekObjavljeno: Čet Feb 19, 2009 9:12 pm    Naslov sporočila:   Odgovori s citatom

Bascom-a sicer ne pozam ampak po moje to ne dela tako kot je bilo zastavleno vprašanje v prvem sporočilu. Kaj se dogaja ko je tipka stistnena? Iz prve zanke skače v drugo iz druge v prvo. Kje sploh preverjaš, če je tipka spuščena? So pa to prave "štrene". Me zanima kako bi to izvedel recimo, če bi želel tipke brati matrično - recimo 3x4 istočasno pa bi bil port s tiplami vhodno izhodni. Bi za zato porabil pol pomnilnika mikrokontrolerja?
_________________
lp
Silvo
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Krampus
Član
Član



Pridružen-a: Pon 08 Sep 2008 13:07
Prispevkov: 1853
Aktiv.: 9.07

PrispevekObjavljeno: Čet Feb 19, 2009 10:57 pm    Naslov sporočila:   Odgovori s citatom

Ali ne gre enostavno z negiranjem?

PortX.x = NOT PortX.x

_________________
Nisem ravno najbolj pameten na svetu, tu in tam pa imam kakšno idejo.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
RGorazd
Član
Član



Pridružen-a: Čet 20 Maj 2004 15:57
Prispevkov: 1714
Aktiv.: 7.23
Kraj: Ig

PrispevekObjavljeno: Čet Feb 19, 2009 11:10 pm    Naslov sporočila:   Odgovori s citatom

V bascomu se tole enostavno reši z ukazom debounce., vendar on sprašuje za rešitev v C-ju in ne v bascomu.

Drugače pa:

main:
Debounce tipka, naredinekaj
goto main

naredinekaj:
toggle izhod
goto main

to je vse, kar rabiš v bascomu...če boš tipko držal, se ne bo zgodilo nič, ker debounce gleda spremembo stanja vhoda. Ko pritisneš tipko, potegneš vhod iz +5v na maso. Debounce to zazna, počaka tistih nekaj ms, da mine prehodni pojav, preveri stanje še enkrat in takrat izvede to kar mora. Ko se spet vrne v glavni program, spremembe stanja na vhodu ne zazna in se ne dogaja nič.

V Cju je pa [slovenščina je zame španska vas] že odgovor napisan. Pa tudi s Silvotove strani v assemblerju. Skratka, rešitev je cel kup.

_________________
.
._. _ _ ._. _.__. _|
[ (_](_)[ (_] /_(_]
._|
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> AVR, LPC900, x51 Č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: 494 dni


Powered by phpBB © 2001, 2005 phpBB Group