Teade

Collapse

Foorumi reeglid.

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

PIC16F628 ja magnetkaardi lugeja

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

    PIC16F628 ja magnetkaardi lugeja

    Mul selline vana magnetkaardi lugeja nagu Omroni 3S4YR-HNR (loeb teist rada). Probleem on selles, et kuidagi moodi ei ole veel õnnestunud kaardilt adekvaatset infi välja lugeda.
    Kas oskate palun arvata kuidas PICiga selle lugeja "kuulamine" käib. Mõte on teha midagi kaardi luku moodi, või vähemalt endale selgeks teha kuidas selline süsteem võiks PIC'is toimida.
    Praegune skeem on selline, et MCRi CLS (card load) läheb suvaliselt PICi A2 jalale andmaks märku millal kaart lugejas on. RCP (read clock) läheb PICi A0 jalale ja RDP (read data) läheb PICi A1 jalale.
    Kood on esialgu kirjutatud nii, et kui kaart läbi tõmmata, siis PIC peaks saatma kogu saadud info läbi MAX232 kivi arvutisse, et näha mida ta üldse välja loeb.
    Tulemus on praegu see, et midagi ta loeb ja saadab aga igakord kui kaart läbi tõmmata on suht nagu erinev info. Suhtlus PIC'i ja arvuti vahel on OK, kui saadan mingi kindla baidi. Seega selgelt on põhjus PIC programmi selles osas kus käib kaardi lugeja bittide kokku löömine.
    Põhimõte on selline: kui RCP staatus LOW, loeb RDP staatust. Küll aga ei ole mul vähimatki aimu ajastusest ja seega iga RCP LOWga loeb RDP staatust ainult korra.

    Minu üks suur küsimus ongi, et kas peaks kasutama RCP (read clock) kuulamiseks "external interrupt" skeemi PIC'i programmis või on võimalus ka lihtsalt portide "kuulamise" teel magnetkaardi lugejast info üles korjata?
    Kui keegi teab head linki, mis räägiks sellise suhtlemise olemusest ja põhimõtetest (kuidas nimetatakse, "serial comm."?) oleks maru hea kui jagaks. Olen veel suht loll selles valdkonnas.

    #2
    Vs: PIC16F628 ja magnetkaardi lugeja

    Kas see sobiks? Ideedeks.
    - 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: PIC16F628 ja magnetkaardi lugeja

      Tänud soovituse eest felch see on mul algusest peale ees olnud
      Paraku tundub, et ma teen kusagil mingi põhimõttelise vea, sest PIC16F628 minul kaardilugejast numbreid välja ei loe. Olen uurinud sinu ASM faili kuid paraku ei saa ma assemblerist veel päris õiget sotti, mis tähendab, et mul puudub täpne teadmine erinevate ASM käskude kohta ja ka kommentaarid paraku pole päris selguseni aidanud. Ise pusin väikest viisi C keeles.

      Kui üldisemalt rääkida, kas minu mõte võiks liikuda õiges suunas, kui pidevalt kontrollin PICi vastavate jalgade olekuid ning loen takti saatel data bitid kokku kui kaart läbi tõmmatakse? Või tuleb ikkagi takti lugemiseks kasutada katkestust.

      Praegu saan iga kaardi tõmbamisega sisuliselt mingi müra, mis igakord on erinev ja absoluutselt ei meenuta infot, mis kaardil peaks olema.

      Comment


        #4
        Vs: PIC16F628 ja magnetkaardi lugeja

        Kas sa koodi avalikustada ei taha?

        Comment


          #5
          Vs: PIC16F628 ja magnetkaardi lugeja

          Äkki on asi selles, et loed iga pulssi mitu korda? Juhuslik arv kordi nimelt. Taktipulsi frondi katkestust kasutades välistaksid selle kohe. Kiiruses asi küll ei ole, kaarti liigutatakse nii aeglaselt et data saaks välja lugeda ka ...arvelauaga rehkendades
          - 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
            Vs: PIC16F628 ja magnetkaardi lugeja

            Väga lühidalt on asi järgmine

            ..
            //PICi confimise möla
            ..
            BYTE CONST decimal[8] = {1, 2, 4, 8, 16, 32, 64, 128}

            // see kood on üks igavene jama
            //==========================================
            void ReadCard(){
            BOOLEAN clk;
            unsigned char data;

            //kordus kuni kaart on lugejas
            while(!input(PIN_A2)){
            data = 0;
            //loeme 5 bitti
            for(int i=0; i<=4; ++i){
            //kui CLOCK LOW
            if (!input(PIN_A0){
            //kui DATA LOW ja ei ole selle
            //LOW CLOCKi aeg bitti lugenud
            if (!input(PIN_A1 && !clk){
            data = data + decimal[i];
            }
            //märgime biti loetuks
            clk = TRUE;
            }
            else{
            //kui CLOCK HIGH jääme uut ootama
            clk = FALSE;
            }
            }
            ...
            //teeme midagi nt. saadame data üle seriali PCle
            }
            }
            //==========================================

            void main() {

            while (TRUE){
            if(input(PIN_A2){
            ReadCard();
            }
            }


            PIC ise töötab normaalselt kui muidu LEDe vilgutada ja jalgu pingestada seega conf. ja muud asjad on ok. Mida ma ei suuda teha on bitid õigesti kokku lugeda.

            Comment


              #7
              Vs: PIC16F628 ja magnetkaardi lugeja

              Siin kirjeldatakse lugejat PICil. On ajadiagramm. Paistab, et lugeda tuleks CLK tõusval frondil.
              Mina oma koodis card present otsa ei kasutanud, ta tekitas mingi jama, ei mäleta enam mida täpselt.
              - 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


                #8
                Vs: PIC16F628 ja magnetkaardi lugeja

                njaaa,
                miks mitte
                if (!input(PIN_A1 && !clk){
                data = data + decimal[i];
                }

                data+=(input(PIN_A1 && !clk) ? 0 : (1 << i );

                kui vähegi kaasaegsem prose teeb << funktsiooni 1 taktiga kuigi 628 on paras uunikum.
                Mis compiler see on?, hea oleks teada mis kaka on PIN_A1 taga, esimest korda näen, olen küll näinud PORTA.F1 ja PORTA.Bit1.

                Boolean võtab endiselt yhe baidi, boolean on deftype unsigned char.
                iga compiler ei toeta seda või toetab oma moodi, aga noh sõltub kas sa kasutad teise koodi tükke või alustad alati otsast peale



                üldiselt frondi peale dedecti näide.
                ...
                unsigned char clk=0,clk_old=0;

                clk=input;
                if((clk!=clk_old)&&(clk==1)){ //1=tõusev front, 0=Langev front
                ...
                koodiläbu
                ...
                }
                clk_old=clk;
                ...
                Modelleerimises ja tootmises kehtivad:
                1. Avariikindel vooluring lühistab kõik teised.
                2. Transistor, millel on kiiresti toimiv kaitse, säästab kaitset, sulades kõigepealt ise.

                Comment


                  #9
                  Vs: PIC16F628 ja magnetkaardi lugeja

                  tänud vihje eest murphy.

                  PIN_A1 jne. on pici "header" failis defineeritud pordi otsad. Kasutan MPLABi CCS C kompilaatoriga.

                  üldiselt tundub, et sain asja enamvähem midagi lugema.

                  Comment


                    #10
                    Vs: PIC16F628 ja magnetkaardi lugeja

                    Äkki kaardilugeja lihtsalt vigane?

                    Kunagi oli selline Eestikeelne arvutiajakiri nagu .EXE seal ühes numbris kirjejdati põhjalikult magnetkaardiga suhtlemist ja oli lisatud programm, mis oskas LPT pordist kaardilugeja infot lugeda.

                    Mõningatel kaardilugejatel saab helipead tõstes ka teisi radasid lugeda, selleks on kohe spetsiaalne kruvikinnitus.
                    MINULE EI MEELDI KUI MÕNINGAD ISIKUD MINU POSTITUSI MUUDAVAD,
                    KUI POSTITUS EI SOBI SIIS PALUKS SEE KUSTUTADA !

                    Comment


                      #11
                      Vs: PIC16F628 ja magnetkaardi lugeja

                      Leidsin vanades arhiivides sobrades selle kardilugeja programmi üles

                      Olemas nii käivituv .exe fail koos egavga draiveritega kui .c keeles algtekst koos mõningate kommentaaridega.

                      programmi käivitamisel kuvatakse järgmised valikud:

                      * 1 raja lugemine
                      * 2 ja 3 raja lugemine
                      * binaarinfo lugemine
                      * digitaalne ossiloskoop , mis näitab kolme kasutatava sisendi olekut

                      LPT pordi muutmiseks peab programmi uuesti kompileerima.
                      Magnetkaardilugeja ühendati LPT porti.
                      Skeemi enam ei mäleta - aga algtekstist peaks sisendviigud olema tuvastatavad.
                      Kellel huvi asja vastu - võin saata.
                      MINULE EI MEELDI KUI MÕNINGAD ISIKUD MINU POSTITUSI MUUDAVAD,
                      KUI POSTITUS EI SOBI SIIS PALUKS SEE KUSTUTADA !

                      Comment

                      Working...
                      X