Merač frekvencie pomocou Nokia5110 a ATmega328P

Môj výrobok - MINI

Moderátori: psichac, Moderátori

Používateľov profilový obrázok
roboulbricht
Stály člen
Stály člen
Príspevky: 156
Dátum registrácie: 07 Jan 2015, 12:01
Bydlisko: Banská Bystrica
Vek: 54
Kontaktovať používateľa:

Merač frekvencie pomocou Nokia5110 a ATmega328P

Príspevok od používateľa roboulbricht » 03 Feb 2015, 11:40

Pomocou Arduina možno bez problémov merať pomerne presne frekvencie obdĺžnikových signálov. Dá sa merať od 0 Hz do 8 MHz. Princíp je jednoduchý. Timer je nastavený tak, aby ako zdroj impulzov používal jeden digitálny pin. Timer nerobí nič, iba postupne ráta pretečenia počítadla za určitý časový interval. A až keď nastane pretečenie, vyvolá prerušenie, kde sa v premennej postupne rátajú jednotlivé pretečenia. Výsledná frekvencia je počet pretečení x maximálna hodnota počítadla + to čo ostalo v počítadle. Preto je schopný pomerne presne merať až do polovice taktovacej frekvencie.

Na stránke https://sites.google.com/site/arduinosl ... frekvencie je popis, ako takýto merač postaviť. Na schéme som to zabudol nakresliť, ale je tam aj ISP konektor, do ktorého sa zapája USBasp programátor. V takejto podobe je vývoj pomocou IDE Arduina pohodlný a dá sa to programovať a upravovať už v zapojenej podobe.

Prvá verzia bola len prevzatý program zo stránky Nicka Gammona, ktorý vypisoval frekvenciu na sériovom porte. Druhá verzia bola postavená už podľa schémy, čisto z Arduina UNO, level shiftera a displeja Nokia 5110. Tam bol aj otestovaný celý program. Tretia verzia je popisovaná v článku. Je to v podstate len ATmega328P na veroboarde, napájaná na 5 V, ktorá pomocou level shiftera zobrazuje údaje na displeji, ktorý potrebuje 3,3 V.

Linky:
Prílohy
Schéma
Schéma
0

Používateľov profilový obrázok
Drakoush
Ultimate člen
Ultimate člen
Príspevky: 10964
Dátum registrácie: 07 Feb 2012, 23:22
Bydlisko: Nitra
Vek: 28
Kontaktovať používateľa:

Re: Merač frekvencie pomocou Nokia5110 a ATmega328P

Príspevok od používateľa Drakoush » 04 Feb 2015, 11:17

Prečistil som vlákno a poprosím, aby ste konštruktívnu kritiku písali k veci. To, že niekto zvolil arduino je jeho osobná vec, hoci niekomu sa to nemusí páčiť. Výrobok je aj tak už na svete a nikto s tým nič nespraví. V komentároch k môjmu výrobku sa venujte hlavne funkčnej stránke. Môže to byť dobré aj s arduinom, ale ak niekto nevie, môže to posrať aj s atmegou, to záleží na šikovnosti jedinca.

Ďakujem za pochopenie.
0
Odkupujem zaujímavé meracie prístroje. Ponuky mailom alebo SS.

Používateľov profilový obrázok
BFX
Ultimate člen
Ultimate člen
Príspevky: 2506
Dátum registrácie: 04 Sep 2013, 19:41
Bydlisko: Košice
Vek: 50

Re: Merač frekvencie pomocou Nokia5110 a ATmega328P

Príspevok od používateľa BFX » 04 Feb 2015, 19:36

Drakoush: :thumbup:
0
“Nice looking” circuit construction doesn't always equate to good circuit performance.
http://www.arrl.org/files/file/Product% ... pter_1.pdf
Na predaj: p-bfx-predava-kto-zavaha-prerobi-t41148.html

Hinsi
Pokročilý člen
Pokročilý člen
Príspevky: 510
Dátum registrácie: 15 Sep 2014, 15:56

Re: Merač frekvencie pomocou Nokia5110 a ATmega328P

Príspevok od používateľa Hinsi » 04 Feb 2015, 19:40

Milý drakouš, prečo mažeš moju konsštruktívnu kritiku? Tenhle váš dvojí metr mě pěkně osramuje!



ROBOULBRICHT: DEJ SEM TEN ŘÁDEK KÓDU, CO NÁSOBÍ 65535!
0

Používateľov profilový obrázok
roboulbricht
Stály člen
Stály člen
Príspevky: 156
Dátum registrácie: 07 Jan 2015, 12:01
Bydlisko: Banská Bystrica
Vek: 54
Kontaktovať používateľa:

Re: Merač frekvencie pomocou Nokia5110 a ATmega328P

Príspevok od používateľa roboulbricht » 05 Feb 2015, 16:06

Kód je v poriadku, nemám potuchy, čo sa ti na ňom nepáči. Skrátil som to, aby tam neboli riadky, ktoré komplikujú pochopenie toho, čo sa tam deje.

Kód: Vybrať všetko

volatile unsigned long timerCounts;

ISR (TIMER2_COMPA_vect) 
  {
  // grab counter value before it changes any more
  unsigned int timer1CounterValue;
  timer1CounterValue = TCNT1;  // see datasheet, page 117 (accessing 16-bit registers)
  unsigned long overflowCopy = overflowCount;
    
  // calculate total count
  timerCounts = (overflowCopy << 16) + timer1CounterValue;  // each overflow is 65536 more
  counterReady = true;              // set global flag for end count period
  }  // end of TIMER2_COMPA_vect
Na tvojom mieste by som sa skôr vŕtal v kóde knižnice pre Nokiu. Tam je viac vecí na riešenie. Napriklad tam nie je dostatočne dobre parametrická inicializácia displeja, takže by niekomu mohli až príliš stmavnúť tekuté kryštály. Alebo aj ten kód na odosielanie nie je úplne dotiahnutý. Ale väčšine ľudí by to aj v takej podobe mohlo stačiť, však časom sa tam objaví trošku optimálnejśí kód.
0

Hinsi
Pokročilý člen
Pokročilý člen
Príspevky: 510
Dátum registrácie: 15 Sep 2014, 15:56

Re: Merač frekvencie pomocou Nokia5110 a ATmega328P

Príspevok od používateľa Hinsi » 05 Feb 2015, 16:39

No a kterej řádek v tom kódu násobí 65535, můžeš to zvýraznit laskavě?
0

Používateľov profilový obrázok
roboulbricht
Stály člen
Stály člen
Príspevky: 156
Dátum registrácie: 07 Jan 2015, 12:01
Bydlisko: Banská Bystrica
Vek: 54
Kontaktovať používateľa:

Re: Merač frekvencie pomocou Nokia5110 a ATmega328P

Príspevok od používateľa roboulbricht » 05 Feb 2015, 17:44

Takže Hinsi asi nemá námietky voči kódu, ale namieta vetu "Výsledná frekvencia je počet pretečení x maximálna hodnota počítadla + to čo ostalo v počítadle." Navrhuje ju nahradiť vetou "Výsledná frekvencia je počet pretečení x (maximálna hodnota počítadla+1) + to čo ostalo v počítadle.". Pretože prvá veta je mierne nepresná. Samotný kód je ale aj podľa neho v poriadku.

A keďže asi dosť ľudí vo fóre nebude vedieť prečo, tak to počítadlo, čo sa v kóde používa je 16bitové. Keďže meriame aj väčšie frekvencie a také veľké počítadlo v mikrokontroléri nie je, musíme si spočítavať počet tých pretečení 16bitového počítadla. Výsledok potom dostať do 32bitového čísla. V c++ zápis X<<16 a X*65536 urobí rovnakú činnosť, aj keď to prvé používajú machri, pretože to prvé bolo v časoch, keď boli ešte počítače málo výkonné a kompilátory neboli naučené, omnoho rýchlejšie ako to druhé. Ale funguje to iba na násobenie dvomi. Všetky ostatné násobenia museli robiť aj machri druhým spôsobom.

Dnes je to už ale asi jedno, pretože väčšina kompilátorov túto optimalizáciu pozná a použije ju.
0

Hinsi
Pokročilý člen
Pokročilý člen
Príspevky: 510
Dátum registrácie: 15 Sep 2014, 15:56

Re: Merač frekvencie pomocou Nokia5110 a ATmega328P

Príspevok od používateľa Hinsi » 05 Feb 2015, 18:10

Průměrně inteligentního by stačilo upozornit jednou. Jenže ne, ty než bys přiznal, že neumíš ani z kódu opsat co to dělá mě tady budeš poučovat o optimalizacích násobení?

x<<16 nenásobí "maximální hodnotou počítadla". Maximální hodnota počítadla je 65535, ale ty to potřebuješ vynásobit 65536 a to je to, co ten kód dělá.

Si to na tom svém webu laskavě oprav a své drzé poznámky o vzdělání a zkušenostech lidí které neznáš si nech stranou.

Obrázok


Mimochodem, když máš tolik chytrostí poučovat tady o optimalizacích násobení, tak se divím, že si nezoptimaluješ tenhle řádek.

Kód: Vybrať všetko

float frq = (timerCounts *  1000.0) / timerPeriod;
0

Napísať odpoveď
  • Podobné témy
    Odpovedí
    Zobrazení
    Posledný príspevok