Založen: Aug 27, 2010 Příspěvky: 463 Bydliště: Příbram
Zaslal: út duben 15 2014, 14:27 Předmět: Atmega8 - časem řízené přepínání pinů
Zdravím. Mohl by mi prosím Vás někdo poradit, jak upravím v tomto programu : http://www.daqq.eu/?p=283 změnu logiky na DDRB piny PB1, PB2 a PB3 tak, aby se po čtyřech hodinách měnil jejich stav z 11111101 na 11111011 a pak 11110111 ? Potřebuji aby tento stav se takto pravidelně měnil.
Předem děkuji za každou pomoc a ochotu. _________________ Zdraví vás Mirek
Založen: Aug 27, 2010 Příspěvky: 463 Bydliště: Příbram
Zaslal: út duben 15 2014, 15:59 Předmět:
Já mám program upravený tak, že PORTB = 0b11110001; a DDRB potřebuji měnit hodnoty na PIN1 až PIN3 na 011, 101 a 110 po 4 hodinách. Spínám s nimi tranzistory PNP _________________ Zdraví vás Mirek
Založen: Mar 06, 2005 Příspěvky: 787 Bydliště: Havířov
Zaslal: út duben 15 2014, 17:33 Předmět:
DDRB (Data_Direction_Register_B) slouží k nastavování směru portu nikoliv k posílání nějakých hodnot na piny.
V "hrůzostrašném" jazyku "C" Ti neporadím, jsou tu jiní.
DDRB=b00000000 - všechny piny portu B nastaveny jako vstupy
DDRB=b11111111 - všechny piny portu B nastaveny jako výstupy
podle schématu máš na PB3 tlačítko tak tam "nemůžeš" nic posílat
Naposledy upravil nekmil dne út duben 15 2014, 17:59, celkově upraveno 1 krát.
Mirku,řešení bude několik.První co mne napadá je,že bych si zvolil globállní proměnnou typu byte,kterou bych při změně hodin inkrementoval (od 0 do 2).Následně bych podle tý proměnný natavoval to co je třeba.Až by byla proměnná 2 (0,1,2) a mělo dojít k inkrementaci,tak bych ji vynuloval a tak pořád dokola.
Založen: Nov 20, 2012 Příspěvky: 1453 Bydliště: Praha
Zaslal: út duben 15 2014, 19:55 Předmět:
citace:
Já mám program upravený tak, že PORTB = 0b11110001; a DDRB potřebuji měnit hodnoty na PIN1 až PIN3 na 011, 101 a 110 po 4 hodinách.
Máš ty registry prohozené. DDRx řídí směr, PORTx pak co je na výstupu. Je-li v registru DDRx bit nastaven, je pak příslušný pin portu nastaven jako výstupní. V tvém případě to je 0b00001110, tj 0x0e. Registr PORTx v případě že je příslušný pin nastaven jako výstupní, řídí hodnotu na výstupu. V případě že je nastaven jako vstupní, pak řídí zda je na příslušný pin připojen pull-up.
Ovládání výstupu pomocí registru DDRB se používá u sběrnic, např i2c.
Je to obdoba výstupu s otevřeným kolektorem.
Tady to nemá smysl. Lépe je použít normálně PORTB.
Vyložená chyba je, že piny na kterých jsou tlačítka jsou nastavené jako výstupy (DDRB 4,5 = 1).
Zkus dát do main() toto
kód:
unsigned char hour=0, hour_old=0, hour_count=0;
hour = 10 * hour_10 + hour_1;
if(((hour % 4) == 0) && (hour != hour_old)) // změna hodin na hodnotu dělitelnou 4
{
hour_count++;
if(hour_count >= 3) {hour_count = 0;}
hour_old = hour;
FHonza:
Funguje to tak, že např když DDRB1=1 pak na PB1 je 0.
Když DDRB1=0, pak PB1 je odpojený.
Asi spoléhá na to, že tranzistor s bází v luftě bude zavřený.
Ptal se jak měnit DDRB každé 4 hodiny.
Předpokládám, že si to předělá sám na normální zápis do PORTB.
Založen: Nov 20, 2012 Příspěvky: 1453 Bydliště: Praha
Zaslal: st duben 16 2014, 12:05 Předmět:
AB1:
U případu DDRx = 0 pak záleží jestli je připojen pull-up. Po resetu bude pin ve stavu vysoké impedance. Ale pak je v programu někde PORTB = 0xf1, takže některé budou, některé ne. Ale určitě se shodnem že takhle se výstupy neovládají (...kromě I²C)
bastlir40:
jaké myslíš chyby ? V překladu ? Čím program překládáš ?
Časy uváděny v GMT + 1 hodina Jdi na stránku 1, 2Další
Strana 1 z 2
Nemůžete odesílat nové téma do tohoto fóra. Nemůžete odpovídat na témata v tomto fóru. Nemůžete upravovat své příspěvky v tomto fóru. Nemůžete mazat své příspěvky v tomto fóru. Nemůžete hlasovat v tomto fóru. Nemůžete připojovat soubory k příspěvkům Můžete stahovat a prohlížet přiložené soubory
Informace na portálu Elektro bastlírny jsou prezentovány za účelem vzdělání čtenářů a rozšíření zájmu o elektroniku. Autoři článků na serveru neberou žádnou zodpovědnost za škody vzniklé těmito zapojeními. Rovněž neberou žádnou odpovědnost za případnou újmu na zdraví vzniklou úrazem elektrickým proudem. Autoři a správci těchto stránek nepřejímají záruku za správnost zveřejněných materiálů. Předkládané informace a zapojení jsou zveřejněny bez ohledu na případné patenty třetích osob. Nároky na odškodnění na základě změn, chyb nebo vynechání jsou zásadně vyloučeny. Všechny registrované nebo jiné obchodní známky zde použité jsou majetkem jejich vlastníků. Uvedením nejsou zpochybněna z toho vyplývající vlastnická práva. Použití konstrukcí v rozporu se zákonem je přísně zakázáno. Vzhledem k tomu, že původ předkládaných materiálů nelze žádným způsobem dohledat, nelze je použít pro komerční účely! Tento nekomerční server nemá z uvedených zapojení či konstrukcí žádný zisk. Nezodpovídáme za pravost předkládaných materiálů třetími osobami a jejich původ. V případě, že zjistíte porušení autorského práva či jiné nesrovnalosti, kontaktujte administrátory na diskuzním fóru EB.