Страница 264 из 421
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пт июн 07, 2013 16:54:53
hfelyx
Спасибо.А как сохранить настройки этих кнопок,в памяти,чтоб при пропадании питания и потом его появлении,они сохранились?
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пт июн 07, 2013 20:56:38
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 Мгц)
подскажите пожалуйста где я не прав...
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пт июн 07, 2013 21:35:55
vitalik_1984
Как вы вообще пришли к выводу, что АЦП занижает показания?
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пт июн 07, 2013 21:42:07
DDark
Может я выразился неправильно.. если выход LM35 "висит в воздухе" - на нем корректные 0.3в, а если его посадить на вход АЦП напряжение в точке садится примерно до 0.14-0.18в
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пт июн 07, 2013 22:46:38
Vov123
hfelyx,перед типом переменной поставь квалификатор eeprom.
DDark,в "протезе" пробовал эмулировать,если есть проект в "протезе" ,скидывай,посмотрим.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пт июн 07, 2013 23:34:02
DDark
в протеусе все работает...
Re: CodeVision AVR в вопросах и ответах
Добавлено: Сб июн 08, 2013 03:36:36
Vov123
А если попробовать подобрать сопротивление шунтирующее вход АЦП на землю?
Re: CodeVision AVR в вопросах и ответах
Добавлено: Сб июн 08, 2013 11:17:05
DDark
в таком случае получше, но почему то наблюдаются все равно некие скачки значений.. то есть висит секунд 20 верное напряжение, потом на пару секунд оно скачет почти в 2 раза, потом опять стабилизируется и снова скачет... от чего это может быть? после выбора канала АЦП и так задержку 100 мкс поставил
Re: CodeVision AVR в вопросах и ответах
Добавлено: Сб июн 08, 2013 13:06:00
Vov123
Уменьшать значение сопротивления не пробовал?
Re: CodeVision AVR в вопросах и ответах
Добавлено: Сб июн 08, 2013 14:30:11
DDark
подобрал 240 Ом.. пока полет нормальный - спасибо огромное!
продолжил развивать свое устройство - подключил еще 3 канала АЦП
самое интересное - пока значения напряжений не меняются то показывают они в общем-то совсем немного плавая, но плавая...
а вот когда напряжение начинает мало-мальски меняться получается совсем нехорошо:
на одном висит потенциометр (датчик дроссельной заслонки - около 8 кОм) - мультиметром меряю 0.85в, АЦП показывает 0.80 - 0.86 в перемешку.. я понимаю что у меня АЦП настроен на 8 бит (т.е шаг 20 мВ) - ну это ладно, приемлемо
на втором канале - датчик давления воздуха.. его меряю мультиметром - 1.2, а вот АЦП прыгает от 0.98 до 1.22 - и это уже не годится... как это плавание уничтожить? я так понимаю что внутри датчика тензорезистор подключенный в мост... как бы мне с них снять точно напряжение...
и третий канал - самая кривая проблема... о ней я уже писал, и признаю что усложнил себе жизнь - но в общем то работает...

- тут значения плавают при напряжении 1.2в в пределах до 0.5 до 2в....
посоветуйте книжку какую-нибудь пожалуйста, или чего - нибудь...
Re: CodeVision AVR в вопросах и ответах
Добавлено: Сб июн 08, 2013 19:23:50
ChipKiller
Re: CodeVision AVR в вопросах и ответах
Добавлено: Сб июн 08, 2013 22:23:39
DDark
спасибо, на страницах 172-173 как раз мой случай с термистором... сделал как описано - токовое зеркало и термистор с шунтом - все равно показания АЦП плавают...
с датчиком давления я придумал подключить АЦП через диод и посадить на землю через резистор - пульсации уменьшились, но характеристика стала нелинейной =( чего еще придумать...
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пн июн 10, 2013 15:02:10
unalex
DDark писал(а):
с датчиком давления я придумал подключить АЦП через диод и посадить на землю через резистор - пульсации уменьшились, но характеристика стала нелинейной =( чего еще придумать...
а если конденсатор параллельно повесить?
Re: CodeVision AVR в вопросах и ответах
Добавлено: Чт июн 13, 2013 17:24:46
Volgol_555
Извините за возможно глупый вопрос, но все же! CodeWizard генерирует "множество кода с нулевыми значениями". Т.е. у меня не используется таймер Т1 - в итоге
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
Вопрос. Обязательны ли такие подобные куски кода (с нулевыми значениями) или же можно их не писать вообще? (разумеется если не используется таймер, к примеру)
Re: CodeVision AVR в вопросах и ответах
Добавлено: Чт июн 13, 2013 17:40:53
FreshMan
если не используешь то мона и не писать
Re: CodeVision AVR в вопросах и ответах
Добавлено: Сб июн 15, 2013 10:44:21
Vov123
Я может и не прав,но считаю,что "нуна",чтобы потом не искать "внешние помехи" в работе проца.Ведь при старте они могут принять произвольное значение.Да и код при этом немного увеличивается.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Сб июн 15, 2013 16:54:16
Jack_A
Строго говоря, существуют значения по умолчанию, которые принимают регистры процессора ( не все ) при включении. Но полагаться на умолчание не следует. 100 процев фурчат нормально, а у 101-го какой-то бит не скинулся. Или еще хуже -- через раз. В результате сэкономленные несколько строчек кода могут дать геморру на всю опу.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вс июн 16, 2013 14:55:28
Osolemio
Господа, поделитесь пожалуйста ds1307.h и ds1307.lib
У меня оказалось нет. Программу-то написал, часы работают, но хочу все же поудобнее сделать, а либы этой в моем codevision почему-то не оказалось.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пн июн 17, 2013 19:27:53
Импульс
Jack_A писал(а):Строго говоря, существуют значения по умолчанию, которые принимают регистры процессора ( не все ) при включении. Но полагаться на умолчание не следует. 100 процев фурчат нормально, а у 101-го какой-то бит не скинулся. Или еще хуже -- через раз. В результате сэкономленные несколько строчек кода могут дать геморру на всю опу.
Это правило, принятое коллективом програмистов, без особых возражений?
Какой достигнут Концепcус -обнулить регистры самому или верить дефолту?
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вт июн 18, 2013 16:11:57
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