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

Обсуждаем контроллеры компании Atmel.
hfelyx
Встал на лапы
Сообщения: 102
Зарегистрирован: Вт дек 28, 2010 18:25:31

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

Сообщение hfelyx »

Спасибо.А как сохранить настройки этих кнопок,в памяти,чтоб при пропадании питания и потом его появлении,они сохранились?
Реклама
DDark
Открыл глаза
Сообщения: 73
Зарегистрирован: Вт июн 22, 2010 20:15:17

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

Сообщение DDark »

прошу прощения, уже обращался с данным вопросом но все таки... не могу дать ладу с АЦП меги16... постоянно присутствует на ножке некоторое малое напряжение (около 0.1 - 0.2 В), пытаюсь подключить датчик LM35. пробовал и напрямую и через резистор...
напрямую - занижает показания, через резистор - АЦП дает 0... плюс к этому показания "скачут", то есть вывожу на дисплей каждые 0.5 сек и при напряжении выхода LM35 в 0.3В (т.е 28 С) на дисплее отображает вперемешку значения от 12 до 18...

с АЦП работаю так:

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

// процедура чтения значения АЦП
unsigned char read_adc(unsigned char adc_input)
{
ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
// Delay needed for the stabilization of the ADC input voltage
delay_us(100);
// Start the AD conversion
ADCSRA|=0x40;
// Wait for the AD conversion to complete
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCH;
}

это стандартно от визарда, только увеличил задержку так как считывание периодически шло не из нужных каналов

PORTA=0x00;  - подтяжки нету
DDRA=0x00;   - настроен на вход


SFIOR=0x04;    - еще раз принудительное отключение подтяжки резисторами
ADMUX=ADC_VREF_TYPE & 0xff;  при этом ADC_VREF_TYPE = 0x20 - то есть опорное напряжение от AREF, но используются старшие 8 бит
ADCSRA=0xA6; - включение АЦП, бит ADATE и делитель на 64 (частота кварца 8 Мгц)



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

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

Сообщение vitalik_1984 »

Как вы вообще пришли к выводу, что АЦП занижает показания?
DDark
Открыл глаза
Сообщения: 73
Зарегистрирован: Вт июн 22, 2010 20:15:17

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

Сообщение DDark »

Может я выразился неправильно.. если выход LM35 "висит в воздухе" - на нем корректные 0.3в, а если его посадить на вход АЦП напряжение в точке садится примерно до 0.14-0.18в
Реклама
Эиком - электронные компоненты и радиодетали
Vov123
Опытный кот
Сообщения: 804
Зарегистрирован: Чт мар 12, 2009 16:31:05

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

Сообщение Vov123 »

hfelyx,перед типом переменной поставь квалификатор eeprom.

DDark,в "протезе" пробовал эмулировать,если есть проект в "протезе" ,скидывай,посмотрим.
Реклама
DDark
Открыл глаза
Сообщения: 73
Зарегистрирован: Вт июн 22, 2010 20:15:17

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

Сообщение DDark »

в протеусе все работает...
Вложения
Новая папка.rar
(43.85 КБ) 143 скачивания
Реклама
Vov123
Опытный кот
Сообщения: 804
Зарегистрирован: Чт мар 12, 2009 16:31:05

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

Сообщение Vov123 »

А если попробовать подобрать сопротивление шунтирующее вход АЦП на землю?
Вложения
LM35.rar
(28 КБ) 133 скачивания
DDark
Открыл глаза
Сообщения: 73
Зарегистрирован: Вт июн 22, 2010 20:15:17

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

Сообщение DDark »

в таком случае получше, но почему то наблюдаются все равно некие скачки значений.. то есть висит секунд 20 верное напряжение, потом на пару секунд оно скачет почти в 2 раза, потом опять стабилизируется и снова скачет... от чего это может быть? после выбора канала АЦП и так задержку 100 мкс поставил
Vov123
Опытный кот
Сообщения: 804
Зарегистрирован: Чт мар 12, 2009 16:31:05

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

Сообщение Vov123 »

Уменьшать значение сопротивления не пробовал?
DDark
Открыл глаза
Сообщения: 73
Зарегистрирован: Вт июн 22, 2010 20:15:17

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

Сообщение DDark »

подобрал 240 Ом.. пока полет нормальный - спасибо огромное!

продолжил развивать свое устройство - подключил еще 3 канала АЦП
самое интересное - пока значения напряжений не меняются то показывают они в общем-то совсем немного плавая, но плавая...
а вот когда напряжение начинает мало-мальски меняться получается совсем нехорошо:

на одном висит потенциометр (датчик дроссельной заслонки - около 8 кОм) - мультиметром меряю 0.85в, АЦП показывает 0.80 - 0.86 в перемешку.. я понимаю что у меня АЦП настроен на 8 бит (т.е шаг 20 мВ) - ну это ладно, приемлемо

на втором канале - датчик давления воздуха.. его меряю мультиметром - 1.2, а вот АЦП прыгает от 0.98 до 1.22 - и это уже не годится... как это плавание уничтожить? я так понимаю что внутри датчика тензорезистор подключенный в мост... как бы мне с них снять точно напряжение...

и третий канал - самая кривая проблема... о ней я уже писал, и признаю что усложнил себе жизнь - но в общем то работает...
Изображение - тут значения плавают при напряжении 1.2в в пределах до 0.5 до 2в....

посоветуйте книжку какую-нибудь пожалуйста, или чего - нибудь...
Аватара пользователя
ChipKiller
Сверлит текстолит когтями
Сообщения: 1163
Зарегистрирован: Ср янв 05, 2011 16:25:15

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

Сообщение ChipKiller »

DDark писал(а):..посоветуйте книжку какую-нибудь пожалуйста, или чего - нибудь...
Analog Devices. Методы практического конструирования при нормировании сигналов с датчиков
DDark
Открыл глаза
Сообщения: 73
Зарегистрирован: Вт июн 22, 2010 20:15:17

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

Сообщение DDark »

спасибо, на страницах 172-173 как раз мой случай с термистором... сделал как описано - токовое зеркало и термистор с шунтом - все равно показания АЦП плавают...

с датчиком давления я придумал подключить АЦП через диод и посадить на землю через резистор - пульсации уменьшились, но характеристика стала нелинейной =( чего еще придумать...
Аватара пользователя
unalex
Мучитель микросхем
Сообщения: 424
Зарегистрирован: Сб авг 25, 2007 22:02:05
Откуда: Германия, Viernheim

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

Сообщение unalex »

DDark писал(а):с датчиком давления я придумал подключить АЦП через диод и посадить на землю через резистор - пульсации уменьшились, но характеристика стала нелинейной =( чего еще придумать...


а если конденсатор параллельно повесить?
Коктейль "Рекурсивный": 20% спирта, 30% воды, 50% коктейля "Рекурсивный"...
Аватара пользователя
Volgol_555
Потрогал лапой паяльник
Сообщения: 301
Зарегистрирован: Пт сен 23, 2011 13:13:51
Откуда: Минск
Контактная информация:

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

Сообщение Volgol_555 »

Извините за возможно глупый вопрос, но все же! CodeWizard генерирует "множество кода с нулевыми значениями". Т.е. у меня не используется таймер Т1 - в итоге
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
Вопрос. Обязательны ли такие подобные куски кода (с нулевыми значениями) или же можно их не писать вообще? (разумеется если не используется таймер, к примеру)
Самое гениальное - всегда самое простое
Аватара пользователя
FreshMan
Друг Кота
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

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

Сообщение FreshMan »

если не используешь то мона и не писать
Tell Me The Truth
Vov123
Опытный кот
Сообщения: 804
Зарегистрирован: Чт мар 12, 2009 16:31:05

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

Сообщение Vov123 »

Я может и не прав,но считаю,что "нуна",чтобы потом не искать "внешние помехи" в работе проца.Ведь при старте они могут принять произвольное значение.Да и код при этом немного увеличивается.
Аватара пользователя
Jack_A
Друг Кота
Сообщения: 6307
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

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

Сообщение Jack_A »

Строго говоря, существуют значения по умолчанию, которые принимают регистры процессора ( не все ) при включении. Но полагаться на умолчание не следует. 100 процев фурчат нормально, а у 101-го какой-то бит не скинулся. Или еще хуже -- через раз. В результате сэкономленные несколько строчек кода могут дать геморру на всю опу.
Аватара пользователя
Osolemio
Родился
Сообщения: 9
Зарегистрирован: Пн сен 24, 2012 03:08:01
Откуда: Минск

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

Сообщение Osolemio »

Господа, поделитесь пожалуйста ds1307.h и ds1307.lib
У меня оказалось нет. Программу-то написал, часы работают, но хочу все же поудобнее сделать, а либы этой в моем codevision почему-то не оказалось.
Импульс
Потрогал лапой паяльник
Сообщения: 349
Зарегистрирован: Пн ноя 29, 2010 05:52:05
Откуда: Иркутск

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

Сообщение Импульс »

Jack_A писал(а):Строго говоря, существуют значения по умолчанию, которые принимают регистры процессора ( не все ) при включении. Но полагаться на умолчание не следует. 100 процев фурчат нормально, а у 101-го какой-то бит не скинулся. Или еще хуже -- через раз. В результате сэкономленные несколько строчек кода могут дать геморру на всю опу.

Это правило, принятое коллективом програмистов, без особых возражений?
Какой достигнут Концепcус -обнулить регистры самому или верить дефолту?
Amstron
Нашел транзистор. Понюхал.
Сообщения: 173
Зарегистрирован: Вт дек 21, 2010 21:18:52

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

Сообщение Amstron »

Здравствуйте!
Подскажите как узнать хватает ли оперативной памяти в микроконтроллере?

У меня мега 168, и очень много переменных.
Мое устройство по разному - глючно работает при компилировании тремя разными версиями компиляторов (1,25,9/2,05,0/2,05,3)

Добавляю в программе операцию, которая даже и не связанна с глюком, а глюк проявляется.

Думаю, что кончилась оперативка! КАК ПРОВЕРИТЬ???

После компиляции выскакивает окно, и я его скопировал, что бы показать.
Может быть , что то прояснится?

СпойлерChip: ATmega168
Clock frequency: 16,000000 MHz
Program type: Application
Memory model: Small
Optimize for: Size
(s)printf features: int, width
(s)scanf features: int, width
Promote 'char' to 'int': No
'char' is unsigned: Yes
global 'const' stored in FLASH: Yes
8 bit enums: No
Enhanced core instructions: Yes
Automatic register allocation: Yes
Smart register allocation: Yes

Build: 3
3679 line(s) compiled
No errors
12 warning(s)

Bit variables area: 0x2 to 0x3
Bit variables size: 2 byte(s)

Data Stack area: 0x100 to 0x1FF
Data Stack size: 256 byte(s)
Estimated Data Stack usage: 27 byte(s)

RAM Global variables area: 0x200 to 0x37D
RAM Global variables size: 382 byte(s)

Hardware Stack area: 0x37E to 0x4FF
Hardware Stack size: 386 byte(s)

Heap size: 0 byte(s)

EEPROM usage: 441 byte(s), 86,1% of EEPROM
Program size: 7166 words (14332 bytes), 87,5% of FLASH


Его перевод

СпойлерЧип: ATmega168
Тактовая частота: 16,000000 МГц
Тип программы: Применение
Модель памяти: Малый
Оптимизация для: Размер
(ы) Е функции: INT, ширину
(ы) SCANF функции: INT, ширину
Не поощрять "символ", чтобы "INT": Нет
"символ" не подписано: Да
глобального "строительства" хранятся во флэш-памяти: Да
Не 8 бит перечислений: Нет
Расширенные основные инструкции: Да
Автоматическое распределение регистров: Да
Смарт распределения регистров: Да

Телосложение: 3
3679 линия (линии), составленная
Нет ошибок
12 предупреждение (ы)

Бит области переменных: 0x2 до 0x3
Бит размер переменных: 2 байта (ы)

Данные области стека: 0x100 для 0x1FF
Стек данных Размер: 256 байт (а)
Расчетное стека данных использование: 27 байт (ы)

RAM области глобальных переменных: 0x200 для 0x37D
RAM глобальный размер переменных: 382 байт (а)

Аппаратный стек площадь: 0x37E к 0x4FF
Аппаратный стек Размер: 386 байт (а)

Куча размер: 0 байт (ы)

Использование EEPROM: 441 байт (ов), 86,1% из EEPROM
Размер программы: 7166 слов (14 332 байт), 87,5% от FLASH
Ответить

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