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 

AND vrata na atmegi32
Pojdi na stran 1, 2  Naslednja
 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Elektronika za začetnike
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
pogorevc
Član
Član



Pridružen-a: Pet 16 Avg 2013 23:07
Prispevkov: 53
Aktiv.: 0.37

PrispevekObjavljeno: Ned Nov 24, 2013 12:43 pm    Naslov sporočila:  AND vrata na atmegi32 Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
lbozo
Član
Član



Pridružen-a: Pet 18 Jan 2008 23:51
Prispevkov: 71
Aktiv.: 0.33
Kraj: Vodice

PrispevekObjavljeno: Ned Nov 24, 2013 1:10 pm    Naslov sporočila:   Odgovori s citatom

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
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: Ned Nov 24, 2013 1:36 pm    Naslov sporočila:   Odgovori s citatom

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
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
pogorevc
Član
Član



Pridružen-a: Pet 16 Avg 2013 23:07
Prispevkov: 53
Aktiv.: 0.37

PrispevekObjavljeno: Pon Nov 25, 2013 7:36 pm    Naslov sporočila:  LP Odgovori s citatom

Č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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
lojzek
Član
Član



Pridružen-a: Pet 25 Jan 2008 8:00
Prispevkov: 3388
Aktiv.: 15.95

PrispevekObjavljeno: Tor Nov 26, 2013 9:57 am    Naslov sporočila:   Odgovori s citatom

Think

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
pogorevc
Član
Član



Pridružen-a: Pet 16 Avg 2013 23:07
Prispevkov: 53
Aktiv.: 0.37

PrispevekObjavljeno: Tor Nov 26, 2013 5:33 pm    Naslov sporočila:  LP Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
.
Neznanec
Neznanec



Pridružen-a: Pet 01 Okt 2004 1:17
Prispevkov: 1
Aktiv.: 0.00

PrispevekObjavljeno: Tor Nov 26, 2013 5:52 pm    Naslov sporočila:   Odgovori s citatom

Brisana vsebina odstranjenega uporabnika.
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: Tor Nov 26, 2013 6:49 pm    Naslov sporočila:  Re: LP Odgovori s citatom

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
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
pogorevc
Član
Član



Pridružen-a: Pet 16 Avg 2013 23:07
Prispevkov: 53
Aktiv.: 0.37

PrispevekObjavljeno: Tor Nov 26, 2013 7:58 pm    Naslov sporočila:  LP Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
HeBird
Član
Član



Pridružen-a: Ned 16 Avg 2009 16:36
Prispevkov: 79
Aktiv.: 0.41
Kraj: Domžale

PrispevekObjavljeno: Tor Nov 26, 2013 8:38 pm    Naslov sporočila:   Odgovori s citatom

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
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: Tor Nov 26, 2013 9:20 pm    Naslov sporočila:   Odgovori s citatom

@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
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
pogorevc
Član
Član



Pridružen-a: Pet 16 Avg 2013 23:07
Prispevkov: 53
Aktiv.: 0.37

PrispevekObjavljeno: Tor Nov 26, 2013 9:26 pm    Naslov sporočila:  lp Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
pogorevc
Član
Član



Pridružen-a: Pet 16 Avg 2013 23:07
Prispevkov: 53
Aktiv.: 0.37

PrispevekObjavljeno: Tor Nov 26, 2013 9:35 pm    Naslov sporočila:  LP Odgovori s citatom

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
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: Tor Nov 26, 2013 9:50 pm    Naslov sporočila:   Odgovori s citatom

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
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
lojzek
Član
Član



Pridružen-a: Pet 25 Jan 2008 8:00
Prispevkov: 3388
Aktiv.: 15.95

PrispevekObjavljeno: Sre Nov 27, 2013 7:48 am    Naslov sporočila:   Odgovori s citatom

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
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 za začetnike Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Pojdi na stran 1, 2  Naslednja
Stran 1 od 2

 
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