WinAvr в вопросах и ответах

Обсуждаем контроллеры компании Atmel.
juzik
Встал на лапы
Сообщения: 128
Зарегистрирован: Пт сен 23, 2011 23:49:20
Откуда: Симферополь, Украина

Re: WinAvr в вопросах и ответах

Сообщение juzik »

А что есть CS0? Вы его определили? Может имеется в виду CS00/CS01/CS02? Какой камень?
Реклама
slavik.ksu
Первый раз сказал Мяу!
Сообщения: 38
Зарегистрирован: Пн авг 01, 2011 21:59:21

Re: WinAvr в вопросах и ответах

Сообщение slavik.ksu »

ATmega8515.
ну точно же! :) CS0 это CS00 :) и все заработало! прошу прощения за такую глупость :) спасибо большое!
Реклама
ut1wpr
Вымогатель припоя
Сообщения: 581
Зарегистрирован: Ср янв 05, 2011 10:03:18

Re: WinAvr в вопросах и ответах

Сообщение ut1wpr »

slavik.ksu писал(а):ATmega8515.
ну точно же! :) CS0 это CS00 :) и все заработало! прошу прощения за такую глупость :) спасибо большое!

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

TCCR0 = (1<<CS00) | (1<<CS01);
Где-то так...
С уважением,
Виктор.
TICLIR
Встал на лапы
Сообщения: 134
Зарегистрирован: Вс авг 01, 2010 16:05:25

Re: WinAvr в вопросах и ответах

Сообщение TICLIR »

Здравствуйте. Подскажите как быть,допустим, составил программу с использованием EEPROM,прошиваем МК,а в EEPROM,после прошивки, данные имеют максимальные значения. Вот как с помощью WinAVR в EEPROM заносить определённые данные.
Реклама
Эиком - электронные компоненты и радиодетали
Мастер Ломастер
Поставщик валерьянки для Кота
Сообщения: 1995
Зарегистрирован: Ср май 11, 2011 21:37:45
Откуда: Цветочный город
Контактная информация:

Re: WinAvr в вопросах и ответах

Сообщение Мастер Ломастер »

если вы в своей программе описали переменные (ячейки) в eeprom, то при компиляции будет сгенерирован автоматически файл с начальным содержимым - этот файл просто программатором прошиваете и все.

однако, более правильным было бы, если бы ваша программа могла определить, что EEPROM не содержит начальных значений, и самостоятельно прошить их туда. если вы сделаете проверку EEPROM с подсчетом контрольной суммы - это в определенном смысле повысит надежность вашего девайса.
битва с дураками проиграна, победители торжествуют. слава победителям!
Реклама
TICLIR
Встал на лапы
Сообщения: 134
Зарегистрирован: Вс авг 01, 2010 16:05:25

Re: WinAvr в вопросах и ответах

Сообщение TICLIR »

Так вот про это и говорю, мне надо как то внести,при прошивки, какое то значение EEPROM, т.к. при запуски программы
если в EEPROM все нули или максимум, получатся белеберда, которую можно исправить,но это очень долго, числа большие.
Реклама
Мастер Ломастер
Поставщик валерьянки для Кота
Сообщения: 1995
Зарегистрирован: Ср май 11, 2011 21:37:45
Откуда: Цветочный город
Контактная информация:

Re: WinAvr в вопросах и ответах

Сообщение Мастер Ломастер »

так что не понятно-то? прошейте сгенерированный компилятром файл для EEPROM
битва с дураками проиграна, победители торжествуют. слава победителям!
juzik
Встал на лапы
Сообщения: 128
Зарегистрирован: Пт сен 23, 2011 23:49:20
Откуда: Симферополь, Украина

Re: WinAvr в вопросах и ответах

Сообщение juzik »

Если проблема заключается в том как выставить данные, которые надо залить в мк, то этот пример может помочь:

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

static EEMEM HISTORY_MEASURE history_dump = 
{
	{
		{{0,0,0,0,0,0,0}, 0,0,0,false}, {{0,0,0,0,0,0,0}, 0,0,0,false}, {{0,0,0,0,0,0,0}, 0,0,0,false}
	},

	0
};
Здесь в EEPROM создается и инициализируется структура history_dump. Значения можно выставлять произвольные. При компиляции копилятор сделает помимо hex файлика еще и eep файл. Его нужно залить в мк отдельно. Это и будет прошивка EEPROM'а
TICLIR
Встал на лапы
Сообщения: 134
Зарегистрирован: Вс авг 01, 2010 16:05:25

Re: WinAvr в вопросах и ответах

Сообщение TICLIR »

juzik писал(а):Если проблема заключается в том как выставить данные, которые надо залить в мк, то этот пример может помочь:

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

static EEMEM HISTORY_MEASURE history_dump = 
{
	{
		{{0,0,0,0,0,0,0}, 0,0,0,false}, {{0,0,0,0,0,0,0}, 0,0,0,false}, {{0,0,0,0,0,0,0}, 0,0,0,false}
	},

	0
};
Здесь в EEPROM создается и инициализируется структура history_dump. Значения можно выставлять произвольные. При компиляции копилятор сделает помимо hex файлика еще и eep файл. Его нужно залить в мк отдельно. Это и будет прошивка EEPROM'а
Да проблема именно в этом,я пробовал ставить ваш код, компилятор ругается, этот код совместим с WinAVR.
Мастер Ломастер
Поставщик валерьянки для Кота
Сообщения: 1995
Зарегистрирован: Ср май 11, 2011 21:37:45
Откуда: Цветочный город
Контактная информация:

Re: WinAvr в вопросах и ответах

Сообщение Мастер Ломастер »

рассказы про ругательства компилятора без приведенных конкретных сообщений об ошибках не принимаются. может, вы забыли avr/eeprom.h проинклюдить?
битва с дураками проиграна, победители торжествуют. слава победителям!
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

Re: WinAvr в вопросах и ответах

Сообщение vitalik_1984 »

Мастер Ломастер писал(а):может, вы забыли avr/eeprom.h проинклюдить?
Может и забыли, но этого может быть и недостаточно.
Неясно что за имя HISTORY_MEASURE его тоже нужно объявить.
В поисках истины человек развивается.
ULF21
Родился
Сообщения: 1
Зарегистрирован: Вт мар 06, 2012 14:33:44

Re: WinAvr в вопросах и ответах

Сообщение ULF21 »

Здравствуйте.
Пишу Bootloader для mega1280 на WinAVR-20100110. Не могу найти в описании WinAVR как перенести
таблицу прерываний в секцию bootloader'a. На ассемблере с помощью директивы .org, а здесь неясно.
Последний раз редактировалось ULF21 Вт мар 06, 2012 20:52:04, всего редактировалось 1 раз.
TICLIR
Встал на лапы
Сообщения: 134
Зарегистрирован: Вс авг 01, 2010 16:05:25

Re: WinAvr в вопросах и ответах

Сообщение TICLIR »

Всё Спасибо кто пытался помочь, а решение нашёл вот такое, при объявлении адреса EEPROMа, просто пишется
данные:
EEMEM uint16_t adres2=4220;
Не знаю правельно или нет,но работает.
Мастер Ломастер
Поставщик валерьянки для Кота
Сообщения: 1995
Зарегистрирован: Ср май 11, 2011 21:37:45
Откуда: Цветочный город
Контактная информация:

Re: WinAvr в вопросах и ответах

Сообщение Мастер Ломастер »

просто удивительно, как это вы смогли найти решение, котрое я вам бог знает когда сказал.
Мастер Ломастер писал(а):если вы в своей программе описали переменные (ячейки) в eeprom, то при компиляции будет сгенерирован автоматически файл с начальным содержимым - этот файл просто программатором прошиваете и все.
битва с дураками проиграна, победители торжествуют. слава победителям!
TICLIR
Встал на лапы
Сообщения: 134
Зарегистрирован: Вс авг 01, 2010 16:05:25

Re: WinAvr в вопросах и ответах

Сообщение TICLIR »

Мастер Ломастер писал(а):просто удивительно, как это вы смогли найти решение, котрое я вам бог знает когда сказал.
Мастер Ломастер писал(а):если вы в своей программе описали переменные (ячейки) в eeprom, то при компиляции будет сгенерирован автоматически файл с начальным содержимым - этот файл просто программатором прошиваете и все.
Может Вы и правы в с своих объяснениях, но я ни чего не понял, мне бы примеры, но всё равно Спасибо.
Мастер Ломастер
Поставщик валерьянки для Кота
Сообщения: 1995
Зарегистрирован: Ср май 11, 2011 21:37:45
Откуда: Цветочный город
Контактная информация:

Re: WinAvr в вопросах и ответах

Сообщение Мастер Ломастер »

TICLIR писал(а):Может Вы и правы в с своих объяснениях, но я ни чего не понял, мне бы примеры, но всё равно Спасибо.
на будущее: если вам нужен пример, то так и пишите "приведите пример для вот этого". у нас, экстрасенсов, все как у гугла: какое ключевое слово ввел - то и получил в выдаче :)))
битва с дураками проиграна, победители торжествуют. слава победителям!
Аватара пользователя
shurikss123
Грызет канифоль
Сообщения: 271
Зарегистрирован: Пн окт 25, 2010 20:47:04
Откуда: Казахстан, Астана

Re: WinAvr в вопросах и ответах

Сообщение shurikss123 »

Всем добра, во общем столкнулся с такой проблемой, то ли я, то ли что?
если я делаю так

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

char buffer1[6];
ultoa((0x6d6 * 0x32), buffer1, 10);
LCDsendString(buffer1);
на дисплее получаю значение 21964 хотя по моей логике и всем возможным калькуляторам 87500
но если сделать так

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

char buffer1[6];
ultoa(87500, buffer1, 10);
LCDsendString(buffer1);
то выдаст нормально как и положено 87500, кто нить может мне разъяснить в чем проблема, если во мне, исправлюсь.
Изображение
Мастер на все руки, кручу, кручу, кручу и матерюсь
Повелитель паяльной станции, лома, и пинцета!!!
Аватара пользователя
IfoR
Поставщик валерьянки для Кота
Сообщения: 2029
Зарегистрирован: Сб ноя 15, 2008 10:09:56
Откуда: г. Тула
Контактная информация:

Re: WinAvr в вопросах и ответах

Сообщение IfoR »

Всё дело в неявном приведении типов. Смотри, у тебя два числа: 0x6d6 и 0x32. Здесь, по видимому, если это возможно, компилятор приводит эти числа к типу int, т.е. здесь: 2-х байтовое целое. А теперь попробуем это посчитать. Как ты правильно нашёл, это будет равно 87500, но т.к. у нас число содержится в 2-х байтах, то происходит переполнение: 87500 - 65536 = 21964 (где 65536 = 2^16 - максимально возможное значение числа в 2-х байтах + 1) - это то что и вывелось на экран.
Чтобы оно правильно посчиталось, нужно явно указать компилятору, что число таки имеет тип long int, т.е. вот так:

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

char buffer1[6];
ultoa((0x6d6L * 0x32L), buffer1, 10);
LCDsendString(buffer1); 
Оно должно работать.
Изображение
/dev/urandom - гигабайты информации.

OS: openSUSE 13.2 (x86_64)
Аватара пользователя
shurikss123
Грызет канифоль
Сообщения: 271
Зарегистрирован: Пн окт 25, 2010 20:47:04
Откуда: Казахстан, Астана

Re: WinAvr в вопросах и ответах

Сообщение shurikss123 »

IfoR писал(а):Всё дело в неявном приведении типов. Смотри, у тебя два числа: 0x6d6 и 0x32. Здесь, по видимому, если это возможно, компилятор приводит эти числа к типу int, т.е. здесь: 2-х байтовое целое. А теперь попробуем это посчитать. Как ты правильно нашёл, это будет равно 87500, но т.к. у нас число содержится в 2-х байтах, то происходит переполнение: 87500 - 65536 = 21964 (где 65536 = 2^16 - максимально возможное значение числа в 2-х байтах + 1) - это то что и вывелось на экран.
Чтобы оно правильно посчиталось, нужно явно указать компилятору, что число таки имеет тип long int, т.е. вот так:

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

char buffer1[6];
ultoa((0x6d6L * 0x32L), buffer1, 10);
LCDsendString(buffer1); 
Оно должно работать.
Вот спасибо я даже и не знал что так все просто.
Изображение
Мастер на все руки, кручу, кручу, кручу и матерюсь
Повелитель паяльной станции, лома, и пинцета!!!
Аватара пользователя
shurikss123
Грызет канифоль
Сообщения: 271
Зарегистрирован: Пн окт 25, 2010 20:47:04
Откуда: Казахстан, Астана

Re: WinAvr в вопросах и ответах

Сообщение shurikss123 »

Ещё вопросик к про спринтф, если добавить в код запись то размер увеличиться на 1,5 кб.

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

sprintf(buffer1,"%3i",d);
Program:    8264 bytes (50.4% Full)
(.text + .data + .bootloader)
если использовать ultoa

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

ultoa(d, buffer1, 10);
Program:    6756 bytes (41.2% Full)
(.text + .data + .bootloader)
если смысл ее (sprintf) использовать, если я ее буду использовать много кратно, памяти в принципе не жалко (mega168)
Изображение
Мастер на все руки, кручу, кручу, кручу и матерюсь
Повелитель паяльной станции, лома, и пинцета!!!
Ответить

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