| Микроконтролери и електроника http://mcu-bg.com/mcu_site/ |
|
| ATmega 32 въпрос от начинаещ! http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=7027 |
Страница 1 от 1 |
| Автор: | the_bull [ Чет Авг 06, 2009 2:46 pm ] | |||||||||
| Заглавие: | ATmega 32 въпрос от начинаещ! | |||||||||
Започнал съм едно проект че като за начинаещ, но имам проблем. Та въпросния проект е с ATmega 32 като по същество представлява прост брояч на импулси подавани от рид-ампула, като контролера брои и извежда резултата на динамична индикация с 7-сегментни индикатори.До тук се справих криво лево с задачката, но ми се иска да разуча още неща от контролера като например как да записвам променливи в ЕЕПРОМ памета. Мисля стойността която е натрупал брояча да я съхранявам в ЕЕПРОМА но нещо не мога да разбера как се пишат променливи там и какво е нужно. Четох даташита и си играх с примерни кодове дето са дадени там и нищо не става. Ето примерен код от там:
Както се вижда пиша на С. От асемблер почти не разбирам (в момента се опитвам да науча и него но съм в началото Като среда за програмиране използвам AVR Studio 4. Ще съм ви благодарен ако покажете как може да си пиша променливи и също така ако дадете примерни сорсове за да експериментирам. Това е третият ми проект като първия беше бягащи светлини, а втория PWМ така че още съм много в началото на тази материя, но се надявам с ваша помощ да напредна. |
||||||||||
| Автор: | Cvetanov [ Чет Авг 06, 2009 3:13 pm ] |
| Заглавие: | |
В кода, който си дал само се разрешава писането. След вдигането на двата флага трябва да се сетне адреса, на който ще пишеш и съответно да се зашише байт посредством дейта регистъра. // Моя грешка преди сетването на флаговете се задават адреса и данните void EEPROM_write(unsigned int uiAddress, unsigned char ucData) { /* Wait for completion of previous write */ while(EECR & (1<<EEPE)) ; /* Set up address and data registers */ EEAR = uiAddress; EEDR = ucData; /* Write logical one to EEMPE */ EECR |= (1<<EEMPE); /* Start eeprom write by setting EEPE */ EECR |= (1<<EEPE); } |
|
| Автор: | the_bull [ Чет Авг 06, 2009 4:00 pm ] |
| Заглавие: | |
Cvetanov благодаря ти за помоща, но пак нищо не става. Значи сорса който си ми дал за какъв контролер е? Защото на тая атмега флаговете са и с имена: EECR-> EERIE EEMWE EEWE EERE Ако някой поне обясни кой флаг за какво е. Тези с R са за четене сигурно, докато с W за запис но нещо не се ориентирам как става номера.Предполагам дига се някой от флаговете и на адресните регистри се присвоява адрес, на дата регистрите стойността след което флага се нулира и всичко си продължава. Поне добивам горе долу някаква представа за нещата. Гледам в хелпа има някакъв хедерен файл с име eeprom.h в него има някакви готови функции ще разгледам и тях. Но ако някой знае как става да пише |
|
| Автор: | Cvetanov [ Чет Авг 06, 2009 4:10 pm ] |
| Заглавие: | |
кода който съм ти дал е от дейташийта на тини2313 този е за мега32 стр 21 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); } http://www.atmel.com/dyn/resources/prod ... oc2503.pdf добре е да прочетеш секцията за ЕЕПРОМ-а за да ти се изяснят нещата |
|
| Автор: | bobyper [ Чет Авг 06, 2009 6:43 pm ] |
| Заглавие: | |
Два варианта 1) Чрез таймер. Пускаш таймер да работи с външни импулси. На входа на таймера подаваш импулсите дето ще ги броиш. Като ти потрябва , четеш таймера и гледаш коко са импулсите до момента 2) Пускаш импулсите на вход за прекъсване. На всяко прексъване ти си увеличаваш променлива дето ще ти показва колко импулси са дошли |
|
| Автор: | RM [ Чет Авг 06, 2009 6:51 pm ] | |||||||||
| Заглавие: | ||||||||||
След като напишеш успешно програмата ... препиши я на някои друг компилатор JAR, CVAVR ... за да стане както трябва Примерно цялата мъка се свежда до : (CVAVR)
|
||||||||||
| Автор: | syrax [ Чет Окт 29, 2009 10:08 pm ] |
| Заглавие: | |
в дейташиита на мегите има прости функции за писане по ЕЕПРОМА |
|
| Страница 1 от 1 | Часовете са според зоната UTC + 2 часа [ DST ] |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|