Vítejte na Elektro Bastlírn?
Nuke - Elektro Bastlirna
  Vytvořit účet Hlavní · Fórum · DDump · Profil · Zprávy · Hledat na fóru · Příspěvky na provoz EB

Vlákno na téma KORONAVIRUS - nutná registrace


Nuke - Elektro Bastlirna: Diskuzní fórum

 FAQFAQ   HledatHledat   Uživatelské skupinyUživatelské skupiny   ProfilProfil   Soukromé zprávySoukromé zprávy   PřihlášeníPřihlášení 

programovanie - kodovy zamok
Jdi na stránku Předchozí  1, 2, 3, 4  Další
 
Přidat nové téma   Zaslat odpověď       Obsah fóra Diskuzní fórum Elektro Bastlírny -> Programování PIC, ATMEL, EEPROM a dalších obvodů
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
mtajovsky



Založen: Sep 19, 2007
Příspěvky: 3698
Bydliště: Praha

PříspěvekZaslal: út prosinec 28 2010, 16:57    Předmět: Citovat

majsi << dík za opravu.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
AB1



Založen: Nov 23, 2009
Příspěvky: 312

PříspěvekZaslal: st prosinec 29 2010, 8:45    Předmět: Citovat

Funkce pro eeprom jsou tady
http://www.nongnu.org/avr-libc/user-manual/group__avr__eeprom.html
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
ferooo



Založen: Dec 01, 2010
Příspěvky: 7

PříspěvekZaslal: st prosinec 29 2010, 9:22    Předmět: Citovat

dakujem za materialy, idem na to pozriet.
Pouzivam AVR-GCC Wink
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
jano80



Založen: Nov 16, 2008
Příspěvky: 73
Bydliště: Michalovce

PříspěvekZaslal: st prosinec 29 2010, 20:23    Předmět: Citovat

alebo stačí pozrieť datasheet daného obvodu je tam celkom dobrý príklad použitia EEPROM (zápis , čítanie)

kód:

void EEPROM_write(unsigned int uiAddress, unsigned char ucData)
{
/* Wait for completion of previous write */
while(EECR & (1<<EEWE))
;
/* Set up address and data registers */
EEAR = uiAddress;
EEDR = ucData;
/* Write logical one to EEMWE */
EECR |= (1<<EEMWE);
/* Start eeprom write by setting EEWE */
EECR |= (1<<EEWE);
}



kód:

unsigned char EEPROM_read(unsigned int uiAddress)
{
/* Wait for completion of previous write */
while(EECR & (1<<EEWE))
;
/* Set up address register */
EEAR = uiAddress;
/* Start eeprom read by writing EERE */
EECR |= (1<<EERE);
/* Return data from data register */
return EEDR;
}
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
67kapa



Založen: Oct 31, 2010
Příspěvky: 73

PříspěvekZaslal: pá únor 04 2011, 20:13    Předmět: Co třeba ... Citovat

... takto,pokud chceš čekat na stisk nějakého tlačítka a jinak zařízení nemá dělat nic jiného,nebo jenom to,co vložíš do nekonečné smyčky,viz soubor.?
Nebo můžeš testovat rovnou celou bránu,stav uložíš do příznakového bytu,ten můžeš testovat a pokud bude nulový/nebo naopak nenulový(to si zvolíš),může se zavolat rutina obsluhy kláves.Nebo můžeš cyklicky v obsluze přerušení testovat stav vstupů.Obecně klávesnice nevyžaduje extrémní rychlost čtení,navíc mnohdy musíš ošetřit softwarově zákmity tlačítek,takže bych v přerušení obsluhoval raději displej,no je to na toběSmile



klav.txt
 Komentář:

Stáhnout
 Soubor:  klav.txt
 Velikost:  269 Bajtů
 Staženo:  120 krát

Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
mtajovsky



Založen: Sep 19, 2007
Příspěvky: 3698
Bydliště: Praha

PříspěvekZaslal: pá únor 04 2011, 20:53    Předmět: Citovat

S těmi tlačítky to není složité, ale ani ne úplně triviální. Po změně úrovně napětí z tlačítka byste měl otestovat, že tato nová úroveň je stabilní po nějakou dobu - například 5 ms. Každé mechanické tlačítko má při přepnutí zákmity, které by se jinak mohly programem v důsledku rychlosti procesoru vyhodnotit chybně jako série sepnutí. Takže po detekci změny počkat třeba 3 ms, otestovat - přečíst podruhé, že úroveň je stejná, počkat další 3 ms a do třetice všeho dobrého i zlého to znovu načíst, jestli úrověň drží. Pak teprve považovat tlačítko za přepnuté.

Pozn. k C# a čekání na tlačítko a podobně: program ve Windowsích se nikde nezastavuje, nota bene nečeká v nějaké smyčce na stisk tlačítka. On po skončení toho, co měl udělat nakonec volá funkci GetMessage() v okenní funkci hlavního okna, a pokud není žádná zpráva ve frontě, tak se řízení odevzdá do systému. Variantně volá čekání na signalizaci objektu jádra WaitForSingle(Multiple)Object(s) (), kde se také předá řízení systému, pokud tento objekt už nebyl signalizován nebo může volat čekání na socket. Ale nikdy se nehaltuje nebo necyklí na místě. Pokud se to udělá v kódu násilně, tak při nejbližším přerušení od časovače stejně systém řízení sebere.

Nakonec, pokud je potřeba snímat stav tlačítek a přitom také současně potřeba obsluhovat ještě jiné události z okolí - kontakt čipové karty, vypršení časovače (softwarového), příjem pro RS232 a tak dále, je nejlépe výše nastíněné paradigma napodobit. Udělat si hlavní smyčku, která je v roli "systému" a detekuje všechny možné události. Jestliže se daná událost vyskytne, předá se řízení příslušnému obslužnému podprogramu.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
Andrea



Založen: Sep 07, 2007
Příspěvky: 9340

PříspěvekZaslal: pá únor 04 2011, 21:00    Předmět: Citovat

Jo, nejlepší bude dát na ten 8bitovej jednočip windousy. Rolling Eyes
Stačí tu klávesnici skenovat jednou za x desítek ms v přerušení od časovače a zákmity jsou odstraněné automaticky, pokud se přidá testování 2x stejného stavu po sobě, tak se odstraní i případné rušení.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
67kapa



Založen: Oct 31, 2010
Příspěvky: 73

PříspěvekZaslal: pá únor 04 2011, 21:10    Předmět: No... Citovat

...ono to až tak jednoduché není.Pokud budu skenovat stavy a dva stavy budou po sobě stejný,navíc po 5ms a kabel od klávesnice bude delší(třeba kódový zámek,klávesnice bude oddělená od řídící jednotky),můžou nastat dva stejný stavy vlivem kapacity vodiče a stejně to bude chybný stav a procesor to nepozná.Osobně to testuji tak,že uložím první sken portu do registru a pak po určitou dobu a počtu skenování porovnávám s prvním vstupem.Tak ošetřím i případnou kapacitu kabelu.Osvědčila se mně doba 20ms.Jinou věcí je,zda má zařízení rozpoznat puštění klávesy,či zda má po určité době spustit repetici znaku.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
67kapa



Založen: Oct 31, 2010
Příspěvky: 73

PříspěvekZaslal: pá únor 04 2011, 21:25    Předmět: Systém při přerušení... Citovat

....cyklení neopustí,protože si pamatuje návratovou adresu(následující instrukce) a tam po návratu z přerušení skočí.Pokud nepotřebuji obsluhovat od procesoru nic jiného,bohatě čekání ve smyčce stačí.U kódového zámku naprosto dostačující.Samozřejmě při složitém programu,kdy se obsluhují i jiné periférie,jako I2C,displej....je test kláves v nekonečné smyčce kravina.Ve složitějším systému budou navíc použity jak příznaky,tak i priority přerušení jednotlivých požadavků...
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Andrea



Založen: Sep 07, 2007
Příspěvky: 9340

PříspěvekZaslal: pá únor 04 2011, 21:46    Předmět: Citovat

Akorát že při obsluze přes přerušení může procesor 99,8% času spát.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
67kapa



Založen: Oct 31, 2010
Příspěvky: 73

PříspěvekZaslal: pá únor 04 2011, 22:25    Předmět: No pokud bude spát... Citovat

tak není nic jednoduššího,než ho změnou stavu na portu vzbudit,stačí nastavit příslušné registry(vzbuzení může rovněž iniciovat i AD převodník,watchdog,přetečení timeru...např.)Takhle jsem dělal konstrukci na bateriové napájení,po uplynutí času se vypnulo podsvícení,následovalo vypnutí displeje a skok do SLEEP módu.Stiskem kterékoliv klávesy se procesor vzbudil(klávesnice 4 x 4 ).Při uspání je rovněž uložena návratová adresa programového čítače ve stacku.Dokonce ho můžeš vzbudit a zakázat obsluhu přerušení vyvolanou touto akcí.Možností je několik:-)
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Andrea



Založen: Sep 07, 2007
Příspěvky: 9340

PříspěvekZaslal: pá únor 04 2011, 22:41    Předmět: Citovat

Nevím co to bylo za procesor, ale AVR může vzbudit jen reset nebo přerušení, takže pokud vynecháme ten reset, tak obsluha klávesnice s uspáváním procesoru není bez použití přerušení u AVR možná. Wink
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
67kapa



Založen: Oct 31, 2010
Příspěvky: 73

PříspěvekZaslal: pá únor 04 2011, 22:48    Předmět: PIC16F876A... Citovat

...je s tím radost dělat:-)Ano,zapomněl jsem na RESET,ten samozřejmě rovněž procesor vzbudí.Mimochodem,to vzbuzení od portu má téměř každý PIC:-)
Mimochodem,tady je ta "kravinka"Smile
http://files.kpelektro.webnode.cz/200000097-4d60d4e5ba/Program%C3%A1tor2.jpg

A ještě,jak se to dělá,když se chci vyhnout tomu přerušení,jednoduše zakážu globální přerušení (bit GIE).Sice to procesor vzbudí,ale neprovede se skok do rutiny přerušení(vektor 0004h)
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Andrea



Založen: Sep 07, 2007
Příspěvky: 9340

PříspěvekZaslal: pá únor 04 2011, 23:06    Předmět: Citovat

Takže (pominu-li ten reset) PIC 16F876 se dokáže vzbudit ze sleepu i se zakázaným přerušením?
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
67kapa



Založen: Oct 31, 2010
Příspěvky: 73

PříspěvekZaslal: pá únor 04 2011, 23:14    Předmět: Ano,přesně tak... Citovat

...dokonce i AD převodník ho vzbudí.Jediné,na co je si dávat pozor,je spotřeba ve SLEEP modu,AD převodník trochu žere.A musí se samozřejmě ošetřit porty tak,aby nemohly sloužit jako zdroj proudu...Např. teď mám na stole PIC16F630 a ten má to samé.Oni ty obvody PIC mají totiž ještě další bity,které povolují jednotlivá přerušení od periferií a instrukce sleep je tak trochu vyjímkou.Samozřejmě za běhu programu,pokud bude globální přerušení zakázáno,k přerušení nedojde.Takže mně stačí v programu před isntrukcí SLEEP toto globální přerušení zakázat a jako první instrukci po vzbuzení ho zase povolit:-)
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Zobrazit příspěvky z předchozích:   
Přidat nové téma   Zaslat odpověď       Obsah fóra Diskuzní fórum Elektro Bastlírny -> Programování PIC, ATMEL, EEPROM a dalších obvodů Časy uváděny v GMT + 1 hodina
Jdi na stránku Předchozí  1, 2, 3, 4  Další
Strana 2 z 4

 
Přejdi na:  
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

Powered by phpBB © 2001, 2005 phpBB Group
Forums ©
Nuke - Elektro Bastlirna

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.


PHP-Nuke Copyright © 2005 by Francisco Burzi. This is free software, and you may redistribute it under the GPL. PHP-Nuke comes with absolutely no warranty, for details, see the license.
Čas potřebný ke zpracování stránky 0.22 sekund