Teade

Collapse

Foorumi reeglid.

Foorumi reeglistik on uuendatud. Palume tutvuda ja arvesse võtta.
See more
See less

Koodiabi vaja

Collapse
X
 
  • Filter
  • Kellaaeg
  • Show
Clear All
new posts

    Koodiabi vaja

    Tere, ilmselt elementaarne küsimus, aga algajana vajaks nõu-
    vaja kirjutada selline programm (PicBasic Pro) näiteks PIC 12F629-le, mis loendaks ühte sisendisse tulevaid impulsse ja kui on saabunud kindel arv impulsse mingis ajavahemikus, järgneks sellele mingi tegevus, või väljundi aktiveerimine.
    Näiteks kui kolme sekundi jooksul saabub sisendisse 3 impulssi. Kui saabub kaks või neli, ei toimu midagi ja kui aeg saab läbi, alustatakse lugemist algusest peale. Põhimõtteliselt plaksulüliti
    ise mõtlesin midagi sellist:
    loop:
    count 2,3000,b ;loeb 3s jooksul sisendit gpio2
    if b=3 then goto start
    goto loop
    start:


    Aga see eeldab sisendi korralikku debouncemist,
    äkki on mingi parem lahendus olemas, kas BUTTON käsuga või/ja näiteks selline, et enne esimese impulsi saabumist istub PIC üldse ootel ja tarbib vähem voolu?

    #2
    Vs: Koodiabi vaja

    Debounce't ei peaks vaja olema kui tegu helisignaaliga. Muidugi, see töötaks omamoodi filtrina.
    Olen teinud debounce't nii et ootan kuni sisend aktiivne (oma otsustada kas H või L). Siis jaögin teatud aja jooksul kas seis püsib.
    Ehk saad mingi koodinäite minu kodukalt. Tegin plaksutamisele reageeriva R-dimmeri. Esialgne variant pidi reageerima vilele aga see töötas kehvemini kui plaksudetektor. Päris rahule ei jäänudki aga siis kadus huvi ära. Kivi oli sama - 629. Kood on asseembleris aga kommentaaridega.
    - Vend Hieronymus tunneb Motorola toodete nimekirja kõige paremini, las tema ütleb.
    - Motorola poolt loodud kiipide hulgas ei ole teda üles tähendatud. - Tähendab: ta on Intelist!

    Comment


      #3
      Vs: Koodiabi vaja

      Tegemist ei ole helisignaaliga vaid induktiivset koormust juhtiva releega autos, seega vast suhteliselt mürarikas sisend...
      Selles vast polegi häda, sisendi teen läbi optroni, aga just see signaalide loendamine ajaühikus tekitab küsimusi.

      Comment


        #4
        Vs: Koodiabi vaja

        See viimane pole mingi probleem, vähemasti asmis kirjutades. Paned taimeri etteantud ajavahemikku tiksuma. INTx väliskatkestus suurendab signaali tekkides signaali pulsside arvu registrit. Kui taimer täis tiksunud, vaatad, palju pullse laekus. Ja tegutsed vastavalt. Ja muidui kasid enda järelt: laed taimeri uuesti ja tühjendad pulsside loendi registri. Ja ratas käib jälle ringi...
        - Vend Hieronymus tunneb Motorola toodete nimekirja kõige paremini, las tema ütleb.
        - Motorola poolt loodud kiipide hulgas ei ole teda üles tähendatud. - Tähendab: ta on Intelist!

        Comment


          #5
          Vs: Koodiabi vaja

          Nojah, kui see minu jaoks probleem poleks, siis ma ju ei küsiks

          Comment


            #6
            Vs: Koodiabi vaja

            PICi välskatkestused on frondile tundlikud. 629-l on selleks ots GPIO.2. Debounce jaoks käivitad frondi leidmisel taimeri, mis teeb tundetuse ajavahemiku. Arvatavasti saab seda "algoritmi" ka Basicusse tõlkida.
            Ma ise toda dialekti eriti ei tunne...
            - Vend Hieronymus tunneb Motorola toodete nimekirja kõige paremini, las tema ütleb.
            - Motorola poolt loodud kiipide hulgas ei ole teda üles tähendatud. - Tähendab: ta on Intelist!

            Comment


              #7
              Vs: Koodiabi vaja

              Kahjuks ka basicut ei tea.
              Algoritmina teeks näiteks niimoodi kui katkestusi mängu mitte võtta:

              Kood:
              võtaks ühe 8-bitise muutuja x
              võtaks ühe muutuja y, mis hoiab sisendi debounce'tud viimast olekut
              võtaks loenduri muutuja cnt
              võtaks konstandi MAX
              
              x=0, y=0, cnt=0
              tsükkel algab
              kui sisend on 0 ja x > 0 siis x = x-1
              kui sisend on 1 ja x < MAX siis x = x+1
              kui x=0 ja y<>0, siis y=0
              kui x=MAX ja y<>1, siis y=1 ja cnt = cnt+1
              tsükkel lõppeb
              Tsüklit tuleks siis sobiv arv kordi läbida, et saada umbes õige aeg.
              Algoritmi mõte on, et kui tuleb piisavalt palju samas suunas mõõtetulemusi, siis loendur x jõuab teise serva. Sel hetkel lülitatakse muutuja y ümber ja uus pulss läheb arvesse. Muutujat y on vaja, et veenduda, et kas ikka oleme teises servas ära käinud, et näiteks ei läheks arvesse MAX; MAX-1; MAX käigud jne. Konstant MAX pane vastavalt oma vajadusele, kui mitu järjestikust punkti oleks vaja saada sama väärtust, et ümber lülitada. Mõõteaja paika saamiseks oleks mõistlik lasta tal teha piisavalt palju tsükleid niimoodi, et panna mingi led põlema enne tsüklite algust ja kustutada ära pärast tsüklite lõppu. Siis saad stopperiga ära mõõta ja tsüklite arvuga läbi jagada et umbes tsükli aega saada.

              Comment

              Working...
              X