CodeVision AVR в вопросах и ответах
Re: CodeVision AVR в вопросах и ответах
Спасибо.А как сохранить настройки этих кнопок,в памяти,чтоб при пропадании питания и потом его появлении,они сохранились?
- Реклама
Re: CodeVision AVR в вопросах и ответах
прошу прощения, уже обращался с данным вопросом но все таки... не могу дать ладу с АЦП меги16... постоянно присутствует на ножке некоторое малое напряжение (около 0.1 - 0.2 В), пытаюсь подключить датчик LM35. пробовал и напрямую и через резистор...
напрямую - занижает показания, через резистор - АЦП дает 0... плюс к этому показания "скачут", то есть вывожу на дисплей каждые 0.5 сек и при напряжении выхода LM35 в 0.3В (т.е 28 С) на дисплее отображает вперемешку значения от 12 до 18...
с АЦП работаю так:
подскажите пожалуйста где я не прав...
напрямую - занижает показания, через резистор - АЦП дает 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 в вопросах и ответах
Как вы вообще пришли к выводу, что АЦП занижает показания?
Re: CodeVision AVR в вопросах и ответах
Может я выразился неправильно.. если выход LM35 "висит в воздухе" - на нем корректные 0.3в, а если его посадить на вход АЦП напряжение в точке садится примерно до 0.14-0.18в
Re: CodeVision AVR в вопросах и ответах
hfelyx,перед типом переменной поставь квалификатор eeprom.
DDark,в "протезе" пробовал эмулировать,если есть проект в "протезе" ,скидывай,посмотрим.
DDark,в "протезе" пробовал эмулировать,если есть проект в "протезе" ,скидывай,посмотрим.
- Реклама
Re: CodeVision AVR в вопросах и ответах
в протеусе все работает...
- Вложения
-
- Новая папка.rar
- (43.85 КБ) 143 скачивания
Re: CodeVision AVR в вопросах и ответах
А если попробовать подобрать сопротивление шунтирующее вход АЦП на землю?
- Вложения
-
- LM35.rar
- (28 КБ) 133 скачивания
Re: CodeVision AVR в вопросах и ответах
в таком случае получше, но почему то наблюдаются все равно некие скачки значений.. то есть висит секунд 20 верное напряжение, потом на пару секунд оно скачет почти в 2 раза, потом опять стабилизируется и снова скачет... от чего это может быть? после выбора канала АЦП и так задержку 100 мкс поставил
Re: CodeVision AVR в вопросах и ответах
Уменьшать значение сопротивления не пробовал?
Re: CodeVision AVR в вопросах и ответах
подобрал 240 Ом.. пока полет нормальный - спасибо огромное!
продолжил развивать свое устройство - подключил еще 3 канала АЦП
самое интересное - пока значения напряжений не меняются то показывают они в общем-то совсем немного плавая, но плавая...
а вот когда напряжение начинает мало-мальски меняться получается совсем нехорошо:
на одном висит потенциометр (датчик дроссельной заслонки - около 8 кОм) - мультиметром меряю 0.85в, АЦП показывает 0.80 - 0.86 в перемешку.. я понимаю что у меня АЦП настроен на 8 бит (т.е шаг 20 мВ) - ну это ладно, приемлемо
на втором канале - датчик давления воздуха.. его меряю мультиметром - 1.2, а вот АЦП прыгает от 0.98 до 1.22 - и это уже не годится... как это плавание уничтожить? я так понимаю что внутри датчика тензорезистор подключенный в мост... как бы мне с них снять точно напряжение...
и третий канал - самая кривая проблема... о ней я уже писал, и признаю что усложнил себе жизнь - но в общем то работает...
- тут значения плавают при напряжении 1.2в в пределах до 0.5 до 2в....
посоветуйте книжку какую-нибудь пожалуйста, или чего - нибудь...
продолжил развивать свое устройство - подключил еще 3 канала АЦП
самое интересное - пока значения напряжений не меняются то показывают они в общем-то совсем немного плавая, но плавая...
а вот когда напряжение начинает мало-мальски меняться получается совсем нехорошо:
на одном висит потенциометр (датчик дроссельной заслонки - около 8 кОм) - мультиметром меряю 0.85в, АЦП показывает 0.80 - 0.86 в перемешку.. я понимаю что у меня АЦП настроен на 8 бит (т.е шаг 20 мВ) - ну это ладно, приемлемо
на втором канале - датчик давления воздуха.. его меряю мультиметром - 1.2, а вот АЦП прыгает от 0.98 до 1.22 - и это уже не годится... как это плавание уничтожить? я так понимаю что внутри датчика тензорезистор подключенный в мост... как бы мне с них снять точно напряжение...
и третий канал - самая кривая проблема... о ней я уже писал, и признаю что усложнил себе жизнь - но в общем то работает...
посоветуйте книжку какую-нибудь пожалуйста, или чего - нибудь...
- ChipKiller
- Сверлит текстолит когтями
- Сообщения: 1163
- Зарегистрирован: Ср янв 05, 2011 16:25:15
Re: CodeVision AVR в вопросах и ответах
Analog Devices. Методы практического конструирования при нормировании сигналов с датчиковDDark писал(а):..посоветуйте книжку какую-нибудь пожалуйста, или чего - нибудь...
Re: CodeVision AVR в вопросах и ответах
спасибо, на страницах 172-173 как раз мой случай с термистором... сделал как описано - токовое зеркало и термистор с шунтом - все равно показания АЦП плавают...
с датчиком давления я придумал подключить АЦП через диод и посадить на землю через резистор - пульсации уменьшились, но характеристика стала нелинейной =( чего еще придумать...
с датчиком давления я придумал подключить АЦП через диод и посадить на землю через резистор - пульсации уменьшились, но характеристика стала нелинейной =( чего еще придумать...
- unalex
- Мучитель микросхем
- Сообщения: 424
- Зарегистрирован: Сб авг 25, 2007 22:02:05
- Откуда: Германия, Viernheim
Re: CodeVision AVR в вопросах и ответах
DDark писал(а):с датчиком давления я придумал подключить АЦП через диод и посадить на землю через резистор - пульсации уменьшились, но характеристика стала нелинейной =( чего еще придумать...
а если конденсатор параллельно повесить?
Коктейль "Рекурсивный": 20% спирта, 30% воды, 50% коктейля "Рекурсивный"...
- Volgol_555
- Потрогал лапой паяльник
- Сообщения: 301
- Зарегистрирован: Пт сен 23, 2011 13:13:51
- Откуда: Минск
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
Извините за возможно глупый вопрос, но все же! CodeWizard генерирует "множество кода с нулевыми значениями". Т.е. у меня не используется таймер Т1 - в итоге
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
Вопрос. Обязательны ли такие подобные куски кода (с нулевыми значениями) или же можно их не писать вообще? (разумеется если не используется таймер, к примеру)
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
Вопрос. Обязательны ли такие подобные куски кода (с нулевыми значениями) или же можно их не писать вообще? (разумеется если не используется таймер, к примеру)
Самое гениальное - всегда самое простое
Re: CodeVision AVR в вопросах и ответах
Я может и не прав,но считаю,что "нуна",чтобы потом не искать "внешние помехи" в работе проца.Ведь при старте они могут принять произвольное значение.Да и код при этом немного увеличивается.
Re: CodeVision AVR в вопросах и ответах
Строго говоря, существуют значения по умолчанию, которые принимают регистры процессора ( не все ) при включении. Но полагаться на умолчание не следует. 100 процев фурчат нормально, а у 101-го какой-то бит не скинулся. Или еще хуже -- через раз. В результате сэкономленные несколько строчек кода могут дать геморру на всю опу.
Re: CodeVision AVR в вопросах и ответах
Господа, поделитесь пожалуйста ds1307.h и ds1307.lib
У меня оказалось нет. Программу-то написал, часы работают, но хочу все же поудобнее сделать, а либы этой в моем codevision почему-то не оказалось.
У меня оказалось нет. Программу-то написал, часы работают, но хочу все же поудобнее сделать, а либы этой в моем codevision почему-то не оказалось.
-
Импульс
- Потрогал лапой паяльник
- Сообщения: 349
- Зарегистрирован: Пн ноя 29, 2010 05:52:05
- Откуда: Иркутск
Re: CodeVision AVR в вопросах и ответах
Jack_A писал(а):Строго говоря, существуют значения по умолчанию, которые принимают регистры процессора ( не все ) при включении. Но полагаться на умолчание не следует. 100 процев фурчат нормально, а у 101-го какой-то бит не скинулся. Или еще хуже -- через раз. В результате сэкономленные несколько строчек кода могут дать геморру на всю опу.
Это правило, принятое коллективом програмистов, без особых возражений?
Какой достигнут Концепcус -обнулить регистры самому или верить дефолту?
Re: CodeVision AVR в вопросах и ответах
Здравствуйте!
Подскажите как узнать хватает ли оперативной памяти в микроконтроллере?
У меня мега 168, и очень много переменных.
Мое устройство по разному - глючно работает при компилировании тремя разными версиями компиляторов (1,25,9/2,05,0/2,05,3)
Добавляю в программе операцию, которая даже и не связанна с глюком, а глюк проявляется.
Думаю, что кончилась оперативка! КАК ПРОВЕРИТЬ???
После компиляции выскакивает окно, и я его скопировал, что бы показать.
Может быть , что то прояснится?
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
Его перевод
Тактовая частота: 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
Подскажите как узнать хватает ли оперативной памяти в микроконтроллере?
У меня мега 168, и очень много переменных.
Мое устройство по разному - глючно работает при компилировании тремя разными версиями компиляторов (1,25,9/2,05,0/2,05,3)
Добавляю в программе операцию, которая даже и не связанна с глюком, а глюк проявляется.
Думаю, что кончилась оперативка! КАК ПРОВЕРИТЬ???
После компиляции выскакивает окно, и я его скопировал, что бы показать.
Может быть , что то прояснится?
Спойлер
Chip: ATmega168Clock 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


