CodeVision AVR в вопросах и ответах

Обсуждаем контроллеры компании Atmel.
Ответить
Поставщик валерьянки для Кота
Сообщения: 1957
Зарегистрирован: Пт окт 31, 2008 09:38:55
Откуда: Одесса

Сообщение clawham »

дело не в меге или ещё чёмто мегу если и брать то 168 ибо 16 мега больно жирная и большая...да и смысл? мн ечисто спортивный интерес...так то всё влезло и ещё 2 процента свободно
просто хочется узнать можно ли как-то ещё!
а я вот влоаты ненавижу...попробуйте к числу 1600000000 прибавить 1 хоть 1000 раз прибавлять будете толку от этого будет НОЛЬ!
но в то же время лонгинта мне уже как бы тоже мало...в притык я бы сказал...потому и хочу узнать есть ли резервы освободить флеш текстом(Еепрома то внутренняя имеется ничо не надо подключать....)
чтоб написать свои процедуры работы с 64 битными интами
П.С. А вы мой проект видели?
Там и кварц и ног хватило и входы и прерывания и экран 44780 разместился свободно и ещё свободных осталось ног...
П.С. 1wire 1 ногу отберет а код для одного устройства вообще мизерно места занимает!!!
Что нас не убило сделало нас осторожней
Не доверяйте русским лужам - это может быть вход в метро.
Контактная информация:
Реклама
Открыл глаза
Аватара пользователя
Сообщения: 53
Зарегистрирован: Сб май 07, 2011 14:35:24
Откуда: Россия

Сообщение rs39 »

Здравствуйте! Помогите новичку в CVAVR.
Совсем моск сломал в голове каша.
Вопрос по передаче из UART на COM порт.
На примере термометра и 2-х DS18b20 делаю все работает ок, терминалом в пк принимаю построчно:
temp 1: 27'C
temp 2: 23'C
и так по кругу.
Если правильно понимаю то код на COM передается в аксии. А мне нужно в последствии передать это на другое приемное устройство не на пк, и не в аксии а в байтах. Причем символы алфавита отсечь а передать только номер датчика и значение температуры.
Как это сделать никак невразумлю. Нужны ли дополнительные преобразования и какие?
Реклама
Встал на лапы
Аватара пользователя
Сообщения: 132
Зарегистрирован: Вт июл 14, 2009 09:27:37
Откуда: Донецк, Украина

Сообщение hd44780 »

rs39 писал(а):Как это сделать никак невразумлю. Нужны ли дополнительные преобразования и какие?
Ну как-то так.

шлёшь 3 байта на датчик:
1-й байт - номер датчика
2,3 байты - температура, умноженная на 10 (чтоб десятые были и не возиться с плав. точкой). В порядке младший-старший. Или наоборот - всё равно.

Сколько датчиков столько таких 3-х байтовых посылок.
Я что-то родственное делал лет 6-7 назад. Работало идеально :)) .
Правда датчик был один, но это непринципиально.
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1288
Зарегистрирован: Пн апр 14, 2008 12:54:35
Откуда: Город ГЕРОЙ Ленинград

Сообщение Волосатый »

Помогите советом. Прошиваю МК встроенным в CVAVR прогером. Что бы залить новую прошивку мне приходится нажимать "Erase chip". При этом стирается и eeprom. Так вот есть ли способ стереть только flash память не трогая eeprom?

П.С. почему мне приходится стирать чип - после залития новой прошивки, независимо от того больше она или меньше, или я вообще одну циферку подправил в коде, программатор при проверке залитого выдает CRC error на таком-то адресе, и естесственно устройство не работает...

П.П.С. Камень mega8535. Прогер STK200
Опыт приходит сразу после того, как он был нужен...
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18678
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

прошейте фьюз EESAVE - и при последующем стирании чипа EEPROM не будет стираться.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Реклама
Открыл глаза
Аватара пользователя
Сообщения: 53
Зарегистрирован: Сб май 07, 2011 14:35:24
Откуда: Россия

Сообщение rs39 »

Так вот же, переключатель в самом низу окна прошивальщика (см. скриншот).
Ставим галку и EEPROM не будет затираться, не при записи не при стирании.
Вложения
eeprom.PNG
(20.31 КБ) 411 скачиваний
Реклама
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1288
Зарегистрирован: Пн апр 14, 2008 12:54:35
Откуда: Город ГЕРОЙ Ленинград

Сообщение Волосатый »

ARV писал(а):прошейте фьюз EESAVE - и при последующем стирании чипа EEPROM не будет стираться.
Спасибо, помогло :)
rs39 писал(а):Так вот же, переключатель в самом низу окна прошивальщика (см. скриншот).
Ставим галку и EEPROM не будет затираться, не при записи не при стирании.
А эта опция автоматом заливает еепром после стирания чипа, это не подходит потому что мне не надо перезаписывать еепром.
Опыт приходит сразу после того, как он был нужен...
Контактная информация:
Опытный кот
Сообщения: 812
Зарегистрирован: Ср мар 18, 2009 21:14:33

Сообщение demiurg301 »

Здравствуйте форумчане.
Посоветуйте пожалуйста внешнее ОЗУ для Atmеga128 c параллельным интерфесом , килобайт на 20-30 , чтобы можно было в CVAVR её подключить и работать не замарачиваясь с написанием процедур. А тоговорят atmelовскую сняли с производства.

ДА , ещё такой вопрос могу ли я повесить на программный i2c в CVAVR 2 разных устройства - RTC PCF8563 и память 24С08 - не будут ли они конфликтовать?
Открыл глаза
Аватара пользователя
Сообщения: 53
Зарегистрирован: Сб май 07, 2011 14:35:24
Откуда: Россия

Сообщение rs39 »

Имеется в наличии энкодер. На выходе у него 10 разрядов. Работает по принципу кода Грея.
Хочу реализовать угломер, с выводом данных на lcd дисплей. Так как разрядов на выходе энкодера больше 8, то подключаю его на 2 порта атмеги. Поясняющий рисунок прилагаю во вложении.
Подскажите алгоритм, как реализовать правильно.
Сам думаю так:
<<В цикле из 10 шагов опрашивать состояние каждого бита порта и складывать данные в переменную либо в массив.>> В конце цикла скидывать значение переменной на lcd, с этим вопросов нет. А вот про цикл и массив - я ничего не усложняю? Может как-то проще можно реализовать? :)
Вложения
encoder.PNG
(6.78 КБ) 423 скачивания
Поставщик валерьянки для Кота
Сообщения: 1995
Зарегистрирован: Ср май 11, 2011 21:37:45
Откуда: Цветочный город

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

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

int grey_code = ((PINA & 0x03) << 8) | PINB; // PINA - старшие 2 бита с энкодера, PINB - младшие 8 бит
и никаких массивов
битва с дураками проиграна, победители торжествуют. слава победителям!
Контактная информация:
Открыл глаза
Аватара пользователя
Сообщения: 53
Зарегистрирован: Сб май 07, 2011 14:35:24
Откуда: Россия

Сообщение rs39 »

Спасибо! Да действительно все проще.. Век живи век учись :)
Открыл глаза
Сообщения: 53
Зарегистрирован: Пт май 13, 2011 21:16:40
Откуда: НИЖЕГОРОДСКАЯ ОБЛ

Сообщение maxpetr1993 »

доброго времени суток)) вообщем проблема в следующем пишу Бегущею строку ,то есть дисплей 8х64 пикселя
,часы, термометр,ну и соответственно текст ,если перемещать символы со с одного знакоместа на другое то конечно это оч просто и проблем нет,а вот чтоб двигать символы на один пиксель в лева или право бьюсь головой об стол))в низ и вверх тоже оч просто)) а вот в бок( тоесть нужно в один отображаймый байт переписывать какуюто часть одного байта и соседнего байта из буфера в котором уже лежит подготовленная картинка )) не прошу кода хоть намекните на нормальном русском языке,а если кусочек для примера покажите ну просто супер будет))
Поставщик валерьянки для Кота
Сообщения: 1995
Зарегистрирован: Ср май 11, 2011 21:37:45
Откуда: Цветочный город

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

вы бегущую-то строку как делаете? 64 вертикальных столбика у вас при помощи чего управляются? небось, сдвиговые регистры? может, надо всего-авсего на 1 такт больше-меньше давать в них, чтобы на 1 пиксел сдвинуть всю строку?
битва с дураками проиграна, победители торжествуют. слава победителям!
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 6322
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Сообщение Jack_A »

clawham писал(а): а я вот влоаты ненавижу...попробуйте к числу 1600000000 прибавить 1 хоть 1000 раз прибавлять будете толку от этого будет НОЛЬ!
А вот это зря. Флоаты не виноваты - причина в ограниченной разрядности. Не зря спецы по численнам методам рекомендуют при суммировании больших массивов данных сначала провести сортировку, и начинать с самых меньших значений, тогда погрешность будет меньше.
У меня в одном проекте работал измеритель мощности ( программный, конечно ), результаты индицировались, и еще нужно все это было непрерывно интегрировать, чтобы получить расход энергии ( что-то типа счетчика ) . Float для быстроты у меня была нестандартная , трехбайтная, но для интегрирования была заведена длинная ( 4 байта мантисса ) переменная, что-то вроде Double float, причем результаты суммировались в течение часа, а затем добавлядись в суммарный расход. Так решился вопрос минимизации вычислительных ресурсов, при этом погрешность вычислений была на порядок меньше инструментальной погрешности аналоговой части.
В общем, голь на выдумки хитра :))
Открыл глаза
Сообщения: 53
Зарегистрирован: Пт май 13, 2011 21:16:40
Откуда: НИЖЕГОРОДСКАЯ ОБЛ

Сообщение maxpetr1993 »

шрифт старый ДОСовский, то есть :

1 байт 1 байт 1 байт ........
2 байт 2 байт 2 байт ......
3 байт 3 байт 3 байт
.....
.....

1 знакоместо 2 знакоместо 3 знакоместо



в памяти лежат с лева на право ,с низу в верх то есть 1 байты (1-8) знакместа
далее 2 байты почереди и тд
строка по 8байт выводиться за одни цикл на 8 шт 595
затем 2 затетем теретья....
Опытный кот
Аватара пользователя
Сообщения: 842
Зарегистрирован: Чт дек 31, 2009 19:27:45
Откуда: Бровари, Україна

Сообщение avreal »

Jack_A писал(а): В общем, голь на выдумки хитра :))
Ещё довольно распространённый способ -- два аккумулятора.
Грубо: пусть значения могут меняться от 0.001 до 1000.0
Всё, что меньше 1 -- накапливаем в одном аккумуляторе, больше или равно -- в другом.
В конце цикла берём сумму аккумуляторов.
Точность немного ниже, чем при сортировке, но гораздо меньше работы.
Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.
Контактная информация:
Открыл глаза
Аватара пользователя
Сообщения: 53
Зарегистрирован: Сб май 07, 2011 14:35:24
Откуда: Россия

Сообщение rs39 »

Мастер Ломастер писал(а):

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

int grey_code = ((PINA & 0x03) << 8) | PINB; // PINA - старшие 2 бита с энкодера, PINB - младшие 8 бит
и никаких массивов
Ок, с этим разобрался с вашей помощью. Еще раз спасибо! :)
А следующий вопрос:
Как отправить значение переменной grey_code по UART на COM порт к примеру? Ведь размер получается больше одного байта, и функцией putchar отправить не получится. Искал инфо об том как отправлять большие числа, но везде только про строки пишут. А это мне не подходит, нужно отправить байтами.
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18678
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

rs39 писал(а):А следующий вопрос:
Как отправить значение переменной grey_code по UART на COM порт к примеру? Ведь размер получается больше одного байта, и функцией putchar отправить не получится. Искал инфо об том как отправлять большие числа, но везде только про строки пишут. А это мне не подходит, нужно отправить байтами.
ну вы даете! может, стОит букваро по Си почитать маленько?!

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

putchar(grey_code & 0xFF);
putchar(grey_code >> 8);
это если вам надо передать в БИНАРНОМ виде. а если в символьном - курите формат printf
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Открыл глаза
Аватара пользователя
Сообщения: 53
Зарегистрирован: Сб май 07, 2011 14:35:24
Откуда: Россия

Сообщение rs39 »

Окей спасибо теперь ясно! :)
Да в том то и дело, со спринтф и другими ф-циями разобрался, а вот с этой мелочью нет. А может не там искал просто :))
Родился
Сообщения: 2
Зарегистрирован: Пн май 16, 2011 13:53:25

Сообщение nedman »

доброго времени суток... вопрос касается таймера на атмега8(извините если задавали много раз. сам не нашел). как написать код ?
если 1 на пине мк, то счетчик начинает работать 5 секунд и посылается на другой пин 1. после работы(5 сек) этот пин ставится в 0. в коде можно использовать разные ножки мк я пойму. только прошу пояснить, чтобы понять.
Ответить

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