реклама на сайте
подробности

 
 
> Проблема с ADC ATTINY461
__nik__
сообщение Dec 24 2007, 18:13
Сообщение #1


Участник
*

Группа: Свой
Сообщений: 52
Регистрация: 30-11-05
Из: С-Пб
Пользователь №: 11 619



Столкнулся с тем, что часть программы, работавшая на M8, ATTINY26, m8535 отказывается работать на тани461, а именно п/п измерения фазы(полпериуда).
При изучении выяснилось проблема кроется в работе АЦП.
Проблема:
Как оказалось, АЦП работает как хочет, хочет в середине фазы выдаст значение =0, или, при отсутствии сигнала может выдать большое значение(выше обычного шума) из-за чего происходит ошибка в показании прибора.
но вышесказанное это вообще ничто, по сравнению с тем, что иногда (всегда по разному) за определенное количество ацп преабразований выдает их сумма равняется 0, что вообще не понятно.
Во время работы ацп, прерывания запрещаются и сканирование каналов не происходит, на время тестов это отключено, таким образом измеряем только один канал с внешним опорником на 4.096в.

если кто нибудь встречался с данной проблеммой, то посоветуйте как ее решить.
Условия работы и измерений:
Еще, скорость АЦП никак не влияет, синал 100% во время измерений присутствеут, контролировалось по осцилографу, макс сигнал составлял в пике ~2.3 вольта.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
__nik__
сообщение Dec 29 2007, 21:43
Сообщение #2


Участник
*

Группа: Свой
Сообщений: 52
Регистрация: 30-11-05
Из: С-Пб
Пользователь №: 11 619



Место глюка нашел при помощи AVR Dragon, он оказался в умножении с точкой ( * 419.0)
на что умножать не важно, результат всегда равен 0. Если убрать запятую, то считает верно но для меня недостоточно точно. Столкнулся еще с тем что не могу скорость АЦП переключить, это как то похоже это как то связано с иаром 4.21А.
еще раз хочу обратить внимание что таже программа работает в тани26....
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Dec 29 2007, 23:09
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Цитата(__nik__ @ Dec 30 2007, 01:43) *
еще раз хочу обратить внимание что таже программа работает в тани26....

Вы сами себе противоречите, уважаемый. Значит не та же программа. Если бы ошибка, которая у вас явно присутствует и которую вы вначале списали на камень, а потом на IAR, происходила при обращении к оборудованию, то я бы поверил. Возможно файл объявлений ошибочный или даже проблемы с оборудованием каким то. Но ошибка, возникающая при умножении с использованием плавающей запятой (то есть данный кусок раскладывается в 2 десятка простых комманд) - не поверю.

Настораживает также упоминание вами прерывания и "случайности" ошибки.

Всё это наводит на мысль, что вы столкнулись с достаточно сложной, но весьма распространенной ошибкой при написании прерывания.

Для ясности приведу два примера.

1) Пример с регистрами I/O
В голове находится следующая строчка
PORTL |= 1;
Компильнётся примерно в следующее
lds r16,portl
ori r16,1
sts portl,r16

В прерывании следующая строчка
PORTL |= 2;

А теперь посмотрите внимательно. Если прерывание придёт во время исполнения команды ori при этом бит D1 порта L в это время будет равен 0, то произойдёт следующее. В прерывании бит 1 будет установлен в 1, но сразу по выходу из прерывания он опять сбросится в 0. И вы будете в непонятках так как в голове вы с этим битом не работаете.

2) Пример с переменными
В голове находится следующие строчки
volatile uint16_t i,j;
if(i<j)...
Представим себе что i=0x1f, а j=0x23. Очевидно, что условие должно выполниться. Учитывая что переменные 16 бит, то сама операция пройдёт в 2 этапа

В прерывании следующая строчка
i++;

Представим, что прерывание произойдёт м/у сравнениями младших и старших байтов. Тогда первое сравнение будет F c 3. Потом идёт прерывание где i становится 0x20 и идёт сравнение 2 с 1. Результат - условие выполняться не будет. У вас возникнет ошибка.

Примечание: IAR пытается бороться с такими ситуациями путём предварительной пересылки регистровой пары, а потом уж самой операции. Но это я так для примера привёл. Так как если операнд 4 байта, то и это уже не спасает от потенциальной ошибки.


Проявляться такая ошибка будет крайне нерегулярно, так как необходимо:
a) прерывание в "нужном" месте
б) модификация "нужной переменной" или появление "нужного значения" переменной.

Всё это я к тому, что сама ошибка может находится совершенно не в том месте где вы её ищете, а проявляться в "давно вылизанной" части программы. И даже при внесении изменений в произвольное место менять своё поведение.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- __nik__   Проблема с ADC ATTINY461   Dec 24 2007, 18:13
- - GDI   Эррата ничего на эту тему не говорит?   Dec 25 2007, 07:13
- - smk   Первое, что приходит на ум так это посмотреть как ...   Dec 25 2007, 08:50
- - ArtemKAD   А какие уровни сигналов на остальных ногах по отно...   Dec 25 2007, 09:55
- - __nik__   to GDI ерата молчит. там по идее проблемм не должн...   Dec 25 2007, 12:46
- - __nik__   Результаты проверки: Программа заливалась в ATTINY...   Dec 25 2007, 16:58
|- - AlexG   Цитата(__nik__ @ Dec 25 2007, 22:58) Ду...   Dec 25 2007, 19:27
- - __nik__   to AlexG Цитатачасть программы, работавшая на M8, ...   Dec 25 2007, 21:36
- - __nik__   На данный момент обнаружил глюк иара, по какой при...   Dec 27 2007, 17:37
|- - mdmitry   Цитата(__nik__ @ Dec 27 2007, 20:37) Суть...   Dec 28 2007, 19:59
|- - sergik_vrn   Цитата(__nik__ @ Dec 27 2007, 20:37) На д...   Dec 29 2007, 07:10
|- - __nik__   Цитата(SasaVitebsk @ Dec 30 2007, 02:09) ...   Dec 30 2007, 15:25
|- - SasaVitebsk   Цитата(__nik__ @ Dec 30 2007, 19:25) изви...   Dec 30 2007, 16:06
- - __nik__   to SasaVitebsk извиняюсь за резкий то, но насамом ...   Dec 30 2007, 21:16
- - __nik__   Вот я тут записал файлик, Это запись с экрана того...   Dec 30 2007, 23:13
- - SasaVitebsk   Простите за прямоту, но давайте без сумбура и по п...   Dec 31 2007, 00:09
- - __nik__   Не могу изменить скорость ацп, значит то, что при ...   Dec 31 2007, 01:35
- - SasaVitebsk   Красиво. ЦитатаЧерез дракон, в асме лазить трудно...   Dec 31 2007, 15:48
- - __nik__   кабелек у меня около 15 см, куда меньше. А у Вса с...   Dec 31 2007, 16:51
- - __nik__   короче, я нашел.... вот только что делать. у тани ...   Dec 31 2007, 18:49
|- - SasaVitebsk   Цитата(__nik__ @ Dec 31 2007, 22:49) коро...   Dec 31 2007, 22:07
- - __nik__   А знаете что настараживает, а ведь программа скомп...   Dec 31 2007, 23:22
|- - SasaVitebsk   Цитата(__nik__ @ Jan 1 2008, 03:22) Иар п...   Jan 1 2008, 14:40
- - __nik__   Галки есть при выборе процессора, в свойствах проэ...   Jan 1 2008, 18:01
|- - SasaVitebsk   Цитата(__nik__ @ Jan 1 2008, 22:01) Галки...   Jan 1 2008, 18:27
- - __nik__   Похоже, что математика это чистая проблема иара, о...   Jan 1 2008, 20:41
- - Rst7   Все правильно. У T461 действительно расширенное яд...   Jan 1 2008, 20:58
- - __nik__   Посмотрел, в оригинале cl1t-ec_nomul.r90. Я там в ...   Jan 1 2008, 23:24
- - Rst7   Да и черт с ним, расширенным ядром. Подключите cl1...   Jan 2 2008, 20:57
- - __nik__   Да дело не только в расширенном ядре, хотя я думаю...   Jan 3 2008, 00:38
- - Rst7   ЦитатаПодключить ничего кроме cl1t.r90 не удастся,...   Jan 4 2008, 08:00
- - __nik__   Нашел что у ATtiny461 всетаки есть, глюк не глюк, ...   Jan 10 2008, 16:48
|- - SasaVitebsk   Цитата(__nik__ @ Jan 10 2008, 20:48) Наше...   Jan 10 2008, 19:43
|- - ReAl   Цитата(__nik__ @ Jan 10 2008, 18:48) Наше...   Jan 10 2008, 21:50
- - __nik__   Цитатаможно для меня персонально списочек AVR-ок, ...   Jan 10 2008, 22:38
|- - ReAl   Цитата(__nik__ @ Jan 11 2008, 00:38) Да к...   Jan 11 2008, 08:43
- - Rst7   ЦитатаДа конечно можно, вот у которых точно сбрасы...   Jan 11 2008, 06:16
- - __nik__   На счет ты или вы, все очень просто. Ты - обращени...   Jan 11 2008, 18:21
- - AlexG   Цитата(__nik__ @ Jan 12 2008, 00:21) На с...   Jan 11 2008, 20:29
- - ReAl   Цитата(__nik__ @ Jan 11 2008, 20:21) На с...   Jan 11 2008, 21:34


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 06:17
Рейтинг@Mail.ru


Страница сгенерированна за 0.01396 секунд с 7
ELECTRONIX ©2004-2016