 |
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
powr Član



Pridružen-a: Tor 18 Dec 2007 13:20 Prispevkov: 668 Aktiv.: 3.14 Kraj: Postojna
|
Objavljeno: Sre Feb 18, 2009 9:47 pm Naslov sporočila: AVR in tipke |
|
|
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 |
|
 |
Jan Član


Pridružen-a: Sob 10 Jun 2006 14:19 Prispevkov: 313 Aktiv.: 1.35 Kraj: Dolenjska
|
Objavljeno: Čet Feb 19, 2009 12:35 am Naslov sporočila: |
|
|
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 |
|
 |
drVrh Član



Pridružen-a: Sre 20 Feb 2008 20:17 Prispevkov: 918 Aktiv.: 4.35 Kraj: Slovenija-Koroska-Prevalje-Lese
|
Objavljeno: Čet Feb 19, 2009 12:29 pm Naslov sporočila: |
|
|
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!  _________________ 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 |
|
 |
Silvo Moderator


 
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14673 Aktiv.: 61.93 Kraj: Koroška-okolica Dravograda
|
Objavljeno: Čet Feb 19, 2009 1:03 pm Naslov sporočila: |
|
|
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!  |
Kje si to prebral 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 |
|
 |
lojzek Član



Pridružen-a: Pet 25 Jan 2008 8:00 Prispevkov: 3387 Aktiv.: 15.99
|
Objavljeno: Čet Feb 19, 2009 2:00 pm Naslov sporočila: |
|
|
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 |
|
 |
linel Član


Pridružen-a: Čet 06 Mar 2008 21:14 Prispevkov: 178 Aktiv.: 0.85 Kraj: prekmurje
|
Objavljeno: Čet Feb 19, 2009 6:45 pm Naslov sporočila: AVR in tipke |
|
|
kako bi pa to izgledalo v bascomu? vklop izklop lučke z eno tipko, tuhtam in tuhtam, pa nič |
|
Nazaj na vrh |
|
 |
dkone Član

Pridružen-a: Sre 07 Mar 2007 18:53 Prispevkov: 2116 Aktiv.: 9.51 Kraj: Krško
|
Objavljeno: Čet Feb 19, 2009 6:52 pm Naslov sporočila: Re: AVR in tipke |
|
|
linel je napisal/a: |
kako bi pa to izgledalo v bascomu? vklop izklop lučke z eno tipko, tuhtam in tuhtam, pa nič |
Č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 |
|
 |
gumby Član


Pridružen-a: Sob 28 Apr 2007 12:32 Prispevkov: 4066 Aktiv.: 18.41
|
Objavljeno: Čet Feb 19, 2009 6:59 pm Naslov sporočila: |
|
|
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 |
|
 |
linel Član


Pridružen-a: Čet 06 Mar 2008 21:14 Prispevkov: 178 Aktiv.: 0.85 Kraj: prekmurje
|
Objavljeno: Čet Feb 19, 2009 7:12 pm Naslov sporočila: AVR in tipke |
|
|
alias, a je to ukaz ali kaj je to?
ddrb = 255 kaj pomeni ddrb? |
|
Nazaj na vrh |
|
 |
Silvo Moderator


 
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14673 Aktiv.: 61.93 Kraj: Koroška-okolica Dravograda
|
Objavljeno: Čet Feb 19, 2009 7:16 pm Naslov sporočila: Re: AVR in tipke |
|
|
linel je napisal/a: |
alias, a je to ukaz ali kaj je to?
ddrb = 255 kaj pomeni ddrb? |
Joj, joj... 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 |
|
 |
dkone Član

Pridružen-a: Sre 07 Mar 2007 18:53 Prispevkov: 2116 Aktiv.: 9.51 Kraj: Krško
|
Objavljeno: Čet Feb 19, 2009 7:40 pm Naslov sporočila: Re: AVR in tipke |
|
|
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  _________________ Denis |
|
Nazaj na vrh |
|
 |
dkone Član

Pridružen-a: Sre 07 Mar 2007 18:53 Prispevkov: 2116 Aktiv.: 9.51 Kraj: Krško
|
Objavljeno: Čet Feb 19, 2009 8:09 pm Naslov sporočila: |
|
|
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 |
|
 |
Silvo Moderator


 
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14673 Aktiv.: 61.93 Kraj: Koroška-okolica Dravograda
|
Objavljeno: Čet Feb 19, 2009 9:12 pm Naslov sporočila: |
|
|
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 |
|
 |
Krampus Član



Pridružen-a: Pon 08 Sep 2008 13:07 Prispevkov: 1853 Aktiv.: 9.07
|
Objavljeno: Čet Feb 19, 2009 10:57 pm Naslov sporočila: |
|
|
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 |
|
 |
RGorazd Član


Pridružen-a: Čet 20 Maj 2004 15:57 Prispevkov: 1714 Aktiv.: 7.23 Kraj: Ig
|
Objavljeno: Čet Feb 19, 2009 11:10 pm Naslov sporočila: |
|
|
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 |
|
 |
|
|
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
|