Teade

Collapse

Foorumi reeglid.

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

Sagedusloendurit ehitan ja...

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

    Sagedusloendurit ehitan ja...

    Tere!

    Ehitan praegu sagedusloendurit.
    Praegu läheb signaal 74HC590 CMOS 8bit loendurisse, sealt 2313 AVR'i ja siis üle rs232 arvutisse. AVRi soft vajaks veidi ümber tegemist ja arvuti poolne soft lõpetamist, aga muidu asi enamvähem töötab. Kusjuures loendurit kasutan ma 256 jagajana(loen 8biti langemist AVRga) ja siis võtan veel hiljem kõigi kaheksa biti näidu.

    Jama veel selles et kõik signaalid ei ole ju piisava amplituudiga, et loendur seda implusina võtaks - vaja oleks mingit võimendit, aga millist? Esimene ja kõige lihtsam asi mis pähe tuleb, oleks mingi laiaribaline opakas ja kõik. Et siis põmst kondekas(et alalisvool läbi ei tuleks) - opakas kõige lihtlabasema võimenduse konfiguratsioonis(vahet ei tohiks olla, mis faasis või suunas signaal välja tuleb) -> kondekas -> loendur?

    Tore oleks saada mingit 10 või isegi 100 kordne jagaja ka, et saaks lugeda ka kõrgemaid sagedusi. 74HC590 kannatab ainult kuni 62Mhz. Siitmaalt ma pole aga ühtegi seda masti jagajat müügil näinud. Veel ideid?

    #2
    74hc on aeglasema otsa kivi, vaata 74AC, 74F seeriaid. Kui tahad roppkiiret siis ESL, aga need on väga kallid kivid, kasutamine on ka raske - pead tundma kõrgsagedusplaatide nippe.

    Sagedusmuunduri sisendisse pannakse tavaliselt komparaator, läve muudad ise potekast. Komparaatori valik sõltub sagedusest - kõrgemal sagedusel peaks olema 50oomise sisendiga vms.

    Comment


      #3
      Komparaatori idee on küll väga hea. Tänud! 50 Oomi sisendtakistus ja hästi suur sisendtakistus mõlemad peaks ehk olema.
      Andmelehest võib selgelt välja lugeda, et 74HC590 kannatab kuni 62Mhz. Tean küll, et HC-seeria ei peaks kannatama nii palju, aga see kivi kannatab ja ma pole esimene kes selle kivi baasil asja ehitab.

      Comment


        #4
        http://www.sprut.de/electronic/pic/projekt...equenz/freq.htm
        Esimene mis meenus, selle lõpus vist oli midagi sobivat.
        Vene lehtedel oli ka midagi huvitavat, hiljem ehk otsin ja panen siia välja.
        Elektroonika töötab suitsu baasil.
        Tähendab - igasse detaili on doseeritud täpne kogus suitsu.
        Kui mõnest suits välja lasta, siis värk enam ei käi.

        Comment


          #5
          Sobiva komparaatori leidmisega on raskusi. Proovisin KA319(delay 60ns typ.). See siiski ei kannata nii palju kui vaja. NE 529 kiirus(10ns typ.) oleks ehk piisav, aga see vajab erilist toidet(vähemalt -6V). On ehk rohkem ideid? Äkki peab ikka taganema komparaatorist?

          Comment


            #6
            Nii kõrgetel sagedustel pole näinudki komparaatoritega tehtavat, lihtsalt võimendatakse piisava nivooni, vajadusel veel enne seda dioodpiirik. Netist ei leidnud, aga varasemates "Paдиo" ajakirjades oli selliseid skeeme.
            Elektroonika töötab suitsu baasil.
            Tähendab - igasse detaili on doseeritud täpne kogus suitsu.
            Kui mõnest suits välja lasta, siis värk enam ei käi.

            Comment


              #7
              MAX961 on sobiv

              Comment


                #8
                MAX961 200 eeki :huh:
                Eks ma praegu sihi veel mingit tavalist võimendusastet.

                Comment


                  #9
                  Ilma komparaatorita on väga ebastabiilne. Mata maha idee teha paarisajamegast loendurit ja tee kõigepealt nt. 50MHz. -6 volti võid teha 555 skeemiga, kui voolutarve väike ja samas ega nüüd lisatrafo / lisakeerud trafole sind ka ei tapa, kes muna tahab süüa peab koore katki tegema (ja lusika ja soolatopsi ka välja otsima)

                  Üks variant siiski veel on - kasuta kiiret 6bitist AD muundurit. Aga see võib sama kalliks minna, pealegi nõuab veidi rohkem oskusi.

                  Ja veel: 200 krooni komparaatori eest ei ole kahjuks liiga kallis, korralik sisendastme opakas (nt. AMP01) maksab 500,-

                  Comment


                    #10
                    Sain ühe kiire komparaatori tellitud ja peaks nüüd saama korraliku sisendi tehtud.

                    Et sagedusloenduri potensiaali veelgi suurendada, kasutan nüüd 74F163 4bitist loendurit. Selle andmeleht on siin : http://www.fairchildsemi.com/ds/74/74F163A.pdf

                    Mikrokontrolleriks AVR AT90S2313.
                    Reset pin SR on koguaeg 1.
                    D0-D3 on kogu aeg 0.
                    PE pin on ühendatud AVR PD0 pinile. Sellega teostan resetti, PE0 pannes laetakse D0-D3'l olevad 0d loendurisse.
                    Q0-Q3 on ühendatud PD2, PD3, PD5, PD4. PD4 on viimane selle pärast et see läheb timer/counter0 pini AVRl. Timer/counter0 loeb "langevat äärt", mis peaks põhimõtteliselt olema siis sisendsignaali sagedus jagatud 16ga.
                    CET ja CEP on ühendatud PD6. Sellega luban/keelan loendamise.

                    Taimeriks kasutan timer/counter1 konfigureeritud lugema protsessori CK/256. Ootamise aeg on algselt 10000. Kui timer/counter0 ületäitub, võetakse 10 korda väiksem aeg. Loendamise tulemused saadetakse pärast üle RS232.

                    Kood:
                    #include <io.h>
                    #include <sig-avr.h>
                    
                    unsigned char T0_OF, T1_OF;
                    	
                    SIGNAL(SIG_OVERFLOW0) {
                    	T0_OF = 1;
                    }
                    
                    SIGNAL(SIG_OVERFLOW1) {
                    	// Dont reset, but disable counting
                    	outp((1<<PD0)|(0<<PD6), PORTD);
                    	T1_OF = 1;
                    }
                    
                    void main(void) {
                    	unsigned int wait_cycl = 10000;
                    	
                    	// PD0 is output to PE and PD6 output to CET&CEP
                    	outp((1<<PD0)|(1<<PD6), DDRD);	
                    	
                    	// Enable UART transmitting
                    	outp((1<<TXEN), UCR);
                    	
                    	// UART data rate 64
                    	outp(64, UBRR);
                    	
                    	// Global interrupt enable
                    	outp((1<<7), SREG);
                    	
                    	// Counter 0 & 1 OF interrupt enable.
                    	outp((1<<TOIE1)|(1<<TOIE0), TIMSK);
                    
                    	while(1) {
                      // Disable count and load 0
                      outp((0<<PD0)|(0<<PD6), PORTD);
                        	
                      T0_OF = 0;
                      T1_OF = 0;
                      
                      outp(0, TCNT0);
                      outp(0, TCCR0);
                      	
                      unsigned char waitL = 0, waitH = 0;
                      waitL = (0xFFFF - wait_cycl)&0xFF;
                      waitH = ((0xFFFF - wait_cycl)>>8)&0xFF;
                      
                      outp(waitL, TCNT1L);
                      outp(waitH, TCNT1H);
                      
                      // Disable PE and enable counting
                      outp((1<<PD0)|(1<<PD6), PORTD);
                      // Start timer1
                      outp((1<<CS12), TCCR1B);
                      // Start timer0
                      outp((1<<CS02)|(1<<CS01), TCCR0);
                      
                      while(T1_OF != 0) {}
                      
                      if(T0_OF == 1) {
                      	if(wait_cycl > 1) {
                        wait_cycl /= 10;
                      	} else {
                        wait_cycl = 10000;
                      	}
                      	continue;
                      }
                      
                      outp(0xAA, UDR);
                      loop_until_bit_is_set(USR, UDRE);
                      
                      outp((wait_cycl>>8)&0xFF, UDR);
                      loop_until_bit_is_set(USR, UDRE);
                      
                      outp(wait_cycl&0xFF, UDR);
                      loop_until_bit_is_set(USR, UDRE);
                      
                      outp(inp(TCNT0), UDR);
                      loop_until_bit_is_set(USR, UDRE);
                      
                      outp(inp(PIND), UDR);
                      loop_until_bit_is_set(USR, UDRE);
                      
                      wait_cycl = 10000;  
                    	}
                    	
                    }
                    Ajakriitilised kohad tuleb küll asmis veel kirjutada, et loendamise alustamine ja peatamine käiks võimalikult ruttu.

                    Loenduri väljundi bitid sorteerin ümber arvutis hiljem.

                    Loenduri kivi sai 1MHz signaali. Millegi pärast õnnestus programmil see ära loendada 10000 timer/counter1 tsükli juures, mida ei tohiks juhtuda. Algselt oleks ootamine siis (1/10 000 000)*256*10 000 = 0.256 sek pikk(prose jookseb kiirusel 10MHz) ja selle aja jooksul 1MHz/16 signaal peaks 8bitise loenduri ära täitma. Seda ei juhtu ja loomulikult on mõõdetud sagedus vale.
                    Siiani pole mõistnud milles asi.
                    Kui kellelgi pea haarab mu seletatut ruttu, võiks visata pilgu peale, ehk märkab milles viga.

                    Comment


                      #11
                      Nii palju teada saanud, et timer/counter0 overflow interrupti ei kutsuta kunagi. Lasin 0.256s tsükli jooksul 1MHz "square-wave" signaali talle ja ikka ei mingit overflowd. Kõik registrid ja asjad on ju krt õigesti seatud minu arust.

                      Comment


                        #12
                        Ma ei leia su koodist käsku
                        Kood:
                        sei();
                        !?

                        Comment


                          #13
                          Üks niisuguse 1:10 jaguri skeem asub ajkirjas Radio nr. 10 1980 lk.61. Lubatakse, et töötab kuni 200 mHz-ni. Sisendtakistus 75 oomi. Tundlikkus 20 mV (kuni 1 mHz) ja 100 mV (kuni 200 mHz). Mikroskeemid: K500LP116 (1tk), K500TM131 (2tk). Asendusi ei oska praegu öelda, kuna raamatut pole käepärast. Kunagi oli plaanis ehitada, kuid jäi sinnapaika, nii et praktiliste tulemuste kohta ei oska midagi öelda.

                          Comment


                            #14
                            K500-ga olen teinud, umbes 200MHz (muidugi mitte mHz - millihertsi) oli piirsagedus tõesti. Teatud tingimustel võiks sobida näiteks vanadest NMT telefonidest saadaolevad sagedussüntesaatorite eeljagurid, neid on mitmesuguseid, näiteks võiks nimetada MB501L, millel sagedusala 10...1100MHz, jagamistegur 64, 65, 128 või 129 valitav.
                            Uuematel sagedussüntesaatorite mikroskeemidel, nagu näiteks MB1501, on taoline jagur ka sisemuses ja eraldi kasutada ei anna.
                            Elektroonika töötab suitsu baasil.
                            Tähendab - igasse detaili on doseeritud täpne kogus suitsu.
                            Kui mõnest suits välja lasta, siis värk enam ei käi.

                            Comment


                              #15
                              sei(); asemel olin ma ise bitti sättides interrupti võimaldanud.
                              Millegi pärast oli sei()(või ASMis SEI) funktsiooni olemasolu kahe silma vahele jäänud

                              Comment

                              Working...
                              X