Rakensin taajuuslaskimen pic16F877A lla. Ongelma ilmenee kun syötän sisään esim 32MHZ oskilaattorista, ja yritän säätää säätötrimmerillä näyttöön tuon taajuuden. Säädettäessä lähelle ko. taajuutta, näytössä taajuus hyppää noin 200-500hz yli tai ali ko. taajuuden?
Olen vaihtanut virtalähdettä ja yrittänyt myös paristolla, ei muutosta. Vaihdoin myös kontrollerin kiteen, mutta ei auttanut. Nyt en tiedä onko vika kytkennässä vai picin ohjelmassa?
Kytkentä löytyy: www.best-microcontroller-projects.com ja siellä 7-segments led versio. Jos joku tietäis mistä ongelma voisi johtua, apu olisi paikallaan.
Olen vaihtanut virtalähdettä ja yrittänyt myös paristolla, ei muutosta. Vaihdoin myös kontrollerin kiteen, mutta ei auttanut. Nyt en tiedä onko vika kytkennässä vai picin ohjelmassa?
Kytkentä löytyy: www.best-microcontroller-projects.com ja siellä 7-segments led versio. Jos joku tietäis mistä ongelma voisi johtua, apu olisi paikallaan.
Vastaukset 6
Vanhimmat
Katsot miten se on toteutettu se http://www.microcontrollerboard.com/images/TIMER0_BLOCK_DIAGRAM.jpg - eli 1/256?
En osaa lukea lähdekoodia, on kirjoitettu C llä. Tässä kuitenkin lisätietoa laskimesta:
This PIC frequency counter circuit uses a multiplexed seven segment display and uses timer 1 to count edges of the input signal.
It uses the simpler method of direct frequency measurement which is easy to do but means that the number of digits displayed depends on the input frequency.
This frequency counter circuit uses TMR1 in 16 bit counter mode to count the input signal edges. Counter overflows are accumulated to give the total count in multiples of 65536. Adding the current value of the counter at the end gives the total count.
http://www.techsoft.fi/AjastimetPIC16F887.htm
Miten ohjelmassa on esijakajat asetettu? Heitto johtuu siitä?
Ok, tutkin tuon antamasi linkin kun ehdin ja yritän päästä perille esijakajien asetuksista, kiitos!
Katsoin tuon kytkennän, eikä tuolla periaatteella pysty tekemään parempaa/tarkempaa. Ongelma on siinä, että tuossa kytkennässä käytetään PIC:in sisäisiä jakajia laskemaan suoraan mitattavaa taajuutta. Koska PIC:in laskurit eivät pyöri noin lujaa (32 MHz), joudutaan käyttämään esijakajia ja kertomaan tulosta. Koska näytöllä oleva tulos on siten kertolaskun tulos, niin totta kai se hyppää satoja herzejä kerrallaan.
Toisin sanoen kytkennän resoluutio on huono, vaikka se näyttääkin "herzilleen". Siksi toiseksi, koska tuossa ei ole tarkkaa referenssioskillaattoria vaan toimitaan PIC:in oman kiteen varassa, ei olisi mitään hyötyäkään mitata herzilleen. PIC:in oma kello on joka tapauksessa pielessä vähintään kymmeniä...satoja Hz.
Oikean taajuuslaskimen rakentaminen on huomattavasti monimutkaisempaa. Tarvitaan jokin nopeampi laskijapiiri sekä gate, jota ajastetaan tarkalleen tietyin välein. Resoluutiota saadaan paremmaksi lisäämällä vaihekohinaa gating-signaaiin ja sen jälkeen keskiarvostamalla tulokset.
Lisäksi tarvitse OCXO-tyyppisen (uunioskillaattorin) referenssiksi tai sitten ulkoinen rubidium/cesium tai GPS-referenssi. Vasta sen jälkeen voit saada tuloksia 1 Hz tai 0.1 Hz tarkkuudella.
Täsä syy, miksi kunnollinen taajuuslaskin maksaa PALJON.
Kiitos vastauksesta. Olin itsekin päätynyt tuohon, että ongelma on ohjelma/periaate puolella.