Arduino vs. poseban Atmega kontroler

igrat cijeli dan :)

Reply to
Mario Matovina
Loading thread data ...

Koju komunikaciju koristi barometar? I2C?

-- Let There Be Light Custom LED driveri prema specifikacijama

formatting link

Chupo

Reply to
Chupo

Da. Usput, kolika je brzina samplovanja analognog (ili digitalnog) ulaza na ard

Reply to
Mario Matovina

u EEPROM i par if petlji.

Reply to
Mario Matovina

Preko zvucne si komunicirao s I2C senzorom?? Ili spominjes neki drugi sklop gdje si zvucnu koristio ko A/D pretvarac?

Frekvencija sample-iranja se odnosi na broj kompletnih uzoraka u sekundi a ti spominjes trajanje 'jedinice' - jednog bita u paketu podataka koji su rezultat jednog sampleiranja.

Maximalna frekvencija sample-iranja pise u datasheet-u svakog mikrokontrolera - za ATMega8 je ona npr. 15 kSPS tj. 15 hiljada sampleova u sekundi (kilo samples per second).

Medjutim tebe ne zanima podatak o maximalnoj frekvenciji sample-iranja nego te zanima maximalni bitrate koji se jos moze koristiti u I2C komunikaciji.

Na ovom linku:

formatting link

ti je rjesenje za Arduino.

Ovdje:

formatting link

mozes vidjeti da maximalni I2C bitrate ovisi o jos nekim stvarima ali da se koristenjem bit-banging rutine pisane u assembleru mogu postici jos duplo vece brzine nego koristenjem ugradjenom I2C hardware-a.

Tebi znaci maximalna frekvencija sample-iranja ne znaci nista jer je meteoroloskoj stanici dosta da ocita jedan podatak svakih nekoliko sekunda (li se mozda varam?).

Sta tocno podrazumijevas pod: 'Vec sad vidim da mi arduino propusta podatke'? Zelis reci da I2C komunikacija uopce ne radi?

--
Let There Be Light 
Custom LED driveri prema specifikacijama 
http://tinyurl.com/customleddriver 

Chupo
Reply to
Chupo

Uf vidim da sam sve zbrljao zajedno u hrpu nerazumljivih gluposti.

aja radi. Spojio sam ju kablom u mikrofon na kompjuteru i program na kompju

  1. Sad bi htio maknuti to da radi bez kompjutera, na atmega mikroprocesoru. I sad nailazim na problem da jedinice i nule jednostavno prebrzo idu (ili

d 52 bita.

Reply to
Mario Matovina

A sta generira taj signal? U stanici je isto neki mikrokontroler. Imas source od tog programa?

Znaci ti si, da bi procitao informaciju koju meteoroloska stanica salje u digitalnom obliku, koristio mikrokontrolerovu A/D pretvorbu? To se ne radi tako nego se takvi podaci (koji su digitalni) citaju uzastopnim ocitavanjem stanja (high/low) i tu ne treba A/D pretvarac.

Kopiraj ovdje:

formatting link

dio programa pomocu kojega si pokusao ocitati informaciju koju salje meteoroloska stanica.

Kako je kodirana informacija u tih 52 bita? Tih 52 bita je definirano s bitrate-om i nakon detektiranja prve promjene (ili sekvence koja oznacava START) moras u pelji ocitavati stanje na ulazu u trenucima cim je moguce blize sredini svakog impulsa.

--
Let There Be Light 
Custom LED driveri prema specifikacijama 
http://tinyurl.com/customleddriver 

Chupo
Reply to
Chupo

ke.

radi preko kompjutera. Ovako izgleda jedan paket

formatting link

Reply to
Mario Matovina

Mislio sam da je mozda neki izgradjen uredjaj.

Cini se vrlo jednostavno (ako znas interpretirati podatke) - koliko vidim (s obzirom da kazes da su na pocetku 4 nule) su nule kodirane kao 'dugi low pa dugi high' a jedinice kao 'kratki low pa dugi high'. Nije to problem dekodirati, ne bi bio problem ni da je signal par 100 kHz.

Kazes da je trajanje kratkog impulsa unutar 'jedinice' 500 us? Znaci da bi onda trebalo moci detektirati pravokutni signal od samo 2 kHz a to nije problem. Ako koristis interni oscilator pa mikrokontroler stavis na samo 4 MHz onda se u vremenu od 500 us izvrsi 2000 instrukcija a to je daleko vise nego je dovoljno da vise puta u toku 'kratkog impulsa' ocitas stanje i obavis sve sta treba da bi detektirao trenutni bit kojeg stanica salje. A da ne govorim ako stavis kristal pa frekvenciju mikrokontrolera dignes na 12 ili 16 MHz.

--
Let There Be Light 
Custom LED driveri prema specifikacijama 
http://tinyurl.com/customleddriver 

Chupo
Reply to
Chupo

Evo Atmelov dokument gdje je opisano kako se to radi:

formatting link

a ovdje imas i primjer gotovog programa:

formatting link

--
Let There Be Light 
Custom LED driveri prema specifikacijama 
http://tinyurl.com/customleddriver 

Chupo
Reply to
Chupo
Reply to
Mario Matovina

Javi ako bude kakvih problema.

-- Let There Be Light Custom LED driveri prema specifikacijama

formatting link

Chupo

Reply to
Chupo

o.

Reply to
Mario Matovina

Hehe :-))

-- Let There Be Light Custom LED driveri prema specifikacijama

formatting link

Chupo

Reply to
Chupo

cap3 = ICR3L; cap3 |= (unsigned int)ICR3H

Reply to
Mario Matovina

Timer se vrti non-stop, nikada se ne zaustavlja niti se restira nego se vrti ukrug (0xffff + 0x0001 = 0x0000). U ovom dijelu programa kojeg si ovdje kopirao se nakon detekcije rastuceg brida sprema ranije procitana vrijednost timer-a i s TCCR3B &= ~BIT(6); se podesava da se sljedeci interrupt generira na padajucem bridu signala a taj se dogadjaj obradjuje u:

else //else falling edge { width = rising - prev3; period = cap3 - prev3; prev3 = cap3; TCCR3B |= BIT(6); //select rising edge trigger }

Tu se na osnovu prethodno spremljenog timestamp-a od rastuceg brida i prethodno spremljenog timestamp-a od padajuceg brida racuna sirina impulsa, a na osnovu vrijednosti procitane u ovom prolazu i ranije spremljenog timestamp-a se racuna ukupno trajanje periode pa se nakon toga s TCCR3B |= BIT(6); podesava da se sljedeci interrupt ponvo generira kod rastuceg brida.

Zbog cega nije potrebno resetirati il izaustavljati timer mozes najbolje shvatiti ako zamislis da ima samo 8 bitova pa da moze imati frijednosti samo od 0 do 255 (0x00 - 0xff). Recimo da se je capture interrupt generirao dok je timer imao vrijednosti 254 pa se je sljedeci put generirao nakon 4 ciklusa povecavanja timera. Nakon 4 ciklusa ce timer imati vrijednost 2 (254, 255, 0, 1, 2). Vrijeme izmedju ta dva dogadjaja s timestamp-ovima 254 i 002 ce se racunati kao:

002 - 254

To ce se izracunati tako da se broju 2 doda negativna vrijednst od broja 254 koja ce se dobiti s dvojnim komplementrom a to je:

254 = 11111110 cpl(254) = 00000001 dvojni_cpl(254) = 00000001 + 1 = 00000010 = 2

Prema tome, trajanje ce se izracunati kao 2 + 2 = 4 a to je upravo ispravna vrijednost. Na istom principu radi i izracunavanje trajanja kad je timer 16 bitni a ne 8 bitni registar. Jedino na sta treba obratiti paznju je da vrijeme izmedju 2 generirana interrupt-a mora biti manje od (2 na n-tu) ciklusa timera, gdje je n broj bitova za spremanje vrijednosti do koje broji taj timer. S obzirom da timer za input capture ima 16 bitova, znaci da se brzina brojenja mora podesiti tako da se za vrijeme jedne periode impulsa kojeg mjerimo, taj timer nikada ne poveca 65536 puta.

--
Let There Be Light 
Custom LED driveri prema specifikacijama 
http://tinyurl.com/customleddriver 

Chupo
Reply to
Chupo

Reply to
vaso

U ovom slucaju ne treba jer ocitavanje i spremanje podataka koje salje stanica nece zauzimati niti par postotaka processorskog vremena.

--
Let There Be Light 
Custom LED driveri prema specifikacijama 
http://tinyurl.com/customleddriver 

Chupo
Reply to
Chupo

Reply to
vaso

On Saturday, March 14, 2015 at 11:11:17 AM UTC+1, vaso wrote:

Reply to
Mario Matovina

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.