vstupy ATmega

Uměl byste mi někdo odpovědět na dvě otázky ohledně vlastností vstupů mcu od Atmelů?

  1. Je nutná ostrá hrana signálu pro vyvolání externího přerušení nebo jsou vstupy ošetřeny nějakým schmittovým obvodem?

Potřebuji zařadit na vstup mcu RC článek pro vyfiltrování rušení na 40kHz, kdy užitečný signál má frekvenci 1-500Hz(výstup z hall sondy “otáčkoměru” motoru v ekole). RC článek vidím na 10k s 100n kondem(RCtau= 1msec).

  1. Lze jeden vstup(analogový) použít současně k vyvolání ext. přerušení a zároven na něm nezávisle měřit úroven napětí?

Na vstup bude přivedeno napětí z baterie 90V přes odporový dělič(200k ku 10k) pro měření (cca 10x za sec.)úrovně napětí baterie a hlídání odpojení baterie(pomocí přerušení).

Zdar.

1.) U AVRek je schmiťák.

2.) Tak to nevím, to jsem ještě nezkoušel.

Jak už bylo řečeno, vstupy jsou ošetřeny schmit. obvodem, navíc jsou ještě synchronizovány přes dva D klop. obvody systémovými hodinami.

Na druhou otázku odpovím ne, nejde to. Buď je vstup naprogramován jako A/D převodník, nebo prostý vstup/výstup. Obojí najednou nejde.

Jinak mohu vřele doporučit obvody ATXmega, ktze je nevhodným naprogramováním pojistek trvale zablokovat. A jsou levnější.

V obou případech je dobré detailně prostudovat manuály k procesorům, které jsou velmi podrobné. Ušetří to spoustu otázek a bádání, které pak často vedou ke zklamání. Manuály jsou volně stažitelné ze stránek Atmel. A pozor! K jednomu typu obvodu existuje vždy několik manuálů a každý se věnuje jiné oblasti. Ty co popisují chování periférií a jejich nastavení pomocí registrů mají v současné době v názvu slovo MANUAL.

Co napsal předchozí přispívající o programovadlech souhlasí, jen bych se asi nejvíc přimluvil za JTAGICE3, který u Farnelu dostanete za cenu cca 2,5k a s Atme Studiem 6 a vyšším umí krásně krokovat přímo na procesoru včetně všech vnitřních registrů a pamětí.eré mají mnohem sofistikovanější I/O, než ATmega. Snadněji se programují, nel

Díky oboum za komentář.
Bod jedna potěšil. U bodu dva holt použiju dva vstupy nebo pokud nebude už žádný volný, tak uvažuju ty funkce na jednom vstupu “přepínat”: Jestli tomu rozumím dobře, tak to současně nejde vlastně jen počas AD převodu na dotyčném vstupu a mimo okamžik provádění AD čtení bude přerušení normálně fungovat?

Zdravim,tiez mam podobny problem a nechcem zaklad novu temu.Atmega328 prijima od timera(DS1307) cez I2C cas a datum.Ale pred tym mam citanie hall senzora pomocou preruseni.Zistil som ze mi vdaka preruseniam meska cas(cca 6 min za den).Neviete ako to okabatit prosim.Budem velmi vdacny za rady. :confused:

A funguje ti RTC spravne ?
Lebo RTC sa bezne pouziva na udrziavanie casu, len si neviem predstavit ako by mohla byt jeho funkcia ovplyvnena hall senzormi.

RTC funguje na 100 percent,lebo ked vymazem cast kodu co je na citanie impulzov cas ide spravne.Na nacitanie impulzov mam takyto kod: 1. Zapnutie preruseni… 2. Scitanie impulzov z HALL… 3.Delay(200)… 4. Vypnutie preruseni…5.Zapnutie preruseni…Na I2C je napojeny este jedna Atmega a podla mna tie prerusenia docasne stopnu komunikaciu.

Vzhledem k tomu, že z DS1307 čteš přímo časový údaj o jehož aktuálnost se stará příno obvod nezávisle na svém okolí, asi bych hledal chybu někde jinde. Nerozumím bodům 1,4 a 5. Pokud to znamená 1 a 5 = skok do obsluhy přerušení, 4 = konec obsluhy přerušení, pak tam ten Delay ROZHODNĚ NEMÁ CO DĚLAT. Obzvlášť pokud by sis čas udržoval pomocí SQW výstupu a ten používal k načítání času pomocí impulzů. Pak samozřejmě 200ms pauza během přerušení nadělá pořádnou paseku. Nicméně, psal jsi, že načítáš čas přes I2C přímo z DS1307. Pak není důvod, aby se čas zpožďoval. Chyba bude možná v tom, že si někde načítáním HAL čidel přepisuješ něco, co nemáš.

Presne tak s tymi preruseniami,len som to ja zle napisal.Vymazem ten delay a skusim.Hall je vlastne prietokomer.Som si isty,ze chyba je v nacitani hall,lebo zakazdym si cast programu skusam v praxi.Este otazka.Moze delay v programe brzdit I2C komunikaciu?

Pokud použiješ delay v hlavním programu a I2C čtení voláš přerušením, tak ne. Navíc při čtení čipu DS1307 je MCU master a udává takt hodin, tudíž i kdyby došlo k nějakému přerušení v průběhu čtení, na výsledek to nemá vliv, protože I2C je synchronní přenos. Každopádně delay používej maximálně v řádu stovek mikrosekund. Pokud potřebuješ delay 1 ms a více, je použití delaye pouze, pokud mcu nedělá nic jinýho, než třeba bliká LEDkou. Pak klidně dej i delay 500 ms, abys dostal 1 Hz. Pokud ale píšeš nějaký program, který toho vykonává víc, pak se delayi vyhybej, jak jen můžeš. Pokud potřebuješ mezi dvěma částmi akce nějaký odstup, pak si akci rozkouskuj a pomocí časovače a příznaků volej postupně jednotlivé části. Delay je prostě něco, co v programech až na vyjímky nemá co pohledávat.