Teade

Collapse

Foorumi reeglid.

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

kaardilugeja->pic(->pc)

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

    kaardilugeja->pic(->pc)

    nii sain siis omale mingi vanema kaardilugeja(magnetkaardi siis) ja yritan yhendada seda oma piciga
    Datasheedi järgi on vaja ühendada Vcc, Gnd, Strobe, Data, ja Cardcheck, kuid ma ei oska välja lugeda millised neist on outputid ja millised inputid... ja kuhu&#092;kust saatma&#092;lugema pean <_< (ja mida ma saatma pean)

    oleksin väga tänulik, kui saate mind aidata

    Rain


    #2
    Kõik signaalid on kaardilugeja väljundid.

    Comment


      #3
      Väljundid jah. Card-chreck&#39;i ei pruugi jälgida.
      Vaata Microchipi app-note 727-t. Ja üks näidiskood ka (ei mäleta enam, kuskohast leidsin: http://parsek.yf.ttu.ee/~felc/card.asm
      - 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


        #4
        äkki viitsiks keegi seletada mulle millal datast bit välja tuleb.
        ma proovisin terve päev ja ei midagi mingeid lollusi siin aegajalt väljub kui need mingid suvalised arvud, mis lambist arvutisse jõudsid...

        lugenud olen praegu ainult bitte ja need siis arvutisse saata yritanud aga nagu ei tule midagi läbi...(kahtlane)

        keeleks kasutan PICAXE basicut


        symbol strobe = pin2
        symbol dat = pin6
        symbol cardin = pin7
        symbol bitnr = b10


        &#39;zero it up
        bit0=0
        bit1=0
        bit2=0
        bit3=0
        bit4=0
        bit5=0
        bit6=0
        bit7=0
        bit8=0
        bit9=0
        bit10=0
        bit11=0
        bit12=0
        bit13=0
        debug

        main:
        bitnr = &#036;c0
        loop1: if cardin = 0 then readbit
        goto loop1

        cardisin:
        if strobe = 0 then readbit
        if cardin = 1 then main
        goto cardisin

        readbit:
        if bitnr=&#036;D3 then dataout
        if dat = 0 then add0
        if dat = 1 then add1
        if strobe = 1 then cardisin
        goto readbit

        add0:
        bitnr=bitnr+1
        poke bitnr,0
        goto cardisin

        add1:
        bitnr=bitnr+1
        poke bitnr,1
        goto cardisin

        dataout:

        peek &#036;C0,bit0
        peek &#036;C1,bit1
        peek &#036;C2,bit2
        peek &#036;C3,bit3
        peek &#036;C4,bit4
        peek &#036;C5,bit5
        peek &#036;C6,bit6
        peek &#036;C7,bit7
        peek &#036;C8,bit8
        peek &#036;C9,bit9
        peek &#036;D0,bit10
        peek &#036;D1,bit11
        peek &#036;D2,bit12
        peek &#036;D3,bit13


        sertxd( "Bit value is ",#bit0,13,10)
        sertxd( "Bit value is ",#bit1,13,10)
        sertxd( "Bit value is ",#bit2,13,10)
        sertxd( "Bit value is ",#bit3,13,10)
        sertxd( "Bit value is ",#bit4,13,10)
        sertxd( "Bit value is ",#bit5,13,10)
        sertxd( "Bit value is ",#bit6,13,10)
        sertxd( "Bit value is ",#bit7,13,10)
        sertxd( "Bit value is ",#bit8,13,10)
        sertxd( "Bit value is ",#bit9,13,10)
        sertxd( "Bit value is ",#bit10,13,10)
        sertxd( "Bit value is ",#bit11,13,10)
        sertxd( "Bit value is ",#bit12,13,10)
        sertxd( "Bit value is ",#bit13,13,10)

        wait 1
        goto main
        see siis minu kood,loodan et saate aru(kood on teoorias töötav)

        Comment


          #5
          Jälgid CLK (strobe) otca, (tõenäoliselt) langeval frondil loed daatasisendit. Databitt peaks kah inverteeritud olema...vist.
          Langevale frondile on tundlik INT otc. Igal PICil oma.
          Vaata ka kaardilugeja kivi datasheeti kui sellise leiad.
          - 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


            #6
            sain selle asja mingil määral tööle, kuid ta saab IGA kord erineva vastuse... milles võib viga olla?

            kas äkki keegi oskab datast välja lugeda mitu biti ta loeb... kas 15 või rohkem vi mis, siis teab täpsemaks seda jullat ajada

            symbol strobe = pin2
            symbol dat = pin7
            symbol cardin = pin6
            symbol bitnr = b10

            &#39;zeroing
            bit0=0
            bit1=0
            bit2=0
            bit3=0
            bit4=0
            bit5=0
            bit6=0
            bit7=0
            bit8=0
            bit9=0
            bit10=0
            bit11=0
            bit12=0
            bit13=0
            main: bitnr = &#036;c0

            loop1: if cardin = 0 then startreading
            goto loop1
            startreading:
            if bitnr = &#036;D5 then dataout
            if strobe = 0 AND dat = 0 then add1
            if strobe = 0 AND dat = 1 then add0
            goto startreading

            add0:
            bitnr=bitnr+1
            poke bitnr,0
            goto startreading

            add1:
            bitnr=bitnr+1
            poke bitnr,1
            goto startreading

            dataout:

            peek &#036;C0,bit0
            peek &#036;C1,bit1
            peek &#036;C2,bit2
            peek &#036;C3,bit3
            peek &#036;C4,bit4
            peek &#036;C5,bit5
            peek &#036;C6,bit6
            peek &#036;C7,bit7
            peek &#036;C8,bit8
            peek &#036;C9,bit9
            peek &#036;D0,bit10
            peek &#036;D1,bit11
            peek &#036;D2,bit12
            peek &#036;D3,bit13
            peek &#036;D4,bit14
            peek &#036;D5,bit15


            &#39; if bit1 <> 0 or bit2 <> 0 or bit3 <> 0 or bit4 <> 0 or bit5 <> 0 or bit6 <> 0 or bit7 <> 0 then datout
            &#39; goto startreading
            datout: sertxd( "Bit value is ",#bit0,13,10)
            sertxd( "Bit value is ",#bit1,13,10)
            sertxd( "Bit value is ",#bit2,13,10)
            sertxd( "Bit value is ",#bit3,13,10)
            sertxd( "Bit value is ",#bit4,13,10)
            sertxd( "Bit value is ",#bit5,13,10)
            sertxd( "Bit value is ",#bit6,13,10)
            sertxd( "Bit value is ",#bit7,13,10)
            sertxd( "Bit value is ",#bit8,13,10)
            sertxd( "Bit value is ",#bit9,13,10)
            sertxd( "Bit value is ",#bit10,13,10)
            sertxd( "Bit value is ",#bit11,13,10)
            sertxd( "Bit value is ",#bit12,13,10)
            sertxd( "Bit value is ",#bit13,13,10)
            sertxd("Kokku ",#W0,13,10)
            wait 1
            goto main

            end
            see siis see uus progre

            Comment


              #7
              Sa oma koodiga ju kontrollid &#33;strobe=0 nivood, mitte &#33;strobe=0->1 fronti. Niimoodi loed selle ühe nivoo jooksul mitu sämplit. Lugemine tuleb teha just frondi hetkel. Kui tahad teha niimoodi ilma katkestuseta, siis võta veel muutuja old_strobe vms ja oota niikaua, kuni strobe muutub. Siis tee oma tegevused ära ja jäta vana strobe meelde.. või siis veel lihtsamalt pmst olekuautomaati realiseerides:

              Kood:
              ootakaarti&#58;
              if cardpresent=1 goto ootakaarti
              bitnr=algus &#39;algv22rtustamised
              info=0 &#39;info muutuja
              ootanull&#58; 
              if cardpresent=1 goto ootakaarti  &#39;kui kaart sai otsa
              if strobe=0 goto ootanull &#39;ootame kuni strobe läheb üheks
              
              info&#60;&#60;1 &#39;nihutame muutuja info 1 koha võrra vasakule
              &#39; kui antud kompilaator seda ei luba, siis info=info*2
              info=info+dat &#39;liidame paremalt sisse uue biti
              
              bitnr=bitnr+1
              if bitnr&#62;bittide_arv goto v2ljasta &#39;kui bitid said otsa
              
              ootayks&#58; 
              if cardpresent=1 goto ootakaarti &#39;kui kaart sai otsa enne bittide arvu t2itumist
              if strobe=0 goto ootayks &#39;ootame, kuni strobe läheb nulli
              
              v2ljasta&#58;
              &#39;siia kõik see väljastamise kood, näiteks
              sertxd&#40; &#34;tuli kood &#34;,#info,13,10&#41;
              
              ootakaardiloppu&#58; &#39;kui kaardilugejast tuleb veel rohkem sümboleid, siis me ei parsi neid uue kaardi pähe; see on vana kaardi lõpp
              if cardpresent=1 goto ootakaarti
              goto ootakaardiloppu
              Ja muidugi. Kui sul on vaba interrupt sisend ja miski muu koodis ei välista selle kasutamist, siis kirjuta antud asi interruptina. Kas siis üks int, mis käivitub card present signaali peale või siis paned kohe 2 int&#39;i, card present peale resetitakse kõik loendurid ja strobe peale loetakse üks bitt. Sellise lahendusega saad kasutada kontrollerit ka muuks otstarbeks ja ei maga kunagi maha seda kaardi lugemist, ülejäänud töö katkestatakse ja kaardi lugemine toimub alati. Kahe interruptiga saab mingi muu asi veel joosta bittide lugemise vahepeal, sel ajal võib ka ju midagi teha.

              Comment


                #8
                vaatasin seda koodijuppi ja mõtlesin, kuid ei suutnud välja mõelda kahe defineerimata nimetuse tähendust:
                algus-
                dat

                kas need on inputid&#092;outputid&#092;variabled(kui need siis mis on algvääruseks)
                ja kui on äkki veel mingi asi millel on algväärtus siis oleks hea kui saaks teada need...


                symbol cardpresent = pin2
                symbol strobe = pin6
                symbol dat   = b13
                symbol algus = b12
                symbol bitnr = b1
                symbol info  = b2
                symbol bittide_arv = b0
                dat ja algus praegu variabled ja kontrollige siis kas ka muud on õieti defainitud
                (b(x)=variable)

                EDIT:
                ma panin selle dat&#39;i inputiks ja lasin pici ära, kuid see saatis koheselt käivitues vastuse: "tuli kood 1" ja siis jäi seisma ja ootas reseti, mille järel uuesti selle sama asja kirjutas... <_<
                miks?

                picil on siis jalad sellised:pic&#39;i jalad

                Comment


                  #9
                  Magnetribal on alguse kood ja lõpu kood. Arvatavasti oodatakse just neid. Algväärtused oleks siis nullid ja kui vastav kood käes, alustatakse daata lugemist. S.t. ootab kõigepealt stardikoodi (mis on ka daata muidugi) ja alles sealt hakkad lugema põhidaatat. Teed seda kuni stop-koodi saabumiseni.
                  Daatajada keskel võib olla veel üks mitte-ascii sümbol - luuni märk. Paarsuse bitid on samuti olemas.
                  Ma ei oska öelda, kui kiiresti su Basicu kood töötab kuid vahest ta lihtsalt ei jõua reageerida? Taktipulss liiga lühike. Selline jama oli ühe kontaktivaba kaardi lugemisega. LAhendusena lugesin kohe peale taktikatkestusse sisenemist dataa-pinni seisu, seivisin ja töötlesin juba seivitut.
                  Ma soovitaksin kasutada takti otsa liikumise jälgimiseks frondile reageerivat katckestust. Siis ei ole vaja taktipinni pärast rohkem muretseda. Kui katksetus tuli, loed datapinni seisu, nihutad teda registris 1 sammu paremale ja suurendad loendureid. Üks loendi loeb vastuvõetud bitte ja teine baite. Sa ju peab teadma, millas 1 bait käes et teda kusagile puhvrisse ära salvestada. Vastasel korral hakkad nihutamiseks kasutatava mälupesa sisu üle kirjutama.
                  Baitide arv sõltub kaardist. Nt. Ühispanga kaardil on 2 rada ja kirjas ka omaniku isikukood ning nimi. Hansapanga kaardil aga ainult number (sama mis kaardile trükitud). Igasugu kliendikaartidel on tavaliselt ainult number ja seda saab kirjutada vaid rajale 2. Üldse on enamik kaarte ja lugejaid vaid rada 2 jaoks. Sinna tähti ei kirjutata.

                  PS. Loe seda appnotet, seal on palju huvitavat kirjas&#33;

                  PS2. Nagu ma aru saan, ootab su kood stardi baiti ja siis loeb ühe baidi ning väljastab.
                  - 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


                    #10
                    Nii sain lugema selle asja yhte bitti korraga, kuid kuidas ma saaksin kogu selle info sealt välja?
                    praegu annab nulle ja yhtesid rida haaval iga tõmbe järel

                    ja ootan ikka variablede algväärtusi

                    Comment


                      #11
                      Pead lugema lõpusümbolini. Bitid grupeeri 8-kaupa baidiks kokku.
                      - 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


                        #12
                        oeh....
                        kirjutasin selle koodi peast selleks, et sa saaksid sealt põhimõtet vaadata, mitte kohe kompileerida asja ära. Seega oli põhimõttega anda õng mitte kala... sellest koodist tuleks aru saada ja siis ise kirjutada midagi sarnast.

                        Pane näiteks algus asemel 0 ja bittide_arv asemel 8 ning proovi siis midagi tööle saada, st saada esimene bait kätte. Ja kui sellega said tööle, siis võta veel baidiloendur ja pane ta järgemööda baite lugema jne, tekita mällu baitidele massiiv ja siis lae nad sinna.

                        Kui sa ei anna talle ette loenduri alg- ja lõppväärtust, siis ta muidugi ei tohiks midagi eriti teha.

                        minuteada peaks vähemalt lollid kaardilugejad andma seda koodi täpselt nii nagu kaart liigub... st kui keegi seda kaarti liiga kiiresti veab, siis on pahasti... seega tuleks pärast lugemise lõpul kontrollida, mitu baiti tuli ja kas viimase baidi viimane bitt ka kätte saadi ja kui seda ei tulnud, siis järelikult läks bitte kaduma.

                        Comment


                          #13
                          Üsna kindlalt loevad. Tipis kasutan ukselukkudeks, lugejad mingid vanad ja kaardi vüib peaaegu läbi lugeja visata.
                          - 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

                          Working...
                          X