Nagradna Igra - 2012

Riješavanje raznoraznih problema čisto iz zabave. Nagrada nije novčana nego u vidu elektronskih komponenti.

Moderators: pedja089, stojke369, [eDo], trax, LAF

Da li ste zainteresirani za nagradnu igru?

1. DA
35
85%
2. NE
6
15%
 
Total votes: 41

_heX
Napredujem
Napredujem
Posts: 136
Joined: 29-10-2009, 20:09
Location: Republika Zagorje

Re: Nagradna Igra

Post by _heX »

@InTheStillOfTheNight
Ne. Jer onda si ostavio pinove koji idu na tastere u zraku, pa ti statika moze buditi PIC iz sleep-a.
_heX
Napredujem
Napredujem
Posts: 136
Joined: 29-10-2009, 20:09
Location: Republika Zagorje

Re: Nagradna Igra

Post by _heX »

Nano kaze (na PM) da nema vremena/volje da osmislja zadatak, pa "Nocni" ozezi. U starom olimpijskom duhu: Neka masakr... Boze, igra otpocne.
User avatar
trax
Administrator sajta
Administrator sajta
Posts: 3509
Joined: 08-01-2005, 18:04
Location: 75k, BA
Contact:

Re: Nagradna Igra - 2012

Post by trax »

Uvazio sam Fekin prijedlog i otvorio 2 pod-foruma ovdje:
http://www.elektronika.ba/forum/viewforum.php?f=4

Eto, nastavite ovdje sa ovom nagradnom igrom, a one igre za koje se nudi novcana nagrada neka idu tamo u pod-forum za "novcane" igre :D

Takodje sam procistio ovu temu i izbrisao zadnje postove koje nemaju veze sa nagradnom igrom.
User avatar
InTheStillOfTheNight
Odlično uznapredovao
Odlično uznapredovao
Posts: 938
Joined: 01-06-2006, 17:54
Location: Zagreb

Re: Nagradna Igra - 2012

Post by InTheStillOfTheNight »

Eh @hex nece biti jednostavno, pogotovo jer nije PIC... :)
Ono što treba napraviti je: Pronaći, ispraviti i objasniti BUG u programu tartufa.

Program je koncipiran jednostavno:
TIMER0 broji do OCROA registra, i diže prekidnu rutinu svakih 1mS.
U samoj prekidnoj rutini odrađeno je blinkanje LED-om koja se nalazi na PC0 portu... LED se treba paliti i gasiti svake 1 sekunde.

U glavnom loopu program mijenja stanje PC5 izlaza maksimalnom brzinom, i taj port koristi se da se može snimiti osciloskopom koliko je MCU "brz".

Ovaj program ne blinka LED-om svake sekunde i ne radi kako treba, pa sve što treba napraviti je pronaći razlog zašto program ne radi, popraviti BUG i objasniti zašto prvobitni program ne radi kako treba...

Nagrada:
ISP programator za AVR mikrokontrolere

@trax, @pedja, @buco i @kizo zbog vašeg iskustva u startu vas moram diskvalificirati :D

Program je pisan u C-u AVR Studio4 za ATMEGA88 MCU.
Attachments
Tartufi_1.rar
(10.59 KiB) Downloaded 345 times
InTheStillOfTheNight
Cipi-Cips
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 355
Joined: 28-09-2006, 20:11
Location: Split- Croatia

Re: Nagradna Igra - 2012

Post by Cipi-Cips »

@InTheStillOfTheNight

zar taj bug nisi sam rjesio u tutorialu tartufi :)
User avatar
InTheStillOfTheNight
Odlično uznapredovao
Odlično uznapredovao
Posts: 938
Joined: 01-06-2006, 17:54
Location: Zagreb

Re: Nagradna Igra - 2012

Post by InTheStillOfTheNight »

Bio sam napisao dio, no problem nisam rjesio, a sada sam izbrisao zadnji post tako da nema ni taj dio koji je bio... Jbg tko je uhvatio i procitao ima dobar smijer...
InTheStillOfTheNight
_heX
Napredujem
Napredujem
Posts: 136
Joined: 29-10-2009, 20:09
Location: Republika Zagorje

Re: Nagradna Igra - 2012

Post by _heX »

Osjecan se nekako... prozvan

Ne poznajem AVR, ali mozda sam uocio problem. Mozda, jer stvarno neznam jel AVR to tak "hendla"

PORTC = PORTC ^ 0x20;

1) Ucitaj PORTC u radni registar
2) Izvrsi XOR radnog registra i 0x20
3) Spremi natrag u PORTC

Kod prekida program skace u isr funkciju, ali prije samog ulaska sprema radne i ostale "CPU" registre na stog.

Ako se prekid dogodi nakon 1 ili 2 faze gore, po izlasku iz isr() kontroler ce napraviti "restore" radnih registara, a time i stare vrijednosti PORTC-a i prebrist ce promjene nastale u isr (reda us prije)

U biti dioda ce zasvjetliti/ugasiti na tren, ali zbog tromosti oka to se nece primjetiti.
_heX
Napredujem
Napredujem
Posts: 136
Joined: 29-10-2009, 20:09
Location: Republika Zagorje

Re: Nagradna Igra - 2012

Post by _heX »

evo prvo rjesenje koje mi pada na pamet je da u main stavim:

disable_isr(); // onemoguci prekid, globalno ili samo timer0
PORTC = PORTC ^ 0x20;
enable_isr(); // omoguci prekid, globalno ili samo timer0
User avatar
bob4
Stariji član
Stariji član
Posts: 2572
Joined: 31-01-2010, 16:12
Location: Kutina

Re: Nagradna Igra - 2012

Post by bob4 »

Imam ja spremljenu cijeli knjigu Tartufa u word-u od 59 stranica fonta 12; ako kome treba....
Cipi-Cips
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 355
Joined: 28-09-2006, 20:11
Location: Split- Croatia

Re: Nagradna Igra - 2012

Post by Cipi-Cips »

@bob4

mozes mi poslat tu knjigu u wordu, zanima me malo i AVR
User avatar
InTheStillOfTheNight
Odlično uznapredovao
Odlično uznapredovao
Posts: 938
Joined: 01-06-2006, 17:54
Location: Zagreb

Re: Nagradna Igra - 2012

Post by InTheStillOfTheNight »

Eh @hex, trebao sam i tebe diskvalificirati :)... Predpostavio sam da bi ti to trebao naći vrlo brzo :)

E sad da ne objašnjavam BUG evo Kizin PM koji mi je poslao sinoć:
Samo da vidim kako stojim.

U disasembleru vidim ovo:

CODE: SELECT ALL
while(1){ /* main loop */
PORTC ^= (1<<PC5); /* Toggle my debug line */
be: 90 e2 ldi r25, 0x20 ; 32
c0: 88 b1 in r24, 0x08 ; 8
c2: 89 27 eor r24, r25
c4: 88 b9 out 0x08, r24 ; 8
c6: fc cf rjmp .-8 ; 0xc0 <main+0x22>

Bug će se javit ako interrupt okine točno u trenutku kad se izvrši EOR, a prije nego se vrijednost zapiše u PortC (out 0x08, r24).
E šta se događa.. Interupt rutina sve fino okrene PC0, al samo na koju mikrosekundu, jer čim se vratimo iz nje, stara vrijednost portaC se već nalazi u r24 i OUT mijenja PortC, ali nije uzeto u obzir novo stanje PortC iz interrupt rutine.
Ustvari kad sad bolje pogledam, osuđeni smo na propast već prije EOR, kod IN r24, 0x08 jer će ovaj fino pospremiti stanje porta i kad se vratimo iz ISR-a opet baratamo sa starim sranjem, ne novim.

E to je već ozbiljna stvar jer pošto vrtimo 5 ASM naredbi imat ćemo bug u 40% slučajeva.

Zato treba takve pizdarije micat iz ISR-a, ostaviti samo najosnovnije, jedino ako je bitno da se u baš tom i tom trenutku npr. uključi tiristor nakon zero-crossing, no opet za takve stvari postoji hardware (compare/match registri), al to je već malo dublja priča.

Eh da, rješenje.
Npr.

ATOMIC_BLOCK(ATOMIC_FORCEON) PORTC ^= (1<<PC5);

Jako fino ubaci CLI prije IN i SEI poslije OUT.
Da, treba i
#include <util/atomic.h>
Za ovaj problem najtočnije i najbrže rješenje je ne koristiti XOR, a kada smo u while(1) petlji i samo to radimo onda vrlo lako možemo napraviti i ovo:

Code: Select all

PORTC |=  (1<<PC5);
PORTC &=~(1<<PC5);
U assembleru imate znatan broj ušteđenih instrukcija pošto bi takav program trebao izgledati ovako, a BUG se u ovom programu ne može dogoditi jer optimizator za ove 2 instrukcije nikada ne vuče PORTC u radni registar nego mu direktno pristupa sa CBI i SBI instrukcijama:

Code: Select all

sbi 0x08, 5 ; Set PC5
cbi 0x08, 5 ; Clear PC5
Isto tako treba napomenuti da se BUG događa samo ako istom portu pristupamo iz prekidne rutine i iz glavnog programa... Specifičan je po tome što u puno programa učestalost pojavljivanja BUG-a smanjuje i dosta ga je teško tražiti.

@Hex pošalji mi u PM adresu da ti posaljem nagradu.
InTheStillOfTheNight
User avatar
elektor
Pravi forumaš
Pravi forumaš
Posts: 1588
Joined: 14-10-2008, 20:40
Location: Hrvatska, Rijeka

Re: Nagradna Igra - 2012

Post by elektor »

Gdje je zapelo :roll:
Noćni jesi poslao djelove Hex-u? Ako jesi ajmo Hex, čeka se pitanje :wink: ...
Ako nisi pucaj sljedeće pitanje :lol:
_heX
Napredujem
Napredujem
Posts: 136
Joined: 29-10-2009, 20:09
Location: Republika Zagorje

Re: Nagradna Igra - 2012

Post by _heX »

Rezultat nekog mjerenja je u rasponu 0-100, kontroler treba pretvoriti taj rezultat u raspon 0-250.
Kontroler nema hardver za mnozenja. Na pameti mi je midrange pic, ali moze bilo koji kontroler, princip je isti. Mala greska je dozvoljena, dati najbrze rjesenje.

Kako se prijasnji dobitnik nije javio za nagradu dajem dalje 2 x MAX232, PIC16F877 (DIP40), PIC18LF4680
(DIP40)
User avatar
Kukinjos
Pravi forumaš
Pravi forumaš
Posts: 1724
Joined: 28-03-2012, 18:01
Location: Split

Re: Nagradna Igra - 2012

Post by Kukinjos »

Y= vrijednost shift desno ; Y je vrijednost/2
vrijednost =vrijednost shift lijevo ; vrijednost je vrijednost * 2
vrijednost = vrijednost + y ; zbrojimo i gotovo

Valjda će ovo neko razumjet :wink:
Cezare, star sam i nemoćan, ali poslušaj moj savjet ....
_heX
Napredujem
Napredujem
Posts: 136
Joined: 29-10-2009, 20:09
Location: Republika Zagorje

Re: Nagradna Igra - 2012

Post by _heX »

@Kukinjos
Yep, to je to. Evo kak to odprilike izgleda za midrange pic:

; registar _BROJ sadrzi rezultat mjerenja
rlf _BROJ,W ; rotiraj lijevo i spremi u radni. U radnom se sada nalazi BROJ*2
rrf _BROJ,F ; rotiraj desno i spremi natrag u BROJ. U registru BROJ se sada nalazi BROJ/2
addwf _BROJ,F ; BROJ = BROJ * 2.5

Posalji svoju adresu na PM i pucaj sljedece pitanjce.
User avatar
Kukinjos
Pravi forumaš
Pravi forumaš
Posts: 1724
Joined: 28-03-2012, 18:01
Location: Split

Re: Nagradna Igra - 2012

Post by Kukinjos »

Evo novi zadatak:
zamislite kocku kojoj su bridovi otpornici od jednog oma. Treba izračunati otpor ove mreže mjereći između bilo koja dva dijagonalna vrha kocke. Prihvaćam samo najjednostavnija (intuitivna) rješenja, bez puno matematike, teorema i raščlambi do besvjesti.
Image

Od djelova na programu su 2x ATTINY2313-20PU novi iz Farnell-a:
http://www.atmel.com/Images/doc2543.pdf
i dva Finder releja Type 40.525., špula 110 V=, kontakti 2 x preklopni 8A, skinuti s potpuno novog i ispravnog uređaja:
http://gfinder.findernet.com//assets/Series/5/S40EN.pdf
Prva strana kataloga zadnja (desna) kolona.
Cezare, star sam i nemoćan, ali poslušaj moj savjet ....
User avatar
bob4
Stariji član
Stariji član
Posts: 2572
Joined: 31-01-2010, 16:12
Location: Kutina

Re: Nagradna Igra - 2012

Post by bob4 »

User avatar
Kukinjos
Pravi forumaš
Pravi forumaš
Posts: 1724
Joined: 28-03-2012, 18:01
Location: Split

Re: Nagradna Igra - 2012

Post by Kukinjos »

Hmmm... ovi mladi se stvarno ne trude, @bob4 nešto mi rezultat ne štima, imaš li kakvo objašnenje, ovo u multisim-u si dobro razložio. Mala pomoć, stvar je logike, ne trebaju superračunla i programi, može se i napamet, cijela kocka je simetrična! :wink:
Cezare, star sam i nemoćan, ali poslušaj moj savjet ....
User avatar
alexa_pg
Pravo sam se raspisao :)
Pravo sam se raspisao :)
Posts: 1248
Joined: 11-03-2005, 22:21
Location: Podgorica

Re: Nagradna Igra - 2012

Post by alexa_pg »

Svi otpori su vezani simetricno.
Sve sto se veze izmedju tacaka a i b ukljucujuci i kratak spoj ne utice na stuju kroz otpornike.
Ukupan otpor je 1om
Attachments
R.JPG
R.JPG (5.68 KiB) Viewed 9760 times
Alexa
User avatar
Kukinjos
Pravi forumaš
Pravi forumaš
Posts: 1724
Joined: 28-03-2012, 18:01
Location: Split

Re: Nagradna Igra - 2012

Post by Kukinjos »

Odlično si krenuo :idea: , ali si ga previše pojednostavnio :( .
Cezare, star sam i nemoćan, ali poslušaj moj savjet ....
Post Reply