ASK přenos pomocí ATTiny85
ASK přenos pomocí ATTiny85
Prosím odborníky ve zdejším fóru o pomoc. Před cca 7 roky jsem si vytvořil na projekt radiového řízení motorku modelu s využitím čínských ASK modulů STX882(vysílač) a LR45(přijímač). Na straně přijímače dekóduji přenos v ATTiny85 pomocí knihovny RadioHead modul RH_ASK. Ten ovládá přerušení pomocí časovače 1 a vlastní motorek pak ovládám PWM na časovači 0. Toto vše se mi vešlo do ATTiny85 (Toto řešení jsem zvolil kvůli velikosti ASK modulů a ATTiny85, aby se mi vše vešlo do modelu lokomotivy TT)
Před 7 nebo 8 lety byly ATTiny ještě od fy Atmel a na cca 7 z 10 ATTiny85 to chodilo dobře a na těch 3 z 10 to bylo chybové – přenos se sekal.
Nyní ATTiny85 vyrábí fa Microchip a na nich mi totožný program téměř nechodí. Snad na 1 z 10 ATTiny85. Prostě naprogramuji 10 ATTiny85 a jen jeden funguje. Na ostatních v modulu RH_ASK při testování vyskakuje chyba crc. To znamená, že dekódování přenosu probíhá s tolika chybami, že přenos informace neprojde.
Už jsem toho vyzkoušel hodně, takže bych uvítal radu odborníka přes ATTiny85, co bych měl ještě udělat. Asi zatěžuji ATTiny85 na hranici jeho schopností, ale dřív to chodilo a nyní ne.
Kdyby se mi mohl někdo ozvat. Moc děkuji za pomoc.
Před 7 nebo 8 lety byly ATTiny ještě od fy Atmel a na cca 7 z 10 ATTiny85 to chodilo dobře a na těch 3 z 10 to bylo chybové – přenos se sekal.
Nyní ATTiny85 vyrábí fa Microchip a na nich mi totožný program téměř nechodí. Snad na 1 z 10 ATTiny85. Prostě naprogramuji 10 ATTiny85 a jen jeden funguje. Na ostatních v modulu RH_ASK při testování vyskakuje chyba crc. To znamená, že dekódování přenosu probíhá s tolika chybami, že přenos informace neprojde.
Už jsem toho vyzkoušel hodně, takže bych uvítal radu odborníka přes ATTiny85, co bych měl ještě udělat. Asi zatěžuji ATTiny85 na hranici jeho schopností, ale dřív to chodilo a nyní ne.
Kdyby se mi mohl někdo ozvat. Moc děkuji za pomoc.
Re: ASK přenos pomocí ATTiny85
Odborník nejsem.
Tohle se bude hledat/řešit strašně těžko. Pár nástřelů:
nestabilní napájení, proudový nárazy
EM rušení
jiná verze knihovny RadioHead
Vlastně ani nepoznám, zda chyba vzniká v tom ATTiny a nebo ve vysílacím/přijímacím modulu. Zrovna ty moduly s amplitudovou modulací nebývají moc kvalitní.
Tohle se bude hledat/řešit strašně těžko. Pár nástřelů:
nestabilní napájení, proudový nárazy
EM rušení
jiná verze knihovny RadioHead
Vlastně ani nepoznám, zda chyba vzniká v tom ATTiny a nebo ve vysílacím/přijímacím modulu. Zrovna ty moduly s amplitudovou modulací nebývají moc kvalitní.
Re: ASK přenos pomocí ATTiny85
Myslím, (jsem přesvědčený) že problém je v ATTiny85. Když tentýž program nahraji do funkčního ATTiny, jede v pořádku. Měním pouze ATTiny85 v patici. Vše ostatní zůstává stejné na stejném místě. Zdroj mám regulovaný ze starého počítače a před ATTiny je stabilizátor L78L05. Výpisem přes seriový monitor jsem u těch nefukčních zjistil, že přenos neprojde kvůli chybnému crc. A jak jsem uvedl stará ATTiny85 jedou z 80% nová jen 1 z 10.
Staré byly ATTiny85-20SF nové jsou ATTiny85-20SU. Kdyby se na to někdo chtěl podívat pošlu programy a co bude potřeba.
Staré byly ATTiny85-20SF nové jsou ATTiny85-20SU. Kdyby se na to někdo chtěl podívat pošlu programy a co bude potřeba.
Re: ASK přenos pomocí ATTiny85
Teď jsem provedl malý test. Nechal jsem v programu jen nejnutnější funkce s využitím jednoho timeru pouze pro ASK dekodování. Na dobrém ATTiny85 to jede jak s timerem1 tak s timerem0. Na špatném ATTiny85 to nejede ani s jedním časovačem.
Tak mě napadlo, že jsem kdesi četl o tom, že ATTiny má svůj vnitřní oscilátom docela nekvalitní, takže když dekodování ASK přenosů probíhá při 2000bit/s a každý bit je testovaný 8x při přerušení tj frekvence 16kHz. Pokud vnitřní oscilátor "ujíždí" tak potom se nemůže trefit 8x do každého bitu. Prostě pokud je frekvence oscilátoru vysílače přesná (arduino Nano) a přijímače napřesná, tak se to "nepotká"
Tak mě napadlo, že jsem kdesi četl o tom, že ATTiny má svůj vnitřní oscilátom docela nekvalitní, takže když dekodování ASK přenosů probíhá při 2000bit/s a každý bit je testovaný 8x při přerušení tj frekvence 16kHz. Pokud vnitřní oscilátor "ujíždí" tak potom se nemůže trefit 8x do každého bitu. Prostě pokud je frekvence oscilátoru vysílače přesná (arduino Nano) a přijímače napřesná, tak se to "nepotká"
Re: ASK přenos pomocí ATTiny85
Pak je teda ke zvážení možnost zapojit externí oscilátor (krystal) mezi piny 2 a 3, s příslušným kondenzátorem. Možná se kolem toho musí udělat nějaká magie s fuses ("pojistkami").
Re: ASK přenos pomocí ATTiny85
Nejdřív pohledám jak tu frekvenci změřit, jestli je opravdu špatný a pak ten vnější oscilátor.
Re: ASK přenos pomocí ATTiny85
Na to zjistit v čem je problém potřebuješ digitální osciloskop.
Použil jsem ATtiny202 a STX882 jako náhradu bezdrátového čidla teploty Oregon Sientific THN132N viz příspěvek zde. Základnová stanice Oregon je ale velmi citlivá na přesné klíčování Manchester signálu, které se lehce mění s teplotou vlivem změny frekvence ATtiny202. Musel jsem s tím počítat a lehce upravit signál pro klíčování STX882 podle změřené teploty, aby to při extrémnějších teplotách fungovalo. Nepoužívám žádnou knihovnu, program je čistě v C++ za využití téměř všech HW funkcí ATtiny202
.
Použil jsem ATtiny202 a STX882 jako náhradu bezdrátového čidla teploty Oregon Sientific THN132N viz příspěvek zde. Základnová stanice Oregon je ale velmi citlivá na přesné klíčování Manchester signálu, které se lehce mění s teplotou vlivem změny frekvence ATtiny202. Musel jsem s tím počítat a lehce upravit signál pro klíčování STX882 podle změřené teploty, aby to při extrémnějších teplotách fungovalo. Nepoužívám žádnou knihovnu, program je čistě v C++ za využití téměř všech HW funkcí ATtiny202

Re: ASK přenos pomocí ATTiny85
Tak jsem experimentoval s meřením frekvence oscilátoru. Nejdřív jsem udělal prográmek s přerušením po maximálním čase co ATTiny zvládne a napočítal jsem 120 těchto přerušení což mělo zhasnout kontrolní diodu za 59,99 s. Skutečnost ale byla 56,6. Tak jsem nastavil oscilátor na 1MHz a udělal výstup na Pin PB4 a multimetrem jsem měřil frekvenci. Ty chybové ATTiny85 měly frekvenci 1,095 MHz. Ty co chodily, měly cca 1,032 MHz.
Takže pak jsem exporimentoval s registrem OSCCAL. Zatím u jednoho ATTiny85. Původní OSCCAL měl 88, a po snížení na 80 se můj program v ATTiny rozběhl. (ještě jsem měl intermezzo s rutinou RH_ASK, kde jsem do přerušení pro načítání stavu vstupního pinu vložil Serial.print, což také při OSCCAL 84 trochu zlepšilo chod programu). Ale snížení OSCCAL na 80 se to vylepšílo zcela. Mimochodem pak prográmek pro měření 1 minuty zhasínal diodu za 60s.
Takže pak jsem exporimentoval s registrem OSCCAL. Zatím u jednoho ATTiny85. Původní OSCCAL měl 88, a po snížení na 80 se můj program v ATTiny rozběhl. (ještě jsem měl intermezzo s rutinou RH_ASK, kde jsem do přerušení pro načítání stavu vstupního pinu vložil Serial.print, což také při OSCCAL 84 trochu zlepšilo chod programu). Ale snížení OSCCAL na 80 se to vylepšílo zcela. Mimochodem pak prográmek pro měření 1 minuty zhasínal diodu za 60s.
Kdo je online
Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 1 host