реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> PROGMEM, Чтение из массива во FLASH
smk
сообщение Jun 13 2010, 12:12
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Вот так объявлен массив:
Код
unsigned char brightness[256] PROGMEM =
{0,0,1,1,1,2,2,3,3,4,4,4,5,5,6,6,6,7,7,8,8,8,9,9,10,10,10,11,11,12,12,
12,12,13,13,13,13,13,14,14,14,14,15,15,15,16,16,16,16,17,17,17,18,18,
18,19,19,19,19,20,20,20,21,21,21,22,22,22,22,23,23,23,24,24,24,25,25,
25,25,26,26,26,27,27,27,28,28,28,28,29,29,30,30,31,31,32,32,33,34,34,
35,35,36,37,38,38,39,40,41,41,42,43,44,44,45,46,47,48,48,49,50,51,52,
52,53,54,55,56,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,74,
75,76,77,78,79,80,82,83,84,86,87,88,89,91,92,94,95,97,99,101,102,104,
106,107,109,111,113,114,116,118,120,122,123,125,127,129,131,134,136,
138,140,142,145,147,149,151,153,156,158,160,162,164,167,169,171,173,
175,177,179,182,184,186,188,190,192,193,195,197,198,200,202,203,205,
206,208,210,211,213,215,217,218,220,222,223,225,226,228,229,231,232,
233,235,236,237,239,240,241,242,243,244,245,246,247,249,250,251,252,
253,254,255};


Вот так я пытаюсь читать из массива и сравнивать чтоб сформировать ШИМ:
Код
if(pwm>brightness[pwm1]){pb &= ~(1<<5);}
else {pb |= (1<<5);}


Ничего не получается поскольку значение brightness[pwm1] всегда 0. При этом сама переменная изменяет значения. Если использовать вместо pwm1 численное значение, то brightness[pwm1] приобретает верное значение. Как сделать так, чтоб значения из массива читались верно с использованием pwm1 ? Спасибо.


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
Mareng
сообщение Jun 13 2010, 12:18
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 53
Регистрация: 19-02-07
Пользователь №: 25 487



Покажи весь листинг. Что такое pwm и pwm1?
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Jun 13 2010, 12:25
Сообщение #3


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Доступ к PROGMEM константам осуществляется через функции.
Пример чтения байта:
Код
uint8_t br = pgm_read_byte(&brightness[x]);

А вообще читайте доку на avrlibc:
http://www.nongnu.org/avr-libc

Начните с этого:
http://www.nongnu.org/avr-libc/user-manual/FAQ.html

Закрепите этим:
http://www.nongnu.org/avr-libc/user-manual...9c285ed4c630229


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
smk
сообщение Jun 13 2010, 13:00
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Код
uint8_t br = pgm_read_byte(&brightness[x]);

Спасибо, получилось. Доку читал, но уже мозг плавится от жары. Раньше как-то проще было с этим.


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Jun 13 2010, 13:11
Сообщение #5


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(smk @ Jun 13 2010, 17:00) *
уже мозг плавится от жары.
Тепло - это хорошо! У нас ветрюган, дожди и +16...
С ребёнком в коляске никак не выйти на прогулу...

Цитата(smk @ Jun 13 2010, 17:00) *
Раньше как-то проще было с этим.
В avr-gcc всегда так было и никак иначе.


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
zhevak
сообщение Jun 13 2010, 14:33
Сообщение #6


Знающий
****

Группа: Свой
Сообщений: 723
Регистрация: 29-08-05
Из: Березовский
Пользователь №: 8 065



Цитата(smk @ Jun 13 2010, 17:12) *
Вот так объявлен массив:
...
Вот так я пытаюсь читать из массива
...
Ничего не получается
...

Вот так чудесно решается Ваша задача http://www.nongnu.org/avr-libc/user-manual/pgmspace.html
Если с английским не очень, то посмотрите примеры. Почти Ваш случай!


--------------------
Хочешь рассмешить Бога -- расскажи ему о своих планах!
Go to the top of the page
 
+Quote Post
smk
сообщение Jun 14 2010, 16:59
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Цитата
Почти Ваш случай!
Да, спасибо. Кстати, а сколько тактов нужно чтобы присвоить переменной значение элемента массива из FLESH?


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Jun 15 2010, 09:49
Сообщение #8


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(smk @ Jun 14 2010, 20:59) *
Да, спасибо. Кстати, а сколько тактов нужно чтобы присвоить переменной значение элемента массива из FLESH?


www.atmel.com/atmel/acrobat/doc0856.pdf

3 такта.
Соизмеримо с RAM (1-2 такта).


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 14:19
Рейтинг@Mail.ru


Страница сгенерированна за 0.01386 секунд с 7
ELECTRONIX ©2004-2016