Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры Atmega AVR
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/9: Рейтинг темы: голосов - 9, средняя оценка - 4.67
den1kooo
0 / 0 / 0
Регистрация: 08.11.2014
Сообщений: 4
1

Работа с EEPROM (ATMega16)

08.11.2014, 15:20. Просмотров 1786. Ответов 7
Метки нет (Все метки)

как было
Кароче суть в том, что задали лабу а я хз как зделать, весь инет перелазил, а нужно вот что...

Завдання ось таке:

До порту В підключити 8 світлодіодів, а до порту С на 1 і 5 виводити кнопку. В EEPROM створити довільну зміну і занести туди 0.
При натисканні на кнопку 1 збільшувати зміну в степені 2, а при натисканні на кнопку 2 зменшувати. Значення виводити на світлодіоди в двійковій формі.


Как стало:

Прошу извинить заранее, дали задание на выполнение лабораторной. Вот исходные данные:
- к порту В подключено 8 светодиодов
- к порту С на 1 и 5 разряд подключены кнопки
- в произвольную переменную занести ноль и сохранить в EEPROM
- при нажатии на первую кнопку увеличивать переменную в степени двойки, а при нажатии второй кнопки уменьшать, после чего сохранять в EEPROM
- полученные значения переменной выводить на светодиоды порта В в двоичной форме.

Схемы нет в наличии, как подступиться к заданию не знаю, своих наработок нет. В сети Интернет готового не нашел. Заранее спасибо.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.11.2014, 15:20
Ответы с готовыми решениями:

Atmega16. Работа с периферией
Здраствуйте. Нужен проект ввода / вывода информации на базе процессора ATMEGA16 с печатной платой,...

Работа с прерываниями Atmega16
Здравствуйте, недавно с али пришла мне долгожданная железка Atmega16A. Помигал светодиодами - стало...

Лабораторная работа на AtMega16
Добрый день! Никак не могу сделать лабораторную в VmLab. Задание следующее: Реализовать калькулятор...

не корректная работа T/C1 ATmega16
прошу помочь с проектом который представлен ниже, использую таймер 1 для генерации 4-х разных...

Работа с EEPROM на Си
Добрый день! Только начал осваивать Си и возникла необходимость сохранять инфу в EEPROM. Я...

7
raxp
10192 / 6575 / 492
Регистрация: 28.12.2010
Сообщений: 21,166
Записей в блоге: 1
08.11.2014, 15:42 2
0
den1kooo
0 / 0 / 0
Регистрация: 08.11.2014
Сообщений: 4
08.11.2014, 15:54  [ТС] 3
Тогда в таком случае, как можно сделать что бы диоды с порта В зажигать по какомто счетчике в двоичной системе?
0
raxp
10192 / 6575 / 492
Регистрация: 28.12.2010
Сообщений: 21,166
Записей в блоге: 1
08.11.2014, 16:02 4
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
unsigned char myvar = 0;
 
...
 
myvar++;
...
 
DDRB = 0xFF;
...
 
 
 
PORTB = myvar;
if (myvar == 256) myvar = 0;
...
0
08.11.2014, 16:02
den1kooo
0 / 0 / 0
Регистрация: 08.11.2014
Сообщений: 4
08.11.2014, 16:04  [ТС] 5
А можно как то поподробней, бо я пишу код до схемы в codevisioavr.
0
raxp
10192 / 6575 / 492
Регистрация: 28.12.2010
Сообщений: 21,166
Записей в блоге: 1
08.11.2014, 16:44 6
...низзя, берите то что дает мой страдающий ОРВИ организм. Тем более что во втором посту есть все, что нужно для решения проблемы.
0
den1kooo
0 / 0 / 0
Регистрация: 08.11.2014
Сообщений: 4
08.11.2014, 17:20  [ТС] 7
У меня есть 1 вопрос. Как переменную чаровского типа записать в eeprom, что бы потом перезапустить проект и то что было насчитано в чар в предедущий раз сразу автоматически стало и продолжало считать дальше.
Свой код прилагается)

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include <mega16.h>
#include <delay.h>
unsigned char myvar = 0;
 
eeprom char mar = 0;
 
 
void main(void)
{
DDRB = 0b11111111;          
PORTB = 0b00000000;
DDRC.1 = 0;
DDRC.5 = 0;
PORTC.1 = 1;
PORTC.5 = 1;
 
while (1)
      {
      
if(PINC.1 == 0){  
myvar++;   
delay_ms(100);
PORTB = myvar;
if (myvar == 256) {
delay_ms(200);
myvar = 0;};
        };
if(PINC.5 == 0){
myvar--;   
delay_ms(100);
PORTB = myvar;
if (myvar == 256) {
delay_ms(200);
myvar = 0;};
};
      };  
      
}
0
raxp
10192 / 6575 / 492
Регистрация: 28.12.2010
Сообщений: 21,166
Записей в блоге: 1
08.11.2014, 18:14 8


C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
// EEARH, EEARL - registri adressov danih v EEPROM 
// EEDR - Register Dannih v EEPROM 
// EECR - Register kontrolya sostoyaniya EEPROM
// EERIE - Register ожидания доступности EECR
// EEMWE - Register монопольного разрешения            записи EECR
void EEPROM_write(unsigned int uiAddress, unsigned char ucData)
{
while(EECR & (1<<EERIE));
EEAR = uiAddress;
EEDR = ucData;
EECR |= (1<<EEMWE);
EECR |= (1<<EERIE);
}
 
unsigned char EEPROM_read(unsigned int uiAddress)
{
while(EECR & (1<<EEWE));
EEAR = uiAddress;
EECR |= (1<<EERE);
return EEDR;
}
 
 
void main(void){
 unsigned int EEDATA1;
 
 _SEI();
 
 EEDATA1 = EEPROM_read(0x00); //read EEPROM-
 EEPROM_write(0x00, 123);
 
 while (1){ // cycle program
 
}
}
0
08.11.2014, 18:14
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.11.2014, 18:14

Работа с EEPROM
Нужно сделать для данной программы реализацию с памятью EEPROM. Начало было сделано , не могу...

Работа с EEPROM
Здравствуйте. Подскажите пожалуйста, каким образом я могу адресоваться к EEPROM в CvAVR? Т.е. по...

atmega16 - работа с SD карточкой на CodeVisionAvr
С помощью стандартной библиотеки пытаюсь инициализировать карточку, #include &lt;mega16.h&gt; //...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru