[ marinbnm @ 13.02.2011. 18:16 ] @
Htio bi napraviti brojač, i to da mi radi tako što će brojati impulse koji dolaze sa optocouplera, koji su na vretenu jendog stroja, znači zazor prođe on napiše na LCD 1, pa 2, pa 3....i tako do određenog broja, onda idu sekunde, minute....to mi nije problem, problem mi je kako uzeti stanje sa pina, jer ako gledam kad je pin 1 onda će mi on cjelo vrijeme brojiti, što neću nego da odbroji samo jedan impuls (promjenu) jer ako bi stavio ovako da gleda kad je recimo porta.0 = 1 onda se može desiti da stroj stane na tom mjestu i ovaj broji ko lud, tu sam mislio koristiti interupt ali nemam s tim baš iskustva, još je možda malo delikatnije što su dva optocouplera pa svaki broji u svoju stranu, znači ako krene prvi onda broji u plus, ako drugi onda u minus, nešto kao rotary encoder. Ako netko ima prijedlog kako da sredim nek napiše.
[ Stojan Trifunovic @ 13.02.2011. 20:34 ] @
Sa interaptima Vam je svakako najjednostavnije rešenje. I nisu toliko komplikovani kada ih jednom savladate. Štaviše, nakon što naučite kako da ih upotrebljavate, možete se (kao ja) počinjati pitati kako ste uopšte mogli bez njih!

Postoji naravo i rešenje bez interapta.
Kažete da imate dva optokaplera od kojih jedan broji unapred, a drugi unazad.. Oba bi se mogla testirati ovako:

1. Da li je na prvom oprokapleru 1? Ako jeste, skoči na 6.
2. Resetuj flag prvog optokaplera.
3. Da li je na drugom optokapleru 1? Ako jeste, skoči na 8
4. Resetuj flag drugog optokaplera.
5. Vrati se na 1 (počni iz početka)

6. Da li je flag prvog optokaplera setovan? Ako jeste, vrati se na 3.
7. Uvećaj brojač, ispiši rezultat, setuj flag prvog i vrati se na 3.

8. Da li je flag drugog optokaplera setovan? Ako jeste, vrati se na 5 ili 1.
9. Smanji brojač, ispiši rezultat, setuj flag drugog i vrati se na 5 ili 1.

U inicijalizaciji je potrebno definisati brojač, a ne bi bilo loše ni proveravati da li je došlo do prekoračenja graničih stanja (ukoliko je to uopšte moguće) u koracima 7 i 9. Potrebno je takođe defnisati i dva flaga
(ovde sam ih nazvao flag prvog i flag drugog optokaplera). Oni ovde pamte prethodno stanje i ne dozvoljavaju uvecanje/umanjenje brojača dok se ne promeni stanje na njihovom optokapleru. Oni prilikom inicijalizacije moraju biti na log.0 (resetovani).

Istim principom moguće je proširiti program i za veći broj optokaplera (vratila).

Jedini problem ovakvog rešenja mogao bi biti ispis na LCD displeju, jer on ipak zahteva neko kratko vreme, a za to vreme može se preskočiti po koji impuls sa optokaplera. To se može rešiti smanjenjem brzine vratila
ili učenjem interapta. Izaberite sami.

[Ovu poruku je menjao Stojan Trifunovic dana 13.02.2011. u 21:47 GMT+1]
[ rsinisa @ 13.02.2011. 20:49 ] @
Znači tebi treba brojač napred-nazad. Besmisleno je koristiti interapt za tako nešto ako je to jedini njegov zadatak. Vidim da bi to da odradiš sa LCD displejom, a razmisli da li ti odgovara varijanta sa LED displejima. Ako da, pogledaj moj PIC panel, imaš rešen problem prikaza na 4 LED displeja u multipleksu preko interapta na prekoračenje TMR0, a rešenja za brojanje gore-dole sa kvadraturnim enkoderom imaš jako mnogo na internetu. Evo jednog od sajtova:
http://www.sxlist.com/techref/microchip/qenc.htm
Interapt nije potreban u ovom slučaju jer pratiš da li je bilo promene na izlazima optokaplera - ako nije, ne radiš ništa, ako jeste, nekom od ovih rutina odrediš smer i uvećaš ili umanjiš brojač. A i inače je, kako već rekoh, besmisleno koristiti interapt za ovako jednostvan zadatak. Pa ako PIC radi na 4 MHz, nije to uopšte malo!

Pozdrav.
Sinisha
[ marinbnm @ 13.02.2011. 22:09 ] @
Evo i jendo zanimljivo riješenje na temu,. inače sam to pokupio sa interneta ali nemam pojima gdje, no tamo se koristiza rotacioni enkoder, što je ustvari ista stvar kao i što meni treba:

Code:
loop1:
if portb.1=0 then                 'uzlaz 1 optocouplera (npr desno "+") 
    counter=counter+1
    goto lcd
endif

if portb.0=0 then                 'ulaz 2 optocouplera (npr lijevo "-")
    counter=counter-1
    goto lcd
endif

goto loop1

lcd:
lcdout $fe,$c0,dec5 counter
while (portb.0=0 or portb.1=0):pause 10:wend
goto loop1
[ Sepa011 @ 14.02.2011. 10:07 ] @
Malo ti je losa ta rutina za enkoder. Pogledaj ovde kako bi to priblizno trebalo da izgleda (iz Proton+ i PBP nije tesko preraditi.
[ marinbnm @ 14.02.2011. 10:15 ] @
Zašto misliš da je loša?
[ Sepa011 @ 14.02.2011. 10:25 ] @
Posto je enkoder "kvadraturni", sa tvojom rutinom bas neces najbolje uhvatiti napred/natrag.
[ Stojan Trifunovic @ 14.02.2011. 13:59 ] @
Ček, ček. Onda je i moj odgovor neispravan.

Da li ta dva optokaplera rade kao standardan rotirajući enkoder, ili jedan
treba brojiti samo unapred, a drugi samo unazad po svakom dovođenju impulsa?
[ marinbnm @ 14.02.2011. 15:40 ] @
Upravo tako, ja sam sinoć se zagledao za kod i palo mi isto napamet i jutros kad sam vidio post, jer neki enkoderi kad idu u jednu stranu daju impuls samo u jednu, i tako za drugu stranu, ili je optički i daje impuls za impulsom kao što Sepa kaže, idem prekosutra pogledati to što je namontirano na vreteno pa javim ako ne riješim sam.
[ bogdan.kecman @ 14.02.2011. 17:43 ] @
enkoderi na cnc masinama su u 99.9% slucajeva kvadratni, pitanje je samo da li imaju samo 2 izlaza ili vise njih (tako mozes da biras rezoluciju)

sto se tice brojanja impulsa, ako su impulsi iole impulsi a ne promene stanja, dakle nesto sto dolazi sa enkodera, nemoj da se zezas da radis tako sto u petlji citas status vec obavezno idi na to da ti promene pozivaju interapt... to je recimo jedan od razloga sto ja za takve projekte volem avr posto nije limitiran na b0 kao piconja .. iako za vecinu drugih stvari teram piconje/msp430 ili u zadnje vreme, sve vise arm... dakle ako ti je bitno da izbrojis svaki impuls - impulse vodi na interrupt pin i broj ih iz interrupta, nikako nemoj da ides na varijantu citanja porta u while petlji, jeste 20mhz "brzo" ali bez blama mozes da preskoci par signala tu i tamo posebno ako je neki malo bolji enkoder (vece rezolucije)
[ marinbnm @ 14.02.2011. 18:08 ] @
Ne radi se u impulsima, nego promjenama stanja, iz 0 u 1 i obratno, znači dva optopcouplera i lim koji zaklanja svjetlo, kužite već......

A što se tiče petlje, misliš da bi bio i problem ako su promjene kao tu ili? 16F84 ima jedan INT na RB0 kako kažeš, dalo bi se riješiti sa nekim flip/flop na ulazu ali to je malo overkill ako mikrokontroler može odraditi :D
[ bogdan.kecman @ 14.02.2011. 18:21 ] @
dva optokaplera sa 2 lima pod 90 stepeni ce da generisu kvadratni izlaz.

pitanje je samo koliko se brzo promene desavaju .. ako imas 1rpm to jest 4 promene u minuti, mozes sa while, ali ako imas preko 4000 promena u minuti onda ces sa while vec da imas problem sa picom na 20mhz

84 ima ako se ja dobro secam interapt na promenu na portu B .. dakle bilo koja promena na bilo kom pinu porta B moze da cimne interapt .. B0 je samo "direktan" interapt i malo je brzi od ostalih ..
[ Darko_zed @ 14.02.2011. 20:15 ] @
Bogdane dobro se secas bas je tako kao sto si rekao .
[ Stojan Trifunovic @ 14.02.2011. 21:23 ] @
Na 84 pored RB0 interapta na doloazak log 1 (ili 0, zavisi kako se podesi),
bilo koja promena (i sa 0 na 1 i sa 1 na 0) na RB4-BR7 pinovima izaziva
interapt. Mogu se koristiti dva od tih četiri pinova, dok ostala dva moraju
ostati neiskorišćena, ili se i oni mogu upotrebiti za drugi rotacioni enkoder
(na drugom vratilu).

I da, naravno, ako je u pitanju fabrički enkoder, on može imati i do 200
impulsa po obrtaju. Interapti su u tom slučaju OBAVEZNI. Ispis na LCD, ma
koliko malo vremena trošio, ipak zahteva i konverziju dobijenog brojača u
trocifreni ili četvorocifreni alfanumerički oblik pogodan za ispis na LCD, i
sve to treba pomnožiti sa 200. Mnogo je, čak i za 20MHz.

Ukoliko je reč o pravljenom enkoderu, sa npr. 1-2 impulsa u sekundi, možda bi
mogli proći i bez interapta koristeći C. U asembleru bi verovatno mogli
postići bar 20 impulsa u sekundi koristeći trikove poput upisivanja samo
izmenjenih karaktera na LCD. Ipak, mislim da se zaključak sam nameće. Naučite
interapte.
[ marinbnm @ 14.02.2011. 21:30 ] @
Fora je što moram još koristiti LCD, pa ako kažeš da ostali pinovi porta a moraju biti slobdni ne znam dali mi sve stane, no nije problem ni uzeti 16F877 (jer ga imam trenutno).
Inače radi se o mjerenju cca 5-10 impulsa u sekundi max, ali 16F877 je već brži, a usput i idem pogledati interuptove......
[ bogdan.kecman @ 14.02.2011. 22:02 ] @
nauci interapte, brojanje impulsa je idealan primer gde su interapti pravo resenje

dakle treba ti 2 pina sa porta b i to je to (B1 i B2 ili B0 i B1) .. lcd vezi de god oces imas dovoljno slobodnih pinova
[ lm741 @ 15.02.2011. 01:30 ] @
uf,..kad se setim interapta dok nisam savladao,..

Bogdane hvala ti,...vredelo je,..

Pozdrav,..
[ marinbnm @ 15.02.2011. 04:35 ] @
Pa jeli može tko podjeliti kakav tutorial ili što......jel' baš tako teeško? :D
[ bogdan.kecman @ 15.02.2011. 04:55 ] @
pogledaj http://www.elitesecurity.org/t...ter-Putni-racunar-za-automobil tu imas primer kako se interapt poziva i za B0 i za B1

pogledaj lekciju 15 ovde: http://www.amqrp.org/elmer160/lessons/ imas kako se cita rotary encoder

ovde: http://www.arduino.cc/playground/Main/RotaryEncoders imas extra objasnjenje, doduse primer je za atmel a ne za pic, ali imas odlicno objasnjenje kako se cita enkoder

dakle

Code:

//prvo ide nekakav config (fuse bitovi, zavisi koji kompajler)

//onda implemetiras RB interrupt
#int_RB
void  RB_isr(void) 
{
  // obrati paznju da se ovaj interrupt desava na SVAKU PROMENU,
  // dakle i sa LOW-HIGH i sa HIGH-LOW

  // ovde sada obradjujes B1 i B2 da vidis sta se promenilo i na koju stranu
}

void main(){
// setuj klok i sta jos oces
// i finalno upali RB interupt

   //postavi IOCB1 i IOCB2 ako hoces da ti RB1 i RB2 okidaju RB interupt, proveri adresu IOCB porta na 84rki, 0x96 je za 887
   *0x96 = 0x06; 
   enable_interrupts(INT_RB);  
   enable_interrupts(GLOBAL);
   while(1){
     // ovde radi sta ti volja, ispisuj stvari na display etc .. 
   }
}


[ bogdan.kecman @ 15.02.2011. 05:05 ] @
btw, najjednostavnije ti je da jedan pin enkodera vezes na interrupt a drugi da citas samo kada se desi promena na prvom, i u odnosu na drugi znas pravac... na primer deo koda kojim ja citam kvadratni enkoder (kojim menjam temperaturu), jedan pin enkodera je na B0 i trigeruje EXT interupt sa B0 dok je drugi pin na B5 koji ne trigeruje nikakav interapt. Na ovaj nacin imam duplo manju rezoluciju enkodera al "bas me briga" - kod je kraci i koristim samo jedan interrupt:

Code:

//...
volatile int16 target;

#int_ext
void detect_rb0_change() { //here we catch only RB0
  if (input(PIN_B0) == input(PIN_B5) ) {  //forward
      if(target < 27000) target += 50;
  } else { //backwards
      if(target > 1500) target -= 50;
  }
}

void main(){
  //...
  enable_interrupts(INT_EXT);//RB0
  enable_interrupts(GLOBAL);
  //...
}


[ marinbnm @ 28.02.2011. 14:04 ] @
Malo sam pregledao interupt i slično, ok je.....samo nažalost to mi neće ni trebati jer se stvar u jednom pogledaju pojednostavila, iz postojeće CMOS elektronike imam dva signala, jedan "lupa" impulse kad treba brojati u pozitivno, a drugi kad treba brojati u nazad.

E sad, cjela fora je u tome da svakih 12 impulsa brojač treba pokazivati sekundu, znači 12 impulsa mi je jedna sekunda, pa onda idu minute, i sati, i naravno ista stvar je za unatrag....

Samo brojanje mi nije problem (ajmo reć :D) ali nemam pojima kako bi riješio ovo sa vremenom, pa ako netko ima kakvu ideju nek podjeli, inače radim u picbasicu pa bi bilo super, ali ako i ne probam nekako skužiti, za nagradu pičimo na čevape i pivu, a što drugo dok ne naučim :D

tnx!
[ Darko_zed @ 28.02.2011. 15:27 ] @
definises promenjive impuls, sekunde,minute ,sate ili kako vec ti hoces da ih nazoves ali da to znace

Code:
loop1:
if portb.1=0 then                 
    impuls=impuls+1 
endif                              'impuls = 0 na pocetku programa
  IF impuls = 12 then
  sekunda= sekunda+1 AND impuls =0
endif
   IF sekunda = 60 then 
     minut = minut +1 AND sekunda = 0
    endif 
   IF minut = 60 then
   sat = sat + 1 AND minut = 0
   endif
    
if portb.2=0 then                 
    impuls=impuls-1
endif
  IF impuls = 0 then
  sekunda = sekunda-1 AND impuls = 12
endif                               
   IF sekunda = 0 then 
     minut = minut -1 AND sekunda = 60
    endif 
   IF minut = 0 then
   sat = sat - 1 AND minut = 60
   endif
 


ja bih to uradio ovako ako sam dobro razumeo pitanje pogotovu za sate i minute .Ovo je primer(pisan na brzaka ,greske su moguce proveri) nije gotov program pa ti uklopi, prepravi kako tebi treba ,prema tvom programu.Pozdrav i nadam se da sam pomogao


[Ovu poruku je menjao Darko_zed dana 28.02.2011. u 16:48 GMT+1]
[ marinbnm @ 28.02.2011. 21:04 ] @
Hvala na pomoči, skužio sma poantu i najpriej probao nešto jednostavno, znači da samo pomazuje sekunde, problem je što stvar broji unaprijed ili nazad ovisno o impulsima, ali mi neče ispiše sekunde, dolje sam stavio kod po kojemu sam radio i nije mi jasno zašto neće?

Code:

INPUT PORTA.0
INPUT PORTA.1

counter var byte
sekunda var byte


loop1:
if porta.1=0 then                 'here is switch 1 of the rotary encoder
    counter=counter+1
    goto lcd
    endif

if porta.0=0 then                 'here is switch 2 of the rotary encoder
    counter=counter-1
    goto lcd
endif

goto loop1

lcd:
if counter = 12 then
  sekunda = sekunda+1 AND counter =0
  endif
lcdout $fe,$c0,dec5 counter,"TCR:", dec2 sekunda
while (porta.0=0 or porta.1=0):pause 10:wend
goto loop1
[ marinbnm @ 28.02.2011. 23:23 ] @
sredio sam, fora je u tome da mora biti npr: IF impuls == 0 then, a ne =....no ok, stvar radi ali ima i problem :D

Brojanje u naprijed ide super, ali u nazad loše, npr odbroji do minute i deset sec, onda ih neće vrača u nazad, evo i moj kod u kojem sam neke stvari rješio, ali još me druge zezaju....

Code:
counter = 0
sekunda = 0
minuta = 0
sat = 0
lcdout $FE, 2, "FRAME:",dec2 (counter*2)
lcdout $fe,$c0,"TCR:",DEC2 sat,":", dec2 minuta,":",dec2 sekunda

loop1:
if porta.1=0 then                 
    counter=counter+1
      if counter == 12 then
  sekunda = sekunda  +1
  counter = 0
  endif
  if sekunda == 60 then
  minuta = minuta +1
  sekunda = 0
  endif
  IF minuta == 60 then 
  sat = sat +1
  minuta =0
  if sat = 60 then
  sat =0
  endif
  endif
  
    goto lcd
    endif

if porta.0=0 then   
if counter == 0 then
counter = 12
if sekunda == 0 then 
sekunda = 60

if minuta ==0 then
minuta = 60
minuta = minuta -1
if sat == 0 then
sat = 60
sat = sat-1
endif
endif  
endif
sekunda = sekunda -1
endif 


   counter=counter-1
     goto lcd
endif

goto loop1

lcd:
lcdout $FE, 2, "FRAME:",dec2 (counter*2)
lcdout $fe,$c0,"TCR:",DEC2 sat,":", dec2 minuta,":",dec2 sekunda
while (porta.0=0 or porta.1=0):pause 10:wend
goto loop1
[ Darko_zed @ 28.02.2011. 23:52 ] @
Zasto ne zavrsavas uslov IF THEN odmah sa ENDIF ispod njega vec ovako kao sto radis,mnogo je nepregledno i izmuvano.Drugi deo programa ti nije u redu za brojanje unazad ,nema nikakav redosled desavanja vec si napisao bukvalno jedno preko drugo .Imas formu koja sigurno radi samo je prati i bice ok ,ovako nece nikada proraditi kao sto si napisao.pozdrav
[ Darko_zed @ 28.02.2011. 23:54 ] @
Code:
if porta.0=0 then   
if counter == 0 then
counter = 12
if sekunda == 0 then 
sekunda = 60

if minuta ==0 then
minuta = 60
minuta = minuta -1
if sat == 0 then
sat = 60
sat = sat-1
endif
endif  
endif
sekunda = sekunda -1
endif 


   counter=counter-1
     goto lcd
endif

goto loop1

objasni mi kako si zamislio da ovo radi ?
[ marinbnm @ 01.03.2011. 08:31 ] @
Imaš pravo da je zbrkano.....ipak noć čini svoje!

E, što se tiče ovog koada koji si dao, mislim da ima jedan problem, koji sam ja djelomično rješio u svom djelu, ali samo sjelomično, znači:

Code:

if portb.2=0 then                 
    impuls=impuls-1
endif
  IF impuls = 0 then
  sekunda = sekunda-1 AND impuls = 12
endif                               
   IF sekunda = 0 then 
     minut = minut -1 AND sekunda = 60
    endif 
   IF minut = 0 then
   sat = sat - 1 AND minut = 60
   endif


Uzmimo slučaj da je stvar na 0 i da krene unazad, u tom slučaju impuls če početi brojati od nula prema 255, 254....(ako smo definirali byte npr) ista stvar je i za sekunde, npr....krenemo malo naprijed i imamo impuls na 5, a sekunde i ostalo na 0, kad impuls krene unazad i ispuni se zahtjev u kodu da impuls == 0, sekunda 0 - 1 će nam dati 255 (ako je skeunday byte).......zato sam ja htio ograničiti pri prolazu kroz nula da sekundu vrati na 59, minute na 59.....pa ako krene kroz nulu da broji od 59:59:59......

I da uzmemo slučaj da je vrijeme recimo 1min i 20sec, ako impuls ostane na nuli, i krenemo unazad opet imamo problem da neće brojiti do 12 nego 255....
[ Sepa011 @ 01.03.2011. 09:13 ] @
@marinbnm:
Evo ti, za pocetak, jedna greska u tvom programu koji pises, ostale ces lako naci i ispraviti:

NEISPRAVNO:
Code:

IF sekunda = 0 then 
  minut = minut -1 AND sekunda = 60
endif


ISPRAVNO:
Code:

if sekunda = 0 then
  minut = minut - 1
  sekunda = 60
endif


Kao sto se da primetiti, imas ozbiljan problem sa sintaksom
[ rsinisa @ 01.03.2011. 09:43 ] @
Probaj ovo:

Code:

brojac  var byte
sekunde var byte
minuti  var byte
sati    var byte

gore    var porta.0
dole    var porta.1

stanje_g var bit
stanje_d var bit

goto inic

ispis_lcd:
    lcdout $fe, 1, "BR=", dec2 brojac, "-", dec2 sati, ":", dec2 minuti, ":", dec2 sekunde
    return

inic:
    OPTION_REG = %00000011
    intcon=0
    trisa=255  ; TRISA, TRISB podesi prema tvojim potrebama
    brojac=0
    sekunde=0
    minuti=0
    sati=0
    stanje_g=1
    stanje_d=1
    
    pause 500
    gosub ispis_lcd

main:
    if gore=0 then
      if stanje_g=1 then
        stanje_g=0
        brojac=brojac + 1
        if brojac=12 then
          brojac=0
          sekunde=sekunde + 1
          if sekunde=60 then
            sekunde=0
            minuti=minuti + 1
            if minuti=60 then
              minuti=0
              sati=sati  + 1
              if sati = 24 then
                sati=0
              endif
            endif
          endif
        endif
        gosub ispis_lcd
      endif
    else
      stanje_g=1
    endif    
    
    if dole=0 then
      if stanje_d=1 then
        stanje_d=0
        brojac=brojac - 1
        if brojac=255 then
          brojac=11
          sekunde=sekunde - 1
          if sekunde=255 then
            sekunde=59
            minuti=minuti - 1
            if minuti=255 then
              minuti=59
              sati=sati - 1
              if sati = 255 then
                sati=23
              endif
            endif
          endif
        endif
        gosub ispis_lcd
      endif
    else
      stanje_d=1
    endif    
    
    goto main

    end


Pozdrav.
Sinisha
[ marinbnm @ 01.03.2011. 10:29 ] @
@Sepa.....znam, to sam i popravio u svom kodu, taj dio mi je Darko dao, nije moj :D hehe
[ marinbnm @ 01.03.2011. 10:32 ] @
@Sepa.....znam, to sam i popravio u svom kodu, taj dio mi je Darko dao, nije moj :D hehe

Jeli se može varijbla ograničiti na neku vrijednost, recimo 6, tako kad idem 0-1 da je 6, a ne 255, može ovako kako je sinisa napisao, ali me zanima jeli postoji način da baš varijabla ima 60 umjesto da je byte 255.
[ rsinisa @ 01.03.2011. 10:39 ] @
Hm, vidi se da nisi savladao osnovne stvari (bez ljutnje). Bajt ima vrednosti od 0 do 255 - unapred posle 255 dolazi 0, a unazad posle 0 dolazi 255 i tu nema pomoći, mada ja to ne smataram problemom; to je jednostavno priroda brojnog sistema.

Pozdrav.
Sinisha
[ marinbnm @ 01.03.2011. 10:50 ] @
Pa jesam ja rekao da byte ima 255 vrijednosti? Jesam, pa sam zato pitao može li se varijabla osim byte ili word koji je 65550 definirati drugačije da poprimi drugu vrijednost. Znači nemore!
[ Sepa011 @ 01.03.2011. 11:51 ] @
@marinbnm:

Varijabla tipa Byte (28) moze da ima vrednost min. 0, max 255. Tipa Word (216) min. 0 max. 65535. Tvoje je da ogranicis u svom programu kolika ce ti biti max vrednost neke promenljive. Ni jedna promenljiva nema neku 'podrazumevanu' vrednost osim 0 (kada izvrsis naredbu Clear) ili ima neku pocetnu vrednost koji joj ti pridodelis (Promenljiva = 123).

Kako im sam naziv sugerise, promenljuve se nalaze u RAM memoriji kontrolera, tako da im je vrednost prilikom ukljucivanja istog nedefinisana sve do trenutka njihove inicijalizacije.

Kao sto rece Sinisa, imas jos dosta da ucis i da 'peces' programerski zanat. Sve u svemu, to i nije toliko tesko, samo treba vezbati i citati dokumentaciju vezanu za programski jezik koji koristis, ali i dokumentaciju kontrolera za koji pises program.
[ marinbnm @ 01.03.2011. 12:13 ] @
Da, slažem se kolege!

Nisam ja neki programer da se razumjemo, main mi je audio tehnika, a ovo pomalo jer me zanima, sad sam i svoj kod prilagodio da radi bez problema, a ono čega se nisam sjetio je baš ta "caka" kada 0-1 postane 255 da samo napišem da kad je 255 da varijabla poprimi vrijednost 59 i onda samo broji do nule ponovo dok ponovo ne dođe 255 tj 59 i stvar riješena, to sam vidio iz sinišinog primjera što mi je poslao.



[ veselinovic @ 01.03.2011. 16:43 ] @
Jel ja ne vidim dobro, ili ima ozbiljna greska u programu.
Ako je dole ( gore) = 0 i to stanje stoji duze vremena brojac ce da broji do besvjesti?
Mozda treba dodati

loop123 : if dole==0 then loop 123


[ Sepa011 @ 01.03.2011. 17:33 ] @
Dobro vidiš da nedostaje "kočnica", al' to sam ostavio za sledeće
[ rsinisa @ 01.03.2011. 18:21 ] @
Ako misliš na moj program, onda grešiš jer sam pazio na taj detalj, ali verujem da misliš na marinbnm-ov program. Elem, ko je čitao pažljivo video je da njegova elektronika daje 12 impulsa za 1 sekundu, tj. da impuls ima konačno vreme trajanja, a na dnu njegovog programa stoji linija:

while (porta.0=0 or porta.1=0):pause 10:wend

Zato nisam reagovao u vezi "kočnice", ali sam u mom programu odradio to na, po meni,bolji način. Njegov način može da propusti neki impuls ako je kraći od 10 ms.

Pozdrav.
Sinisha
[ marinbnm @ 01.03.2011. 18:39 ] @
Da, siniša je koristio ono što smo na početku pričalki i to baš sam isto proučio, ali kako sam ja osuđen da koristim postoječu CMOS elektroniku i nemogu ubaciti još par optocouplera na vreteno onda nije problem....