atmega16 использование встроенной памяти

Обсуждаем контроллеры компании Atmel.
Ответить
Открыл глаза
Сообщения: 76
Зарегистрирован: Чт ноя 13, 2014 19:37:34

Сообщение Stanislavich »

novarobotix писал(а):
Stanislavich писал(а):а это сколько в unsigned char data[255]-х ?
Ну это уже зависит от того, как много и какие числа ты будешь хранить, можешь в ручную посчитать)
Реклама
Опытный кот
Аватара пользователя
Сообщения: 759
Зарегистрирован: Пн май 12, 2014 06:13:33

Сообщение novarobotix »

Stanislavich писал(а):Ну это уже зависит от того, как много и какие числа ты будешь хранить, можешь в ручную посчитать)
ну получается 256 чисел от 0 до 255. а сколько на это нужно символов двоичного кода? как переводить? и 512 байт это точно 4144 символов двоичного кода? может в 2 раза меньше?и зачем переводить в символы двоичного кода?
в даташите сказано память равна 512 байт, число FF то есть 256 равно одному байту, то есть поместится 512 штук FF, у меня в unsigned char data[255] 256 штук FF, итого я могу хранить 2 штуки unsigned char data[255] в 512 байтах памяти. так?
Глупый не задает вопросы. Глупый и так все знает.
Реклама
Открыл глаза
Сообщения: 76
Зарегистрирован: Чт ноя 13, 2014 19:37:34

Сообщение Stanislavich »

novarobotix писал(а):и 512 байт это точно 4144 символов двоичного кода? может в 2 раза меньше?и зачем переводить в символы двоичного кода?
в даташите сказано память равна 512 байт, число FF то есть 256 равно одному байту, то есть поместится 512 штук FF, у меня в unsigned char data[255] 256 штук FF, итого я могу хранить 2 штуки unsigned char data[255] в 512 байтах памяти. так?
FF это не 256, а 11111111, т.е. 8 бит, 8*256=2048 бит всего, при условии, что у тебя все эти ячейки забиты твоими FF ами. 512 байт это примерно 4096 бит (оговорочка). В любом случае должно хватить. Но неужели ты хранишь целых 256 параметров? Что это за устройство такое)
А вообще FF это 255(11111111), 256 - "100000000" (100 в 16ричной)
Опытный кот
Аватара пользователя
Сообщения: 759
Зарегистрирован: Пн май 12, 2014 06:13:33

Сообщение novarobotix »

да точно, 255.ну в принципе так оно и будет, это я ошибся.ЦАП 8-ми битный, 255 значений, цапом генерю постоянное напряжение и выдаю его на катушку шагового мотора постепенно увеличивая. оказалось сильно неравномерное движение ротора при линейном увеличении напряжения на обмотке. это из за того что чем ближе магнит к обмотке тем сильнее притяжение и зависимость квадратичная. поэтому в результате движение волнами получилось. посему теперь буду ваять датчик линейного перемещения, вычислять функцию необходимую для линейного перемещения вала мотора, заносить её в память МК и двигать мотором с её помощью. эта функция и есть 255 необходимых значений ЦАП.
Глупый не задает вопросы. Глупый и так все знает.
Реклама
Эиком - электронные компоненты и радиодетали
Открыл глаза
Сообщения: 76
Зарегистрирован: Чт ноя 13, 2014 19:37:34

Сообщение Stanislavich »

Да и вообще, зачем разглагольствовать. Тема заезженная, попробуй на натуре, все равно 100 тыс. не наберешь так быстро.
Реклама
Опытный кот
Аватара пользователя
Сообщения: 759
Зарегистрирован: Пн май 12, 2014 06:13:33

Сообщение novarobotix »

а работа идёт, всё в процессе, датчик из оптрона почти готов, сетка рисок для датчика в процессе изготовления, программу обдумываю.
а обсуждение сколько поместится данных в памяти я не считаю пустой болтовнёй. сколько там в реале поместится ещё надо посмотреть на практике. может МК там какую-то служебную информацию хранит(указатели или ещё что-то) и реально туда влезает меньше. может кто-то юзал в реале и есть реальный опыт. а сколько влезет реально важная информация, так как для разных скоростей мотора функция по идее разная будет, и может понадобится больше данных хранить - для каждого диапазона скоростей своя функция. если не хватит места внутри тогда снаружи буду внешний епром лепить, но хочется обойтись внутренним.

кстати, если сделать код

Код: Выделить всё

 eeprom unsigned char data[255];
то при каждом включении в массив нули будут писаться? он же типа определяется, и данные потом каждый раз заносить заново надо. мне же надо чтобы при включении данные считывались из епром и потом работать с ними. ну и записать их как-то туда один раз.

хочется что-то типа этого:

Код: Выделить всё


unsigned char data[255];

for (i=0; i < 255; i++)    {   
 data[i]=(читаем значение из ячейки памяти номер i)
   } 

sub //калибровка
{
for (i=0; i < 255; i++)    {  
ячейки памяти номер i=какое-то число которое вычисляем;
}
}
Вложения
DipTrace PCB - mikro.pdf
(10.78 КБ) 131 скачивание
Глупый не задает вопросы. Глупый и так все знает.
Реклама
Говорящий с текстолитом
Аватара пользователя
Сообщения: 1525
Зарегистрирован: Чт июн 10, 2010 20:11:19

Сообщение COKPOWEHEU »

может МК там какую-то служебную информацию хранит(указатели или ещё что-то)
Нет.
кстати, если сделать код
eeprom unsigned char data[255];
то при каждом включении в массив нули будут писаться?
Скорее всего, в атрибут eeprom включен атрибут noinit, иначе было бы сложно использовать.
На чем пишете? В gcc-avr, включая AVRStudio (про новые Atmel Studio сказать ничего не могу) автоматической записи не происходит, надо явно вызвать eeprom_write_byte() или подобные из eeprom.h.
В cvavr вроде запись идет при присвоении, что хуже в плане безопасности.
Опытный кот
Аватара пользователя
Сообщения: 759
Зарегистрирован: Пн май 12, 2014 06:13:33

Сообщение novarobotix »

пишу на CodeVisionAV
Глупый не задает вопросы. Глупый и так все знает.
Опытный кот
Аватара пользователя
Сообщения: 759
Зарегистрирован: Пн май 12, 2014 06:13:33

Сообщение novarobotix »

COKPOWEHEU писал(а):
может МК там какую-то служебную информацию хранит(указатели или ещё что-то)
Нет.
кстати, если сделать код
eeprom unsigned char data[255];
то при каждом включении в массив нули будут писаться?
Скорее всего, в атрибут eeprom включен атрибут noinit, иначе было бы сложно использовать.
обнуляется при ресете
как ему noinit прописать?

короче заработало. поставил галочку eesave во фьюзах
Глупый не задает вопросы. Глупый и так все знает.
Ответить

Вернуться в «AVR»