Teade

Collapse

Foorumi reeglid.

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

voolu stabiliseerimine

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

    #16
    Skeemis võib ka muidugi takisteid mõõta, kui tulemust vaid suurusjärgu täpsusega teada tahad. Õigem on siiski takistuse mõõtmise ajaks takisti ühest otsast lahti ühendada.

    TKY anduri pindmontaazhi versioonil on ka kolmas jalg, instruktsioon ütleb, et see tuleb isoleerida.

    Kui andur on 2kOhm asemel 1.3kOhm, siis ilmselgelt on häda anduris. Minu arust pole saunas ka NTC-l häda midagi, anduri kalibreerimise tabel mahub ilusasti programmimällu (PROGMEM, pgm_read_byte jms.), ei pea ka iga kraadi kohta seda tegema.

    Pingejagur vähendab toitepinget R2/(R1+R2) korda, pinget mõõdad R2 pealt (ADC või tester). Kas saad oodatud pinged?

    Katsetamise järgud, temperatuurid näiteks 0 (jää), toatemperatuur ja 100 (keev vesi):
    1) testriga takistust mõõtes muutub anduri takistus etteantud piirides
    2) andur skeemis, pinge anduril ettenähtud piirides
    3) uC loeb ADC abil ettenähtud takistuse.
    If you think education is expensive, try ignorance.

    Comment


      #17
      miski jupp on fataalselt ära pööranud, prose ehk. töenäoselt staatiline elekter. ehkki kunagi maadlesin sarnase probleemiga mega128-ga, olin valmis juba maha jootma, kui selgus et JTAGi bitt oli pysti jäänud ja selle väljundi nivoo oligi imelik ADC seisukohast. aga tiny-l ei ole JTAGi.
      vöid ju koodi yles panna, ehk viicib vaadata.

      Comment


        #18
        järgisin teie sooje soovitusi ja saingi asja tööle(praeguseks ptui-ptui-ptui) suured tänud.

        nüüd aga pisuke probleem:
        vaja selle adc väärtusega läbi viija järgmine tehe:
        13,3404*(0,387195*sqrt(-((28000*a)/(1023*((5*a)/1023)-5))-345,788)-13,874)
        kus a = adc väärtus ja sqrt = ruutjuur.

        kina tegelen tinyga, siis sinna kogu see math.h ära ei mahu. kas oloeks kuidagi lihtsamat viisi võimalik teha seda asja? praegu läheb mälu 1126 byte peale (1024 on max võimalik). on kellelgi mõni mõte?

        Comment


          #19
          Milles siis viga oli (alati kasulik öelda, kui kellegi abiga oled probleemi ära lahendanud)?

          Kui ruumi ja ajaga on mikrokontrolleris kitsas, siis ujukomaarvutusi teha ei tasu - nimelt puudub nendes pisikestes käbides komakohtadega arvudega rehkendamist kiirendav ränitükk, softiemulatsioon võtab ruumi ja tehted ise võtavad aega.

          Asenda kümnendmurrud tavaliste murdudega (kas või primitiivselt: 0.35 = 35/100 = 7/20) ja tee tehted nendega. Lõpus teed ühe jäägiga jagamise ja kõik.

          Jälgi, et tehete käigus (vähemalt muutuja "a" miinimum ja maksimumväärtuste käigus) ei läheks täisarvmuutuja lõhki. unsigned char = 0...255, unsigned short=0..65535, unsigned long=0..2^32-1.

          sqrt puhul vaata järgmise lehekülje lõppu: http://www.cs.sunysb.edu/~skiena/214/lectu...2/midterm2.html
          If you think education is expensive, try ignorance.

          Comment


            #20
            Taanda see konstandisoga välja. Ja korruta nt. 256ga. Tee tehted ära ja viska alumine bait minema.

            Comment


              #21
              viga täpselt ei teagi, mis viga oli. arvatavasti hardware viga. puhastasin kõik ära, ühendasin juhtmed uuesti jne ja pistsin voolu taha, ja enn-bäe imet, töötas. nüüd tuleb mõelda veel see ruutjuure värk. tegelikult on kivi peamiselt täis stdio.h'd (võtab mingi 50% ära). kas on äkki mingi muu hea moodus peale sprintf käsu, et saada nt. ("temp %d C",temper) kuhugile muusse variabeli (char'i nt), et see siis LCD'sse kirjutada. siis saaks sellele matemaatika osale väheke ruumi juurde. (sprintf on ainuke asi, mida ma stdio.h'st kasutan).

              PS compiler on CodevisionAVR

              Comment


                #22
                jagatakse söltuvusköverik juppideks nii et viga rahuldab. söltuvusköveriku saad aga PC peal valmis genereerida. enamasti peaks ka 3 punktilisest lineariseerimisest aitama -nende PTCde puhul söltub enamus sellest mis on min ja max temperatuur . 3 p puhul ( A,B,C) valid A= Tmin, C= Tmax, B = Tx nii et tömmatud sirged A-B ja B-C ei erineks köverikust yle max lubatud vea. kui 3 P viga > vastuvöetava , proovi 4 P jne.
                Teine variant: reaalses temp vahemikus jääb ADC lugem kuhugi 300..1000 yhikut vahemikku, st 700 wordi = 1400 baiti. tee iga 4 punkti tagant lineariseerimine, saad koos mathiga ca 500 baidiga hakkama.
                umbes nii:

                int leia_temp ( void)
                {int lugem = ADC();
                if ( lugem >= 300 && lugem <= 1000 )
                {
                lugem -=300;
                return (lookup[ lugem/4] + (lugem%4 * (lookup[lugem/4 + 1] - lookup[ lugem/4 ]))/4); }
                else return OUT_OFF_RANGE;
                }

                edit 21:09 - ehk sai nyyd öige.

                tabeli lookup arvutad jällegi arvutis.
                pea meeles et /4 on >>2 , möned kompilaatorid ei oska optimiseerida;
                ja %4 on & 3 .
                NB algpunkt ( 300 antud juhul) peab 4-ga jaguv arv olema.
                tegelt vöid analoogiliselt ka 8 jne punktiga lineariseerida.

                Comment


                  #23
                  jätsin selle juutruuje nii nagu ta on ja suundusin sprintf&#39;i kallale. uurides vähe ringi leidsin kaäasu itoa(x,y); sain sellega programmi niivõrd väikeseks, et see mahtus ilusti ära.

                  tundub et asi töötab siiamaani stabiilselt ja näitab õiget tulemust (22 kraadi). eks nädalavahetusel saab seda ka äärmuslikes oludes katsetada (ma loodan). õuetemperatuuri näitas ka suht täpselt nii päikesega kui ilma. seega tundub, et asi sai lõpuks valmis. kui softi silutud saab, siis kannan ka siia ette (kui selleks soovi on muidugi).

                  Comment

                  Working...
                  X