Nagradna Igra - 2012
Moderators: pedja089, stojke369, [eDo], trax, LAF
Re: Nagradna Igra
@InTheStillOfTheNight
Ne. Jer onda si ostavio pinove koji idu na tastere u zraku, pa ti statika moze buditi PIC iz sleep-a.
Ne. Jer onda si ostavio pinove koji idu na tastere u zraku, pa ti statika moze buditi PIC iz sleep-a.
Re: Nagradna Igra
Nano kaze (na PM) da nema vremena/volje da osmislja zadatak, pa "Nocni" ozezi. U starom olimpijskom duhu: Neka masakr... Boze, igra otpocne.
Re: Nagradna Igra - 2012
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
Takodje sam procistio ovu temu i izbrisao zadnje postove koje nemaju veze sa nagradnom igrom.
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
Takodje sam procistio ovu temu i izbrisao zadnje postove koje nemaju veze sa nagradnom igrom.
- InTheStillOfTheNight
- Odlično uznapredovao
- Posts: 938
- Joined: 01-06-2006, 17:54
- Location: Zagreb
Re: Nagradna Igra - 2012
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
Program je pisan u C-u AVR Studio4 za ATMEGA88 MCU.
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
Program je pisan u C-u AVR Studio4 za ATMEGA88 MCU.
- Attachments
-
- Tartufi_1.rar
- (10.59 KiB) Downloaded 346 times
InTheStillOfTheNight
Re: Nagradna Igra - 2012
@InTheStillOfTheNight
zar taj bug nisi sam rjesio u tutorialu tartufi
zar taj bug nisi sam rjesio u tutorialu tartufi
- InTheStillOfTheNight
- Odlično uznapredovao
- Posts: 938
- Joined: 01-06-2006, 17:54
- Location: Zagreb
Re: Nagradna Igra - 2012
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
Re: Nagradna Igra - 2012
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.
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.
Re: Nagradna Igra - 2012
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
disable_isr(); // onemoguci prekid, globalno ili samo timer0
PORTC = PORTC ^ 0x20;
enable_isr(); // omoguci prekid, globalno ili samo timer0
Re: Nagradna Igra - 2012
Imam ja spremljenu cijeli knjigu Tartufa u word-u od 59 stranica fonta 12; ako kome treba....
Re: Nagradna Igra - 2012
@bob4
mozes mi poslat tu knjigu u wordu, zanima me malo i AVR
mozes mi poslat tu knjigu u wordu, zanima me malo i AVR
- InTheStillOfTheNight
- Odlično uznapredovao
- Posts: 938
- Joined: 01-06-2006, 17:54
- Location: Zagreb
Re: Nagradna Igra - 2012
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ć:
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:
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.
E sad da ne objašnjavam BUG evo Kizin PM koji mi je poslao sinoć:
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: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>
Code: Select all
PORTC |= (1<<PC5);
PORTC &=~(1<<PC5);
Code: Select all
sbi 0x08, 5 ; Set PC5
cbi 0x08, 5 ; Clear PC5
@Hex pošalji mi u PM adresu da ti posaljem nagradu.
InTheStillOfTheNight
Re: Nagradna Igra - 2012
Gdje je zapelo
Noćni jesi poslao djelove Hex-u? Ako jesi ajmo Hex, čeka se pitanje ...
Ako nisi pucaj sljedeće pitanje
Noćni jesi poslao djelove Hex-u? Ako jesi ajmo Hex, čeka se pitanje ...
Ako nisi pucaj sljedeće pitanje
Re: Nagradna Igra - 2012
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)
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)
Re: Nagradna Igra - 2012
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
vrijednost =vrijednost shift lijevo ; vrijednost je vrijednost * 2
vrijednost = vrijednost + y ; zbrojimo i gotovo
Valjda će ovo neko razumjet
Cezare, star sam i nemoćan, ali poslušaj moj savjet ....
Re: Nagradna Igra - 2012
@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.
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.
Re: Nagradna Igra - 2012
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.
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.
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.
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 ....
Re: Nagradna Igra - 2012
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!
Cezare, star sam i nemoćan, ali poslušaj moj savjet ....
Re: Nagradna Igra - 2012
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
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 (5.68 KiB) Viewed 9772 times
Alexa
Re: Nagradna Igra - 2012
Odlično si krenuo , ali si ga previše pojednostavnio .
Cezare, star sam i nemoćan, ali poslušaj moj savjet ....