Отговори на тема  [ 8 мнения ] 
ATmega 32 въпрос от начинаещ! 
Автор Съобщение
Ранг: Новодошъл
Ранг: Новодошъл
Аватар

Регистриран на: Съб Авг 18, 2007 11:39 am
Мнения: 137
Местоположение: Русе
Мнение ATmega 32 въпрос от начинаещ!
Започнал съм едно проект че като за начинаещ, но имам проблем. Та въпросния проект е с ATmega 32 като по същество представлява прост брояч на импулси подавани от рид-ампула, като контролера брои и извежда резултата на динамична индикация с 7-сегментни индикатори.До тук се справих криво лево с задачката, но ми се иска да разуча още неща от контролера като например как да записвам променливи в ЕЕПРОМ памета. Мисля стойността която е натрупал брояча да я съхранявам в ЕЕПРОМА но нещо не мога да разбера как се пишат променливи там и какво е нужно. Четох даташита и си играх с примерни кодове дето са дадени там и нищо не става. Ето примерен код от там:
Код:
   char cSREG;
cSREG = SREG; /* store SREG value */
/* disable interrupts during timed sequence */
asm("cli");
EECR |= (1<<EEMWE); /* start EEPROM write */

EECR |= (1<<EEWE);
SREG = cSREG; /* restore SREG value (I-bit) */

Както се вижда пиша на С. От асемблер почти не разбирам (в момента се опитвам да науча и него но съм в началото :) )
Като среда за програмиране използвам AVR Studio 4.
Ще съм ви благодарен ако покажете как може да си пиша променливи и също така ако дадете примерни сорсове за да експериментирам. Това е третият ми проект като първия беше бягащи светлини, а втория PWМ така че още съм много в началото на тази материя, но се надявам с ваша помощ да напредна. :)


Чет Авг 06, 2009 2:46 pm
Профил
Ранг: Новодошъл
Ранг: Новодошъл
Аватар

Регистриран на: Пон Фев 21, 2005 2:14 pm
Мнения: 191
Местоположение: Varna
Мнение 
В кода, който си дал само се разрешава писането. След вдигането на двата флага трябва да се сетне адреса, на който ще пишеш и съответно да се зашише байт посредством дейта регистъра.

//
Моя грешка преди сетването на флаговете се задават адреса и данните

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);
}

_________________
Шанс едно на милион, обикновено се случва девет от десет пъти.


Чет Авг 06, 2009 3:13 pm
Профил ICQ
Ранг: Новодошъл
Ранг: Новодошъл
Аватар

Регистриран на: Съб Авг 18, 2007 11:39 am
Мнения: 137
Местоположение: Русе
Мнение 
Cvetanov благодаря ти за помоща, но пак нищо не става. Значи сорса който си ми дал за какъв контролер е? Защото на тая атмега флаговете са и с имена:
EECR->
EERIE
EEMWE
EEWE
EERE
Ако някой поне обясни кой флаг за какво е. Тези с R са за четене сигурно, докато с W за запис но нещо не се ориентирам как става номера.Предполагам дига се някой от флаговете и на адресните регистри се присвоява адрес, на дата регистрите стойността след което флага се нулира и всичко си продължава.
Поне добивам горе долу някаква представа за нещата.
Гледам в хелпа има някакъв хедерен файл с име eeprom.h в него има някакви готови функции ще разгледам и тях. Но ако някой знае как става да пише :)


Чет Авг 06, 2009 4:00 pm
Профил
Ранг: Новодошъл
Ранг: Новодошъл
Аватар

Регистриран на: Пон Фев 21, 2005 2:14 pm
Мнения: 191
Местоположение: Varna
Мнение 
кода който съм ти дал е от дейташийта на тини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
добре е да прочетеш секцията за ЕЕПРОМ-а за да ти се изяснят нещата

_________________
Шанс едно на милион, обикновено се случва девет от десет пъти.


Чет Авг 06, 2009 4:10 pm
Профил ICQ
Ранг: Новодошъл
Ранг: Новодошъл
Аватар

Регистриран на: Съб Авг 18, 2007 11:39 am
Мнения: 137
Местоположение: Русе
Мнение 
По късно ще си поиграя с ЕЕПРОМА отново благодаря за помоща :)

Друго да попитам свързано с работата по това устройство. Има ли алгоритъм и евентуално как става броене на импулси с различна честотата и различна продължителност. Предполагам най-удачно е да броя по преден или заден фронт на импулса. Как става броенето по фронт като не знам нито честотата (тя е променлива) също така и дължината на импулса (също може да се мени). Ще трябва ли хардуерно да включвам допълнително елементи или може да се справи контролера софтуерно.
Ето малко инфо за какво става дума :)
Изображение


Чет Авг 06, 2009 6:32 pm
Профил
Ранг: Ориентиран
Ранг: Ориентиран

Регистриран на: Вто Яну 31, 2006 11:11 pm
Мнения: 295
Местоположение: София
Мнение 
Два варианта
1) Чрез таймер. Пускаш таймер да работи с външни импулси. На входа на таймера подаваш импулсите дето ще ги броиш. Като ти потрябва , четеш таймера и гледаш коко са импулсите до момента
2) Пускаш импулсите на вход за прекъсване. На всяко прексъване ти си увеличаваш променлива дето ще ти показва колко импулси са дошли


Чет Авг 06, 2009 6:43 pm
Профил
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Нед Окт 19, 2008 7:26 pm
Мнения: 673
Мнение 
След като напишеш успешно програмата ... препиши я на някои друг компилатор JAR, CVAVR ... за да стане както трябва :D

Примерно цялата мъка се свежда до :
(CVAVR)
Код:
eeprom long int tmp;
tmp=123;

_________________
Вниманиене съмвишист....ИЙ.


Чет Авг 06, 2009 6:51 pm
Профил
Ранг: Новодошъл
Ранг: Новодошъл
Аватар

Регистриран на: Сря Яну 18, 2006 7:19 pm
Мнения: 127
Мнение 
в дейташиита на мегите има прости функции за писане по ЕЕПРОМА :) на С и на АСМ


Чет Окт 29, 2009 10:08 pm
Профил ICQ
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 8 мнения ] 

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 2 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни