"Přeslechy" na Analogových vstupech

Raspberry, Arduino, Mini-PC a další

Moderátor: Moderátoři

Zpráva
Autor
Uživatelský avatar
Cowley
Příspěvky: 3557
Registrován: 04 úno 2005, 00:00

"Přeslechy" na Analogových vstupech

#1 Příspěvek od Cowley »

Ahoj,
zkoušel jsem si nastavení a monitorování Analogového vstupu.

Dal jsem si odporovou síť 5k6 se společným vstupem na +5V a rezistory do jednotlivých vstupů A0-A5 u Arduino UNO (originál).

Pak jsem vstupy různě propojoval s GND, nechal ve smyčce skenovat a vypisovat si hodnoty AnalogRead najednou ze všech vstupů.


Očekával jsem, že při uzemnění vždy jednoho vstupu bude ve výpise 5x hodnota 1023 od vstupů, které jsou přizvednuté rezistorem 5k6 a jen jedna hodnota blížící se 0 (ta kterou zrovna uzemňuju).

Ale ta 0 se objevila současně nahodile i na některých jiných, v tu chvíli bezpečně neuzemněných vstupech.

Jde o nějaký "přeslech" v rámci ATMEGA nebo jak si to mám vysvětlit.

Co vy na to, přátelé ?
Uživatelský avatar
lesana87
Příspěvky: 4395
Registrován: 20 zář 2014, 00:00

#2 Příspěvek od lesana87 »

Softwarová chyba.
Uživatelský avatar
Cowley
Příspěvky: 3557
Registrován: 04 úno 2005, 00:00

#3 Příspěvek od Cowley »

lesana87: hm... Taky si mohla napsat, že je chyba někde mezi monitorem a židlí :)
Naposledy upravil(a) Cowley dne 13 kvě 2015, 21:03, celkem upraveno 1 x.
Uživatelský avatar
Atlan
Příspěvky: 4514
Registrován: 10 kvě 2004, 00:00
Bydliště: Košice

#4 Příspěvek od Atlan »

Po prepnuti na iny analogovy vstup treba chvilku pockat az tak nacitat hodnotu, nebolo by odveci keby si si nastudoval,datasheet uP co je tam pouzity, otvori ti to oci
Uživatelský avatar
Cowley
Příspěvky: 3557
Registrován: 04 úno 2005, 00:00

#5 Příspěvek od Cowley »

Dát mu mezi čteními ze vstupů oddechnout, to můžu zkusit...

Koukám že i na stránkách Arduino.cc je u AnalogRead psáno:
"It takes about 100 microseconds (0.0001 s) to read an analog input, so the maximum reading rate is about 10,000 times a second."

Takže je to celkem jasný, že při běhu programu "trpaslík" s voltmerem v uP nestíhá měřit" :)
Uživatelský avatar
lesana87
Příspěvky: 4395
Registrován: 20 zář 2014, 00:00

#6 Příspěvek od lesana87 »

Cowley píše:lesana87: hm... Taky si mohla napsat, že je chyba někde mezi monitorem a židlí :)

To u sw chyb bývá, jelikož sw většinou píše ten element mezi židlí a klávesnicí. Co jsi čekal, že ti napíšu, ve kterém řádku programu máš chybu? :D
Uživatelský avatar
mtajovsky
Příspěvky: 3728
Registrován: 19 zář 2007, 00:00
Bydliště: Praha

#7 Příspěvek od mtajovsky »

Chcete říct, že je knihovna pro Arduino napsána tak, že nepočká na dokončení AD převodu? Dokončení převodu je indikováno bitem ADIF v registru ADCSRA nebo přerušením.
Uživatelský avatar
Cowley
Příspěvky: 3557
Registrován: 04 úno 2005, 00:00

#8 Příspěvek od Cowley »

Nasel jsem nekolik sketchu na Netu a taky tam maji v programu 6 radku za sebou a na kazdym jedno vycteni AnalogRead. Mezitim zadna pauza taky neni.

Lesana87: podle toho bych rekl,ze nebude chyba u me.

No tak uvidime,kdo a s cim se jeste prida do debaty.
Uživatelský avatar
Atlan
Příspěvky: 4514
Registrován: 10 kvě 2004, 00:00
Bydliště: Košice

#9 Příspěvek od Atlan »

mtajovsky píše:Chcete říct, že je knihovna pro Arduino napsána tak, že nepočká na dokončení AD převodu? Dokončení převodu je indikováno bitem ADIF v registru ADCSRA nebo přerušením.

To stym nesuvisi, ide o to ze zvolis analogovy vstup a spustis prevod, vnutorny kondik v uP sa nabije na vstupne napatie, prevod sa dokonci mas hodnotu, prepnes sa na iny vstup a hned spustis prevod (ale vnutorny kondik je este nabity na napetie ktore bolo na predchadzajucom vstupe tak ze to co prevedies AD prevodnikom nebude presne to co tam mas pripojene teraz) inak 100% je,o tom zmienka v datasheetebale tie arduinaci zasadne necitaju (nemam tu datasheet tak ze tym vnutornym kondikom si niesom isty ani neviem aky typ AD prevodnika je,pouzity) ale urcite pockat po pzvoleni vstupu a tak spustit prevod pomoze
Uživatelský avatar
lesana87
Příspěvky: 4395
Registrován: 20 zář 2014, 00:00

#10 Příspěvek od lesana87 »

Vzorkovací kondenzátor se nabíjí v době 1,5 taktu PO spuštění převodu. Kapacitu má 14pF, takže s odporem 5k6 to je časová konstanta 80ns a za těch 1,5 taktu převodníku (6us při 250kHz) se bez problémů stihne nabít. Chyba bude někde jinde. :)
Uživatelský avatar
Cowley
Příspěvky: 3557
Registrován: 04 úno 2005, 00:00

#11 Příspěvek od Cowley »

Atlan: Diky za doplneni.
Arduino UNO ma jeden AD prevodnik a pred nim multiplexer. Takze teorii s kondikem chapu.
A nevis jak to ma ATMEGA co je v Arduino MEGA?
Uživatelský avatar
Cowley
Příspěvky: 3557
Registrován: 04 úno 2005, 00:00

#12 Příspěvek od Cowley »

Prispevky lesany87 me fakt vzdy pobavi.
Uživatelský avatar
lesana87
Příspěvky: 4395
Registrován: 20 zář 2014, 00:00

#13 Příspěvek od lesana87 »

To je dobře, že jsem to nepsala zbytečně. :)
Uživatelský avatar
Cowley
Příspěvky: 3557
Registrován: 04 úno 2005, 00:00

#14 Příspěvek od Cowley »

Odborne prispevky o RC konstantach, ale jinak ...
Uživatelský avatar
lesana87
Příspěvky: 4395
Registrován: 20 zář 2014, 00:00

#15 Příspěvek od lesana87 »

To byl výpočet pro konkrétní případ, který jsi zde uvedl. Prostě dle mého názoru a zkušeností, chyba kterou popisuješ, není způsobena přeslechem mezi kanály z důvodu nedodržení vzorkovací doby nebo příliš velkého odporu zdroje signálu. To se začne projevovat až někde na stovkách kΩ. A i pak se to projevuje jen pozvolna na sousedních kanálech a ne tak jak píšeš, že ti tam náhodně skáčou nuly.
Vzhledem k tomu, že jsi zde doteď neuvedl "postižený" program, nemám k tomu co víc dodat. :)
Odpovědět

Zpět na „Miniaturní počítače (Arduino, Raspberry a další)“