Teade

Collapse

Foorumi reeglid.

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

DS18S20 1/16 kraadi assembler kood PIC -ile

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

    DS18S20 1/16 kraadi assembler kood PIC -ile

    Tere, äkki kellelgi leiduks DS18S20 1/16 kraadi assembler koodi PIC16F628 protsessorile?
    Sai lehelt http://www.pic16.nm.ru/site/thermome...ermometer.html valmis ehitatud ja
    kood DS18S20 jaoks kohaldatud - nüüd sooviks, et ta näitaks ka kümnendik kohti.
    Praegu näitab termomeeter kümnendik kraadi kohal kas 0 -i või 5 -t.

    Kood ise on siin : http://lennuki.planet.ee/staff/therm628_DS18S20.asm.txt

    (code aknasse ei mahtunud ära - tähemärke oli 17000, aga maksimaalne lubatu on 10000)
    MINULE EI MEELDI KUI MÕNINGAD ISIKUD MINU POSTITUSI MUUDAVAD,
    KUI POSTITUS EI SOBI SIIS PALUKS SEE KUSTUTADA !

    #2
    Vs: DS18S20 1/16 kraadi assembler kood PIC -ile

    PS. Kuvada sooviks ikka 1/10 kraadi, 1/16 kuvamiseks pole vajadust.
    MINULE EI MEELDI KUI MÕNINGAD ISIKUD MINU POSTITUSI MUUDAVAD,
    KUI POSTITUS EI SOBI SIIS PALUKS SEE KUSTUTADA !

    Comment


      #3
      Vs: DS18S20 1/16 kraadi assembler kood PIC -ile

      Leidsin sellise õpetuse:

      Et siis tuleks lugeda temperatuuriandurist registrid TempLSB ja Count_remain
      count_per_c -d lugeda pole vaja, see on nigu-nii alati 16.

      valem oleks seega :
      Extended Temperature = Temperature_read - 0.25 + ((count_per_c - Count_remain)/count_per_c)

      et vabaneda ujukoma tehetest, oleks hea kohe alguses kõik 16 -ga korrutada:
      16 * Extended Temperature = 16 * Temperature_read - 16 * 0.25 + 16* ((16 - Count_remain)/16)
      lihtsustades:
      16 * Extended Temperature = 16 * Temperature_read - 4 + 16 - Count_remain
      16 * Extended Temperature = 16 * Temperature_read + 12 - Count_remain

      järgmine samm oleks muutuja teisendamine integer-iks
      sajaga korrutamise ja 16 jagamise saame taandada 25 korrutamiseks ja 4 jagamiseks.

      Extended Temperature = (((16 * TempLSB) + 12 - Count_remain)*25)/4

      et midagi siis sellist:

      oletame, et andurist loeme 36004B46FFFF0F102B

      kui TempLSB on 0x36, e. 54

      Count_Remaining on 0x0F, e. 15

      kõigepealt nihutame TempLSB vasakule = 0x1B (27 kümmend)

      Pannes nüüd arvud valemisse :

      Extended Temperature = ((16 * 0x1B + 0x0C - 0x0F)*0x19)/4

      Extended Temperature = ((16 * 27 + 12 - 15)*25)/4

      16 *27 = 432
      +12 = 444
      - 15 = 429
      *25 = 10725
      /4 = 2681

      ehk 26,81 kraadi
      MINULE EI MEELDI KUI MÕNINGAD ISIKUD MINU POSTITUSI MUUDAVAD,
      KUI POSTITUS EI SOBI SIIS PALUKS SEE KUSTUTADA !

      Comment


        #4
        Vs: DS18S20 1/16 kraadi assembler kood PIC -ile

        Paistab, et see TempLSB vasakule nihutamine pole kõige parem idee - kohati tekkib 0,5 kraadine viga.
        Samuti oleks vaja sajandike mitte kuvamisel kümnendike veidi ümmardada.
        äkki nii-moodi? :
        Extended Temperature = (((8 * 54 + 12 - 15)*25)+24)/4

        Oskaks keegi selle PIC16F628 assemblerisse tõlkida?
        MINULE EI MEELDI KUI MÕNINGAD ISIKUD MINU POSTITUSI MUUDAVAD,
        KUI POSTITUS EI SOBI SIIS PALUKS SEE KUSTUTADA !

        Comment


          #5
          Vs: DS18S20 1/16 kraadi assembler kood PIC -ile

          Selleks mõeldigi kõrgkeeled välja nagu näiteks C.
          Võta PIC C compiler ja lase rida läbi ja vaata mis assemblerisse pannakse.
          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


            #6
            Vs: DS18S20 1/16 kraadi assembler kood PIC -ile

            Murphy-ga nõus. PICile asmi väänajaid küll leidub aga peab eriline fanatt olema kes viitsib neid käske käsitsi nikerdada. Asja teeb raskemaks mitme baidiste (PIC16f628 on 8 bitine) muutujatega majandamine. ASMis pead pead int (32 bit) jaoks kasutama 4 registrit, iga liitmistehte korral kontrollima teisi registreid, kas äkki tekkis madalamas baidis overflow ja kui, siis selle ülekandma.

            Samas võta kõrgkeel, ei pea olema C (kuigi 90+ % koodist on just selles keeles. Mitte et see parim oleks), võib ka BASIC, pascal, või üks kõik mis muu kompilaatori leiad olla.

            Alustuseks vaata siia: http://www.mikroe.com/eng/categories...pic-compilers/ - siin C, BASIC, Pascal kompilaatorid - demos küll piirangud aga ajab asja ära (täisversioonid ka saadaval kes kahemõttelisusest aru sai).

            Omale vajaliku osa oled juba kirja pannud, trüki see sama nüüd sinna mikroE BASICu kompilaatorisse ja ning tõlgi olemasolev asm ümber kõrgkeelde või kui õnnestub pista asm { } tägide vahele.

            Kui C ei meeldi võta Pascal, väga tahad siis BASIC (kuigi mu meelest Pascal on etem).

            Kui ikka tõesti tahad mitme baidiste muutujatega ASMi kirjutada siis otsi microchipi lehelt selline asi nagu CML (code module library) - seal on näited kuidas mitme baidiste muutujatega majandada. Mõistlik inimene kirjutab selle asemel muidugi ühe rea koodi kõrgkeeles.

            Comment


              #7
              Vs: DS18S20 1/16 kraadi assembler kood PIC -ile

              Kõigepealt tõlkisin google translaatoriga kommentaarid ära.
              C-ga läheb veidi raskemaks isegi, assembleris korrutamised ja jagamised leidsin.
              Korrutamine on kontrollitud ja töötab.
              Liitmine on kah enamvähem valmis.
              Nüüd nuputan kuidas lahendada temperatuuri 0 kraadist läbimineku probleem.
              MINULE EI MEELDI KUI MÕNINGAD ISIKUD MINU POSTITUSI MUUDAVAD,
              KUI POSTITUS EI SOBI SIIS PALUKS SEE KUSTUTADA !

              Comment


                #8
                Vs: DS18S20 1/16 kraadi assembler kood PIC -ile

                Sellelt lehelt leidsin jah valmis aritmeetilised funktsioonid.
                MINULE EI MEELDI KUI MÕNINGAD ISIKUD MINU POSTITUSI MUUDAVAD,
                KUI POSTITUS EI SOBI SIIS PALUKS SEE KUSTUTADA !

                Comment


                  #9
                  Vs: DS18S20 1/16 kraadi assembler kood PIC -ile

                  Nullist läbiminek selles mõttes, et kui TempLSB -s on nullid ja MS bait näitab nulli (st temperatuur on positiivne) ning Count_remain on kas 13 , 14 või 15 siis peaks temperatuuri näit ju negatiivne olema, kuigi MS baitide järgi on see positiivne.
                  Ei oska seda C-keeles üldse kohe mitte sõnastada, assembleris on vist lihtsam.
                  MINULE EI MEELDI KUI MÕNINGAD ISIKUD MINU POSTITUSI MUUDAVAD,
                  KUI POSTITUS EI SOBI SIIS PALUKS SEE KUSTUTADA !

                  Comment


                    #10
                    Vs: DS18S20 1/16 kraadi assembler kood PIC -ile

                    Valem peaks olema täpsustatult selline:
                    Extended Temperature = (((8 * 54 + 12 - 15)*25)+22)/40

                    Hetkel kood selles seisus: http://lennuki.planet.ee/staff/term_2.asm.txt
                    MINULE EI MEELDI KUI MÕNINGAD ISIKUD MINU POSTITUSI MUUDAVAD,
                    KUI POSTITUS EI SOBI SIIS PALUKS SEE KUSTUTADA !

                    Comment


                      #11
                      Vs: DS18S20 1/16 kraadi assembler kood PIC -ile

                      See 22 liitmine 0,1 kraadi täpsusele ümardamineks ei kipu seal nulli piirkonnas kah päris hästi töötama - peab midagi muud välja mõtlema.
                      Vähemalt tabelarvutus programmis modelleerimine viitab sellele.
                      Muidu töötab hästi, aga 0 kraadi juures tekkivad anomaaliad ... &¤@% !!!
                      MINULE EI MEELDI KUI MÕNINGAD ISIKUD MINU POSTITUSI MUUDAVAD,
                      KUI POSTITUS EI SOBI SIIS PALUKS SEE KUSTUTADA !

                      Comment


                        #12
                        Vs: DS18S20 1/16 kraadi assembler kood PIC -ile

                        jh anomaaliad sest lahutamisel pole prosel aimu et see negatiivne arv. Seega 8 bitti arvu puhul 4-60=200. 16 bitti arvu puhul aga = 65480. Kui number converteeritakse stringiks ja keegi ei viitinud ekstra 2 kuud asmi tõmmelda et sinna veakontroll panna siis ongi ekraanil läbu. Jh google translaator.... Alustama enne C-d vms peaks hakkame võõrkeeleõppest. Siis tundub see C ka palju lihtsam.
                        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


                          #13
                          Vs: DS18S20 1/16 kraadi assembler kood PIC -ile

                          Ilmselt tuleb kõigepealt liita 256 (juhul kui on positiivne arv) ja arvutustes kasutada 16 bittiseid pesasid, (kohati isegi rohkem) ja lõpus selle järgi vaadata, kas on positiivne või negatiivne.

                          Nuh eks see google translaator olnud rohkem kirillitsast pääsemiseks - ei taha hakkata selle ühe programmi pärast arvutit vene-keelseks väänama.
                          Muidu näitavad teised programmid (peale FireFoxi) kirillitsa asemel mingit läbu.
                          Kui mingi koha kommentaari vaja täpsemalt vaadata siis vaatan venekeelse variandi pealt järgi.
                          Väga jaburad tõlked sai kohe ära parandatud.
                          MINULE EI MEELDI KUI MÕNINGAD ISIKUD MINU POSTITUSI MUUDAVAD,
                          KUI POSTITUS EI SOBI SIIS PALUKS SEE KUSTUTADA !

                          Comment


                            #14
                            Vs: DS18S20 1/16 kraadi assembler kood PIC -ile

                            See 256 liitmine ikka ei toimi, tuleb lihtsalt vaadata, kas jagamise jääk on üle või alla 20 ja kui on üle siis 1 juurde liita.
                            Samuti tuleks lahutamisel kontrollida, kas Carry muutus (temp läks negatiivseks) ja kui muutus siis ka MS baiti muuta.
                            MINULE EI MEELDI KUI MÕNINGAD ISIKUD MINU POSTITUSI MUUDAVAD,
                            KUI POSTITUS EI SOBI SIIS PALUKS SEE KUSTUTADA !

                            Comment


                              #15
                              Vs: DS18S20 1/16 kraadi assembler kood PIC -ile

                              Tiba vana teema küll

                              Aga kas DS18S20 andurist on üldse võimalik täpsemat kui 0,5 välja lugeda?

                              DS18S20: The temperature sensor
                              output has 9-bit resolution, which corresponds to 0.5°C steps.

                              DS18B20: The resolution of the
                              temperature sensor is user-configurable to 9, 10, 11, or 12 bits, corresponding to increments of 0.5C,
                              0.25C, 0.125C, and 0.0625C, respectively.
                              Nöör ümber ja ... igatahes... põhja!

                              Comment

                              Working...
                              X