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

Pridružen-a: Pet 16 Avg 2013 23:07 Prispevkov: 53 Aktiv.: 0.37
|
Objavljeno: Ned Nov 24, 2013 12:43 pm Naslov sporočila: AND vrata na atmegi32 |
|
|
LP
Prosil bi vas, če mi lahko pomagate v naslednji težavi. Za vajo študiram, kako napraviti AND vrata z atmego32. Projekt bi sledil pa takole. Uporabil bi recimo dva IR senzorja, ki zaznavata gibanje skoznje. Bila bi dva metra narazen ali več. Ko bi šel skozi prvega bi svetla ena ledika, ko bi šel pa skozi drugega pa druga ledika. Zdaj pa imam eno težavo. Druga ledika bi svetla samo v primeru, če bi šel skozi enega in drugega. Če pa bi prvega recimo prestopil in šel skozi drugega pa ne. Zdaj pa če navedem navadna AND vrata, ki bi imela pogoj če bo aktiven prvi in drugi senzor prižgi drugo lediko. Težava pa je v tem, da ko bom šel recimo skozi prvega bo ta sicer aktiven ko bo prekinjen ne toda ko bom šel skozi njega bo zopet neaktiven in potem pogoj 1 AND 2 ne bo izpolnjen tudi ko bom šel skozi drugega. Kako narediti, da bo recimo ostala nekakšna časovna zakasnitev po prekinitvi senzorja recimo 5 sekund in bo potem ko bom sel skozi drugega prvega še vedno prepoznalo kot aktivnega, da bo pogoj AND izpolnjen?
Ista težava nmastanje recimo z tipkovnico. ČE želim narediti recimo neko kljucavnico, ki zahteva gesto(recimo 5483). Če navedel AND pogoj bo sicer zaznaj ko bodo vse te tipke aktivne. Akpak če tipkam posamezno se ta teorija poruši.
Hvala za pomoč |
|
Nazaj na vrh |
|
 |
lbozo Član

Pridružen-a: Pet 18 Jan 2008 23:51 Prispevkov: 71 Aktiv.: 0.33 Kraj: Vodice
|
Objavljeno: Ned Nov 24, 2013 1:10 pm Naslov sporočila: |
|
|
Pri prehodu čez prvi senzor vstopiš v neskončno zanko in vklopiš timer, ki bo po preteku določenega časa sprožil izhod iz zanke. Ko si v tej neskončni zanki pa preverjaš ali je sprožen prehod tudi čez drugi senzor. _________________ Lep pozdrav, Božo
Nazadnje urejal/a lbozo Ned Nov 24, 2013 1:50 pm; skupaj popravljeno 1 krat |
|
Nazaj na vrh |
|
 |
Jaka57 Moderator



Pridružen-a: Ned 12 Dec 2004 21:47 Prispevkov: 5824 Aktiv.: 24.51 Kraj: Grosuplje
|
Objavljeno: Ned Nov 24, 2013 1:36 pm Naslov sporočila: |
|
|
Najprej popravi prispevek, da bo berljiv, zelo dobrodošlo bi bilo, če bi bila kje kakšna vejica.
Zakaj vztrajaš na statičnem AND? To je zaporedje dogodkov in ne sočasni dogodki zato jih je potrebno tako obravnavat.
Pri senzorjih, kaj pa če se aktivira samo drugi senzor?
Tipkovnica je prav tako zaporedje pritiskov in nikakor sočasni pritiski, torej tvoja rešitev s takojšnjim AND pri pritiskanju tipk odpade, lahko pa ga uporabiš na koncu, ko so bile pritisnjene že vse štiri tipke.
Vzami v roke svinčnik in papir in si nariši diagram poteka! _________________ Lp, Jaka |
|
Nazaj na vrh |
|
 |
pogorevc Član

Pridružen-a: Pet 16 Avg 2013 23:07 Prispevkov: 53 Aktiv.: 0.37
|
Objavljeno: Pon Nov 25, 2013 7:36 pm Naslov sporočila: LP |
|
|
Če bo samo senzor2 aktiven se ne zgodi nič. Morata biti oba aktivna, da sveti ledika2.
No kako se pa potem naredi to zaporedje dogodkov za tipkovnico? Oz kako bi se napisala koda v C jeziku, če imam recimo tipkovnico s tipkami do 5 na PORTB kot vhode in želim v primeru vnesene 1,2 in 3 tipke, da bo led 1 svetla, ki je priklopljena na izhod PORTA PIN1? Ali je potrebno shranjevati v pomnilnik Atmege32? |
|
Nazaj na vrh |
|
 |
lojzek Član



Pridružen-a: Pet 25 Jan 2008 8:00 Prispevkov: 3388 Aktiv.: 15.95
|
Objavljeno: Tor Nov 26, 2013 9:57 am Naslov sporočila: |
|
|
Ali vas v šoli še niso naučili, kaj pravzaprav atmega32 pravzaprav je?
Ali vam niso povedali da je pravzaprav to en mini računalnik. Ki nič ne zna in nič ne dela, dokler vanj ne vneseš pravilno napisanega programa? Kot njegov veliki brat, s pomočjo katerega si tipkal ta sporočila?
Ali vas niso še nič učili o programiranju?
Kako potem, da ste dobili tako nalogo?
Glede na to, da še čistih osnov ne znaš, boš težko v doglednem času izdelal to, kar želiš. Tako ti tudi pomoč v tej temi ne bo prava pomoč, ker je ne boš zastopil. Najprej boš moral osvojiti osnove... Vse ostalo bo bolj ko ne delanje naloge namesto tebe, od tega pa ne boš popolnoma nič odnesel... |
|
Nazaj na vrh |
|
 |
pogorevc Član

Pridružen-a: Pet 16 Avg 2013 23:07 Prispevkov: 53 Aktiv.: 0.37
|
Objavljeno: Tor Nov 26, 2013 5:33 pm Naslov sporočila: LP |
|
|
VEm kaj je atmega32 in kaj je programiranje tega majhnega "racunalnika". In zadeva ni nobena naloga, ampak učenje da domačem bratcu. Nekje je pač potrebno začeti in noben ne bo dol padu, če se mu kaj pove ne. ČE se ne motim sem mislil predvsem na int.funkcijo, ki jo uvedem sam in s katero lahko potem takšne podatke obračam okoli.
Očitno pa konkretnega odgovora ne. Kar se pa tiče mojih vejic itd pa naj vsak prvo svoje poste prebere in popravi, če je že tako zelo občutljiv na ostale tekste, ki sploh niso povezani z mojim vprašanjem |
|
Nazaj na vrh |
|
 |
. Neznanec

Pridružen-a: Pet 01 Okt 2004 1:17 Prispevkov: 1 Aktiv.: 0.00
|
Objavljeno: Tor Nov 26, 2013 5:52 pm Naslov sporočila: |
|
|
Brisana vsebina odstranjenega uporabnika. |
|
Nazaj na vrh |
|
 |
Jaka57 Moderator



Pridružen-a: Ned 12 Dec 2004 21:47 Prispevkov: 5824 Aktiv.: 24.51 Kraj: Grosuplje
|
Objavljeno: Tor Nov 26, 2013 6:49 pm Naslov sporočila: Re: LP |
|
|
pogorevc je napisal/a: |
...........Očitno pa konkretnega odgovora ne. Kar se pa tiče mojih vejic itd pa naj vsak prvo svoje poste prebere in popravi, če je že tako zelo občutljiv na ostale tekste, ki sploh niso povezani z mojim vprašanjem |
Ne gre za občutljivost na vejice, temveč zato, ker je tvoj tekst, brez njih, popolnoma neberljiv.
In nisem edini, ki ne ve, kaj točno želiš.
Torej, če se ti ne želiš potruditi, ne vidim v tem, da ti forumaši ne odgovorijo, čisto nič narobe.
Mogoče tudi zato, kot je napisal @Kroko, ker, enostavno, tvojega vprašanja ne razumejo in se jim zdi neumno, da bi tvoje skropucalo brali desetkrat, da bi vsaj približno vedeli kaj hočeš! _________________ Lp, Jaka |
|
Nazaj na vrh |
|
 |
pogorevc Član

Pridružen-a: Pet 16 Avg 2013 23:07 Prispevkov: 53 Aktiv.: 0.37
|
Objavljeno: Tor Nov 26, 2013 7:58 pm Naslov sporočila: LP |
|
|
Hotel sem vprasati samo to, kako izvesti, da bo PORTB PIN0 prepoznaven kot pozitivna 1 oz. kot aktiven še 15 sekund po tem ko dejansko ne bo več. Zato sem omenil npr. senzor. Če ga prestopim bo prepoznal kot enko, ampak potem bo zopet 0 ko ta ne bo sklenjen. Jaz pa bi rad uporabil zakasnitev zaradi drugega senzorja?
Dejansko bi se rad naučil, da zapiše v spomin, da je bil neki if pogoj izpolnjen tudi po tem, ko bo nadaljeval program.
Primer:
while(1){
if(bit_is_clear(PINB,1))// preveri ali je senzor na vhodu aktiven
{_delay_ms(50);
if(bit_is_clear(PINB,1));
senzor=1;}// če je zapiši v int.funkcijo 1
else senzor=0;// če ni zapiši 0
if(bit_is_clear(PINB,2))// preveri drugi senzor
senzor=2;// če je zapiši kot 2
else senzor=0;
if(senzor=1&2)// če sta bila oba aktivna
PORTC ^= 1 << PINC0;// aktiviraj IZHOD
}
Zadeva pa se zakomplicira, ker bo zagotovo med vrsticami nekakšna zakasnitev v času ne? Poskusil sem kot navedeno z int funkcijo "senzor", vendar še vedno vidim težavo v tem, da se časi ne bodo skladali med prepoznavanjem prvega in drugega senzorja. Jaz pa bi želel priti zadevi do dna, kako napisati, da bo ko bo if pogoj:
if(bit_is_clear(PINB,1)) izpolnjen
ga zapisal v spomin kot aktivnega recimo 20sekund tako, da bo lahko kasneje ko bo tudi pogoj senzorja 2 aktiven, vse skupaj prepoznal kot sklenjeno in bo izvedel 1 na izhod:
if(senzor=1&2)// če sta bila oba aktivna
PORTC ^= 1 << PINC0;// aktiviraj IZHOD
zamisel je bila kot rečeno senzorja, ki sta nekaj metrov narazen. Ko bosta aktivna oba bo vklopil izhod. Vendar pa želim to aktivnost senzorja 1 omejiti, da ne bo zapisan kot pozitiven za nedoločen čas. V tem primeru bi nastala težava v tem, da bi danes nekdo prestopil senzor 1, drugi dan pa nekdo senzor 2 in bi zadeva bila sklenjena. Zato pa bi želel senzor 1 kot aktivnega samo nek določen čas(poljuben) |
|
Nazaj na vrh |
|
 |
HeBird Član


Pridružen-a: Ned 16 Avg 2009 16:36 Prispevkov: 79 Aktiv.: 0.41 Kraj: Domžale
|
Objavljeno: Tor Nov 26, 2013 8:38 pm Naslov sporočila: |
|
|
Ne programiram v C, ampak Bascomu, tako da ti konkretno žal ne morem pomagati.
lbozo ti je povedal točno to, kar moraš naredit.
lbozo je napisal/a: |
Pri prehodu čez prvi senzor vstopiš v neskončno zanko in vklopiš timer, ki bo po preteku določenega časa sprožil izhod iz zanke. Ko si v tej neskončni zanki pa preverjaš ali je sprožen prehod tudi čez drugi senzor. |
Seveda moraš pa tudi prvi senzor preverjati v neskončni zanki. _________________ Gašper |
|
Nazaj na vrh |
|
 |
Jaka57 Moderator



Pridružen-a: Ned 12 Dec 2004 21:47 Prispevkov: 5824 Aktiv.: 24.51 Kraj: Grosuplje
|
Objavljeno: Tor Nov 26, 2013 9:20 pm Naslov sporočila: |
|
|
@pogorevc: od kje ti ta del programa? Glede na to, da si napisal:
Citiram: |
Dejansko bi se rad naučil, da zapiše v spomin, da je bil neki if pogoj izpolnjen tudi po tem, ko bo nadaljeval program. |
se sprašujem, kaj misliš s tem, da zapiše v spomin.
Ali ni v zgornjem programu spremenljivka senzor (in ne funkcija, kot je napisano v komentarju), ki je odvisno od pogojev enkrat 1, drugič pa 0? Ali ni to zapisano v spominu?
Torej, to kar ti sprašuješ je točno v tem delu programa:
Koda: |
if(bit_is_clear(PINB,1));
senzor=1;}// če je zapiši v int.funkcijo 1
else senzor=0;// če ni zapiši 0 |
Torej, ko je aktiviran senzor1 prižgeš prvo LED, greš v drugo zanko, kjer počakaš določen čas na aktivacijo drugega senzorja in če po določenem času tega ni, pač gori samo prva LED, če se pa senzor v tem času aktivira, ugasneš prvo LED in prižgeš drugo.
In če neki spremenljivki prirediš neko vrednost, bo ta vrednost ostala zapisana v spominu, dokler ji ne prirediš druge vrednosti, ne glede na to, kako dolg je program in kaj vse bo počel.
Seveda pa si prečitaj kaj na temo "Memory Allocation in C Programs", kajti to kar sem napisal, v določenih primerih ne drži, toda to je stvar tistega, ki piše program. _________________ Lp, Jaka |
|
Nazaj na vrh |
|
 |
pogorevc Član

Pridružen-a: Pet 16 Avg 2013 23:07 Prispevkov: 53 Aktiv.: 0.37
|
Objavljeno: Tor Nov 26, 2013 9:26 pm Naslov sporočila: lp |
|
|
Razmišljal sem tudi v tej smeri, da bi dejansko cel program oz. aktiven del programa dal kot neko zanko(časovno), ki bi v določenem času se zakljucila in bi se vrednosti postavile na nic. Tako bi se dejansko vrednosti senzorja 1 zakljucile in nebi trajale v neskoncnost. V zanki pa bi senzor1 preko intenger funkcije vpisal kot neko vrednost 1 v primeru, da bi bil aktiven senzor1. Tako bi se zanka ponavljala nek določen cikelj. V času tega cikla pa bi preverjala še funkcijo "if" na senzorju2. Po določenem času recimo 20s, pa bi se zanka zakljucila in bi vrednosti postavil na 0. Tako bi se tudi senzor 1 postavil v 0 v primeru, da bi postal aktiven senzor 2 pa ne.
Bi se zadeva lahko odvijala tako? |
|
Nazaj na vrh |
|
 |
pogorevc Član

Pridružen-a: Pet 16 Avg 2013 23:07 Prispevkov: 53 Aktiv.: 0.37
|
Objavljeno: Tor Nov 26, 2013 9:35 pm Naslov sporočila: LP |
|
|
Jaka75:
"Torej, ko je aktiviran senzor1 prižgeš prvo LED, greš v drugo zanko, kjer počakaš določen čas na aktivacijo drugega senzorja in če po določenem času tega ni, pač gori samo prva LED, če se pa senzor v tem času aktivira, ugasneš prvo LED in prižgeš drugo."
To razumem samo, kako pa je potem z tem čakanjem? kako točno izvedem čakanje? Ali imaš v mislih "_delay_". Težavo vidim v tem, da ne vem kako dolgo bom moral čakati, da bo aktiven drugi senzor. Oz kako hitro bo nekdo "tekel skozi senzorja". V tem primeru lahko z delay funkcijo naredim napako v tem, da medtem ko bom čakal, lahko nekdo že prekine senzor2, in ga bom dejansko "zamudil". |
|
Nazaj na vrh |
|
 |
Jaka57 Moderator



Pridružen-a: Ned 12 Dec 2004 21:47 Prispevkov: 5824 Aktiv.: 24.51 Kraj: Grosuplje
|
Objavljeno: Tor Nov 26, 2013 9:50 pm Naslov sporočila: |
|
|
Branje drugega senzorja zahteva točno določen čas ali drugače, vsak programski korak kontrolerja zahteva točno določen čas. Torej...........
Kako dela funkcija delay?
Poleg DO..WHILE in WHILE zank imaš tudi FOR zanko, kanede? _________________ Lp, Jaka |
|
Nazaj na vrh |
|
 |
lojzek Član



Pridružen-a: Pet 25 Jan 2008 8:00 Prispevkov: 3388 Aktiv.: 15.95
|
Objavljeno: Sre Nov 27, 2013 7:48 am Naslov sporočila: |
|
|
Bom še jaz poskusil malce pomagat.....
1. ko gre nekdo mimo prvega senzorja, postaviš neko spremenljivko (recimo da jo imenuješ "a") na vrednost 1. - tej spremenljivki se reče zastavica (flag)
2. potem pa narediš WHILE zanko, v kateri preverjaš, če (je "b" enak 0 ter "cas" manjsi od 2s) in vsebuje:
{
- malo zakasnitev (recimo 100ms).
- po njej povečaš čas za 1 (recimo spremenljivka "cas")
- preveriš, če je prožen 2. senzor. Če je, potem sta bila sprožena oba senzorja v določenem času in imaš izpolnjene pogoje za prehod. Postavi zastavico "b" na 1. S tem boš lahko izstopil iz zanke.
}
3. po zanki pa preveriš stanje zastavic- imaš 2 možnosti.
- "b" == 1 - pomeni, da sta bila prožena oba senzorja. Pobriši zastvice in spremenljivke ter skoči v tisti del programa , kar moraš ob prehodu narediti (tukajle se skriva tvoja AND funkcija)
- "cas" > 2s. Prehoda ni bilo. Pobriši zastvice in spremenljivke in nadaljuj od začetka programa
Upam, da bo malce razumljivo.
Je pa velikokrat dobro, da si vse te logične funkcije narišeš na papir (diagram poteka) in malce pretuhtaš, preden pišeš program.
EDIT: spremenljivka "cas" v mojem primeru šteje 0,1s dolge intervale. Sem rahlo nerazumljivo napisal.
LP Branko
Nazadnje urejal/a lojzek Sre Nov 27, 2013 10:25 am; skupaj popravljeno 1 krat |
|
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: 10 dni
Powered by phpBB © 2001, 2005 phpBB Group
|