Stránka 1 z 4

programovanie - kodovy zamok

Napsal: 01 pro 2010, 13:43
od ferooo
zdravim,
som tu novy, v AVR robim svoj prvy program a neviem si rady...
Chcem si spravit kodovy zamok, program pisem v C, svaba pouzivam ATmega16.
Klavesnica je napojena na PORTC(piny 0-7) a PORTD(piny 0-3)
- je nejaka funkcia, ktorou cakam na stlacenie hociakeho tlacidla na klavesnici?
- nechapem uplne presne ako funguje cely program v AVR -> napr vo VisualStudiu pisem v C# a viem ako presne program bezi, teda kde sa zastavi a caka na vstup a pod... ale v AVR to bezi stale cele dokola, ano?

dakujem za rady

Napsal: 01 pro 2010, 19:00
od Burajko
Zacal bz som niecim jednoduchsim. :wink:

Napsal: 01 pro 2010, 19:45
od Banda
Můžeš použít přerušení + potřebuješ snímat multiplexovanou klávesnici (takže snímat úrovně na pinech).
Začít můžeš vývojovým diagramem.
Na netu se těchto programů musí válet spousty.
Druhou otázku nechápu.

Napsal: 01 pro 2010, 20:28
od Chenzee
Program neumí zastavit. Pokud potřebuješ zastavit vykonávání programu,musíš zkrátka procesor něčím zabavit (třeba počítej do 10 a po dopočítání začni znovu :-) nebo třeba NOP, GOTO $-1. Vyšší jazyky toto možná dělají pomocí nějakého příkazu :nevim:

Napsal: 01 pro 2010, 21:19
od bohumilfulin
poustis se do programovani MCU a podle otazek mas mysleni windowsaka. Na to zapomen. Musis se smirit s tim ze programvani MCU je vzdy zavisle od typu MCU i od schematu zapojeni. To tak je. Ccko neni az tak univerzalni jak ocekavas.
Funkce v C najdes ale spis takove ktere nejsou zavisle na HW (vypocet CRC,...) ale stejne vetsinou budes muset fci prizpusobit na svuj HW. Neco jako driver pro obsluhu klavesnice nehledej pro vsechny procesory.

Tak jak na tu klavesnici. Jsou dva zakladni zpusoby jak na klavesnici:
- detekce stisku pres preruseni, to bud vyvola zmena na portu. To myslim ze mega16 umi, nebo pres HW detekovat stisk na nejaky INTx. Vyhoda je ze program se o klavesnici stara pouze pokude dojde ke stisku, jinak muze delat neco jineho

- SW. proste jednou za cas (treba 50ms) oskenujes klavesnici zda neni nahodou stisknuta. Jednodussi pro pochopeni zacatecnika, ale zbytecne se spotrebovava cas i tehdy kdy ke stisku nedojde.

Moje doporuceni zni: udelej to SW abys pochopil co MCU chce a jak pracuje, jak na zakmity,... a pak to preklop do verze pod prerusenim.

Googluj, nejsi sam kdo resil klavesnici pod AVR tak hura nekomu na jabka.

Napsal: 10 pro 2010, 09:30
od ferooo
zdravim,
sry, ze som neodpovedal, dlhsie som bol mimo netu...
Dakujem za rady, kodovy zamok som uz "sprovoznil" :) Teraz sa zahravam s myslienkou pripojit na to este maly displej. Mam k dispozicii znakovy, 2x20, oznacenie PowerTip PC2002-B.
Datasheet priamo na stiahnutie:

Kód: Vybrat vše

http://www.google.sk/url?sa=t&source=web&cd=1&ved=0CBgQFjAA&url=http%3A%2F%2Fsmanuals.ru%2Ffiles.html%3Fdatasheet%3D446341%2Fdata-PC2002-B&rct=j&q=pc2002-b&ei=leQBTZC4Jcbxsgb479iFCg&usg=AFQjCNGXtpz7BfjKO3CKR3Bi7siyqu4BmA&sig2=5VYuCcmXFRkuE8gQRrKZ_Q&cad=rja
obsahuje radic ST7066U (ten je ale kompatibilny s HD44780). Ako inicializujem LCD? Vsade na nete som nasiel len programy v Assemblery, potrebujem ale nieco, co je pisane v C.
Ak by niekto o niecom vedel, budem vdacny.

Napsal: 10 pro 2010, 11:13
od majsi
OK. Tak nato ze o tom ako funguju mcu a vobec procesory, si sa vybral velmi zle. mcu nieje C# v ktorom sa naucis kodit za 2 dni. C a C++ pre MCU sa na klasicke C a C++ podobaju len syntaxou a standardnymi kniznicami (tie by si mal zacat pouzivat az ked budes vediet o co v tom celom MCU svete vlastne ide).

Co sa tyka toho displaya tak tebe treba vediet aky kontroler je v nom pouzity. Vyrobca udava ze je tam pouzity ST7066U.

http://www.crystalfontz.com/controllers/ST7066U.pdf

tento datasheet sa v podstate deli na 2 casti. prva je prepojenie lcd a kontrolera a druha je prepojenie kontrolera mcu.

prajem vela uspechov a pevnych nervov ;)

Napsal: 24 pro 2010, 12:03
od ferooo
najskor by som chcel popriat vsetkym stastne a vesele ;)
a teraz k problemu.. ako mozem zapisat data do pamate IO? Pouzivam AtMega16. Pocas behu programu si mozem zmenit heslo. No ked vypnem napajanie, tak sa program spusti odznova a do kodu sa ulozi prednastaveny kod, nie ten, ktory sa v predchadzajucom behu programu zadal ako novy.
Ako je teda mozne po zmene kodu tento ulozit do pamate svaba?
Program by sa potom zmenil tak, aby sa do premennej nacitala hodnota, ktora je ulozena v pamati svaba.

Napsal: 24 pro 2010, 12:06
od Andrea
Zapiš si ho do interní EEPROM. V C na to určitě bude nějaká knihovna.

Napsal: 24 pro 2010, 14:14
od Atlan
jj pri zapnuti nacitat kod z eeprom do ram a potom uz len porovnavat zo zadanym, pripadne po zmene ulozit do eeprom.

Inak na pevno by som tam doplnil nejaky 10miestny kod (ktory by to vratil do povodneho stavu s defold kodom napr 0000 (predpokladam ze castozadavany kod bude do max 6 cisel/znakov)

Napsal: 26 pro 2010, 12:14
od ferooo
neviete ake su prikazy na zapisovanie/citanie z eeprom? Alebo nejaky dobry link, kde by som sa o tom dozvedel viac.

Napsal: 26 pro 2010, 14:15
od AB1
neviete ake su prikazy na zapisovanie/citanie z eeprom?
To záleží na tom, který jazyk používáš.
Avr-gcc?
CodeVision?
IAR?

Napsal: 27 pro 2010, 21:17
od mtajovsky
Popis práce s EEPROM je zde:

http://www.atmel.com/dyn/resources/prod ... oc8154.pdf

strana 18, kapitola 7.4

Pokud používáte WinAVR, tak v knihovně jsou funkce:

Kód: Vybrat vše

void  paramStore (u08 *parameters, u08 *memaddr, u16 sizebytes); 
u08  paramLoad (u08 *parameters, u08 *memaddr, u16 sizebytes);

Detailní popis funckí je v dokumentaci WinAVR.

Napsal: 27 pro 2010, 23:14
od AB1
Pokud používáte WinAVR, tak v knihovně jsou funkce:
kód:
void paramStore (u08 *parameters, u08 *memaddr, u16 sizebytes);
u08 paramLoad (u08 *parameters, u08 *memaddr, u16 sizebytes);
Nenašel jsem je tam.
Ostatně pro práci s eeprom mají poněkud exotické názvy.

Napsal: 28 pro 2010, 15:08
od majsi
tie funkcie su z kniznice AVRlib, bola to dobra kniznica len skoda ze skoncil jej vyvoj. Ak by mal niekto zaujem mam nejaku verziu tejto kniznice.