Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Brojanje impulsa sa PIC-om

[es] :: Elektronika :: Mikrokontroleri :: Brojanje impulsa sa PIC-om

Strane: 1 2

[ Pregleda: 6478 | Odgovora: 38 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

marinbnm

Član broj: 19868
Poruke: 256
*.adsl.net.t-com.hr.

Sajt: www.fmdream.net


+2 Profil

icon Re: Brojanje impulsa sa PIC-om28.02.2011. u 14:04 - pre 160 meseci
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!
frffr
 
Odgovor na temu

Darko_zed
Aleksinac

Član broj: 137277
Poruke: 2312
*.dynamic.isp.telekom.rs.

Sajt: www.proelektro018.com


+98 Profil

icon Re: Brojanje impulsa sa PIC-om28.02.2011. u 15:27 - pre 160 meseci
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]
 
Odgovor na temu

marinbnm

Član broj: 19868
Poruke: 256
*.adsl.net.t-com.hr.

Sajt: www.fmdream.net


+2 Profil

icon Re: Brojanje impulsa sa PIC-om28.02.2011. u 21:04 - pre 160 meseci
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

frffr
 
Odgovor na temu

marinbnm

Član broj: 19868
Poruke: 256
*.adsl.net.t-com.hr.

Sajt: www.fmdream.net


+2 Profil

icon Re: Brojanje impulsa sa PIC-om28.02.2011. u 23:23 - pre 160 meseci
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

frffr
 
Odgovor na temu

Darko_zed
Aleksinac

Član broj: 137277
Poruke: 2312
*.dynamic.isp.telekom.rs.

Sajt: www.proelektro018.com


+98 Profil

icon Re: Brojanje impulsa sa PIC-om28.02.2011. u 23:52 - pre 160 meseci
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
 
Odgovor na temu

Darko_zed
Aleksinac

Član broj: 137277
Poruke: 2312
*.dynamic.isp.telekom.rs.

Sajt: www.proelektro018.com


+98 Profil

icon Re: Brojanje impulsa sa PIC-om28.02.2011. u 23:54 - pre 160 meseci
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 ?
 
Odgovor na temu

marinbnm

Član broj: 19868
Poruke: 256
*.adsl.net.t-com.hr.

Sajt: www.fmdream.net


+2 Profil

icon Re: Brojanje impulsa sa PIC-om01.03.2011. u 08:31 - pre 160 meseci
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....
frffr
 
Odgovor na temu

Sepa011

Član broj: 161918
Poruke: 1817
212.178.236.*



+28 Profil

icon Re: Brojanje impulsa sa PIC-om01.03.2011. u 09:13 - pre 160 meseci
@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
 
Odgovor na temu

rsinisa
Siniša Radanočević
Smederevo

Član broj: 2716
Poruke: 1586
*.dynamic.isp.telekom.rs.



+321 Profil

icon Re: Brojanje impulsa sa PIC-om01.03.2011. u 09:43 - pre 160 meseci
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
 
Odgovor na temu

marinbnm

Član broj: 19868
Poruke: 256
*.adsl.net.t-com.hr.

Sajt: www.fmdream.net


+2 Profil

icon Re: Brojanje impulsa sa PIC-om01.03.2011. u 10:29 - pre 160 meseci
@Sepa.....znam, to sam i popravio u svom kodu, taj dio mi je Darko dao, nije moj :D hehe
frffr
 
Odgovor na temu

marinbnm

Član broj: 19868
Poruke: 256
*.adsl.net.t-com.hr.

Sajt: www.fmdream.net


+2 Profil

icon Re: Brojanje impulsa sa PIC-om01.03.2011. u 10:32 - pre 160 meseci
@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.
frffr
 
Odgovor na temu

rsinisa
Siniša Radanočević
Smederevo

Član broj: 2716
Poruke: 1586
*.dynamic.isp.telekom.rs.



+321 Profil

icon Re: Brojanje impulsa sa PIC-om01.03.2011. u 10:39 - pre 160 meseci
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
 
Odgovor na temu

marinbnm

Član broj: 19868
Poruke: 256
*.adsl.net.t-com.hr.

Sajt: www.fmdream.net


+2 Profil

icon Re: Brojanje impulsa sa PIC-om01.03.2011. u 10:50 - pre 160 meseci
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!
frffr
 
Odgovor na temu

Sepa011

Član broj: 161918
Poruke: 1817
212.178.236.*



+28 Profil

icon Re: Brojanje impulsa sa PIC-om01.03.2011. u 11:51 - pre 160 meseci
@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.
 
Odgovor na temu

marinbnm

Član broj: 19868
Poruke: 256
*.adsl.net.t-com.hr.

Sajt: www.fmdream.net


+2 Profil

icon Re: Brojanje impulsa sa PIC-om01.03.2011. u 12:13 - pre 160 meseci
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.




frffr
 
Odgovor na temu

veselinovic
Jovan Veselinovic
Ist. Sarajevo

Moderator
Član broj: 7761
Poruke: 3874
62.101.128.91



+334 Profil

icon Re: Brojanje impulsa sa PIC-om01.03.2011. u 16:43 - pre 160 meseci
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


 
Odgovor na temu

Sepa011

Član broj: 161918
Poruke: 1817
212.178.236.*



+28 Profil

icon Re: Brojanje impulsa sa PIC-om01.03.2011. u 17:33 - pre 160 meseci
Dobro vidiš da nedostaje "kočnica", al' to sam ostavio za sledeće
 
Odgovor na temu

rsinisa
Siniša Radanočević
Smederevo

Član broj: 2716
Poruke: 1586
*.dynamic.isp.telekom.rs.



+321 Profil

icon Re: Brojanje impulsa sa PIC-om01.03.2011. u 18:21 - pre 160 meseci
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
 
Odgovor na temu

marinbnm

Član broj: 19868
Poruke: 256
*.adsl.net.t-com.hr.

Sajt: www.fmdream.net


+2 Profil

icon Re: Brojanje impulsa sa PIC-om01.03.2011. u 18:39 - pre 160 meseci
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....

frffr
 
Odgovor na temu

[es] :: Elektronika :: Mikrokontroleri :: Brojanje impulsa sa PIC-om

Strane: 1 2

[ Pregleda: 6478 | Odgovora: 38 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.