|
|
  |
Проблема с ADC ATTINY461 |
|
|
|
Dec 30 2007, 21:16
|
Участник

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

|
to SasaVitebsk извиняюсь за резкий то, но насамом деле про то что все начнут говорить о прерываниях я заранее учел и написал в самом оглавлении темы. Некая огрессивность связана с тем что некая часть людей, толи для набора постов , толи просто от желания поумничать ссылаются на разные вещи, вечьма и весьма очевидные, которые к делу отношения не имеют, как то: -перывания-- они запрещены -переполнения стека-- его размер был достаточен для тн26 и был увеличен для 461 -перехваат регистров-- при запрете прерываний это весьма проблепатично, так как никто кроме исполняемого кода не имеет доступа к ним -переполнение регистра-- число long и в начале делится, а затем умножается и в момент умножения получается 0, что дальше не важно, с нулем что не делай все одно 0. это естественно перед написанием я проверил и, если честно не один раз, там устройство пакостное, потребители оспользуют его где попало, при этом ссылаясь на других производителей и говорят что все у других работает, к нам приносили пару устройств, зами же заказчики, разбирался, выяснялось что у них ну не все так как они пишут. Я искал то с чем я столкнулся и с чем я старательно боролся в своих, у всех по разному, кто то сразу вешался, кто то маскировал ошибки. прибор работает в жутких условиях, пользователи слово фильтр даже не знают и то что его нужно применять темболее, ну ко всему еще порой просто убитый пускатель стоит, который порой работает тоже не плохим генератором шума, и тп. Проблем много, те что можем предположить стараемся учесть, те что не можем, работаем с потребителем, чтоб прибор мог работать практически в любых условиях. Вот и в данный раз, тн26 забита под завязку, а исправить то что вылезло у единственного заказчика не вышло, и странно то, что 4 шт стоит рябом и работет, а 5й вылетает, что только не делали... вот и перешли с тн26 на тн461.
уважаемый SasaVitebsk спасибо за желание помочь, буду рад любой помощи, тк глюк неординарен. а ситуация примерно такая, АДЦ работает, прерывания идут, но глюкует все именно при умножении. если что то конкретное интерисует спрашивайте, если кому-то интересен этот глюк могу, дать чтонть для проверки, но при запросе, так выкладывать не могу. рс: если честно, я не помню сколько времени я пишу программы, начинал еще с z80...
|
|
|
|
|
Dec 30 2007, 23:13
|
Участник

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

|
Вот я тут записал файлик, Это запись с экрана того что происходит. Вырезал из проэкта ту подпрограмму и убрал лишнее для того чтоб не смотреть на прочую лабуду. Запись сделана в AVRStudio при связи с аврДракон, в режиме dWare отладки. В кратце о программе, что там происходит: -как то настроен таймер на шим выход, может и не шим, главное что он что-то генерит, чтоб значение в АЦП было не всегда 1023 а иногда было =0. -прерываний нет... -Ацп работает в принципе так как я настраивал в проэкте, думаю тоже не важно, сумму дает вполне адекватную, просто ее подогнал, для простоты. суть неизменилась, все как я говорил. Значится жду предложений ну или того, что я не так делаю.
tn461_film.zip ( 223.79 килобайт )
Кол-во скачиваний: 90запакованный ехе файл сделанный одной программкой копии моего экрана, так что не пугайтесь
Сообщение отредактировал __nik__ - Dec 30 2007, 23:42
|
|
|
|
|
Dec 31 2007, 00:09
|
Гуру
     
Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521

|
Простите за прямоту, но давайте без сумбура и по порядку прочитаем перечисленные вами проблемы. Цитата(__nik__ @ Dec 24 2007, 22:13)  При изучении выяснилось проблема кроется в работе АЦП. Проблема: Как оказалось, АЦП работает как хочет, хочет в середине фазы выдаст значение =0, или, при отсутствии сигнала может выдать большое значение(выше обычного шума) из-за чего происходит ошибка в показании прибора. но вышесказанное это вообще ничто, по сравнению с тем, что иногда (всегда по разному) за определенное количество ацп преабразований выдает их сумма равняется 0, что вообще не понятно. Здесь не понятно проблема в АЦП или суммировании, или и там и там? Суммирование, на сколько я понимаю программное и причину хомута можно однозначно вычислить. Цитата На данный момент обнаружил глюк иара, по какой причине выяснить не смог, пока что. Суть примерно такая, long Summ; unsigned int acvant; return (Summ/acvant*419.0/468.0); ошибка возникает при умножении, почему-то при умножении числа на константу на выходе получаем 0 ??? Цитата Столкнулся еще с тем что не могу скорость АЦП переключить, это как то похоже это как то связано с иаром 4.21А. Так у вас одна ошибка или целый ряд ошибок непонятных. Что значит "не могу скорость АЦП переключить"? Это для меня непереводимая игра слов. Напишите конкретно что происходит. Не меняется значение регистра или что??? На резонный вопрос о типе return вы так и не ответили. Приведите хотябы всю подпрограмму с возвратом. Ваш exe файл с экрана читать очень сложно. Не успеваешь его просматривать. Можно перейти на ассемблерный листинг в отладчике и выяснить где именно у вас прокол. Что именно IAR сделал не так. Там сразу всё понятно становится. То же и с суммированием. Короче пока недостаточно данных.
|
|
|
|
|
Dec 31 2007, 01:35
|
Участник

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

|
Не могу изменить скорость ацп, значит то, что при любых настройках которые я ему даю, он мерит на полной скорости, если честно то и фиг с ним, постараюсь разобратся, мож и правда что не так делается. только что посмотрел, одна из ошибок в умножении, файл с доказательством как пологается прикладываю, програмка проще некуда float fSumm,summ; __C_task void main( void ) { // InitMCU(); // while(!(PINB_Bit5)){;} while (1) { fSumm=234.123; fSumm=fSumm*2; --- вот тут у меня выдает 0 но только на кристалле!!! fSumm = fSumm / 2; summ=Mesure(); PORTB=summ+2; } } на лишний хлам внимания не обращайте, для честности дал как она есть в программе. Он написан в надежде что компилятор его оптимизировал и не передал значение, но надежда не оправдалась, увы. То что в файле: показываю то как считает ИАР в его родном дебугере и на кристалле, через дракон. ошибка сразу видна.. Через дракон, в асме лазить трудно, все переменные пишет, Not in scope, согласитесь оч тяжело понять где что, да и дракон все время при хождении по асму просто падает. Я смог найти только место, где вроде как затирает значение которое должен считать, но не уверен, так долеко дракон зашел лиш раз, теперь просто падает.
tn461_4.zip ( 315.95 килобайт )
Кол-во скачиваний: 79извиняюсь за скорость, старался чтобы места занимало поменьше to SasaVitebsk1. На данный момент, 2 ошибки с умножением и с квантованием АЦП. 2. Найдена ошибка, в ней я уверен на 90%, при умножении чисел с точкой (для непонятливых это 2.0 или 123.123) long, float, int, char. Любое умножение даже на 2.0 даст результат 0, хотя в его дебугере виртуальном, дает правильный результат. 3. Запись в регистры АЦП производится, но действия не оказывает никакого, начинаю подозревать в этом ИАР, в тани461 изменили модууль АЦП, а они видимо это не учли. тип return unsigned intхотя не думаю что это важно
|
|
|
|
|
Dec 31 2007, 15:48
|
Гуру
     
Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521

|
 Красиво. Цитата Через дракон, в асме лазить трудно, все переменные пишет, Not in scope, согласитесь оч тяжело понять где что, да и дракон все время при хождении по асму просто падает. То что Дракон падает - это плохо. Попробуй укоротить кабелёк. У меня правда JTAG ICE2. Вроде работает устойчиво. Особенно на DBW. Хрен с ними - с переменными. Войди в режим асма и пройди по шагам отмечая как модифицируются регистры. Потом тоже самое на изделии. Увидишь команду, откуда разница прёт. Может 461 какие то команды арифметики не выполняет, а IAR-овцы об этом не знают.  И ещё один момент. Ты симулятором IARовским пользуешься, а ты попробуй симулятором Studio. Он по идее должен точнее железо симулировать.
|
|
|
|
|
Dec 31 2007, 16:51
|
Участник

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

|
кабелек у меня около 15 см, куда меньше. А у Вса случаем тани461 нет? может проверите на жтаг исе2, своего, шефа, я так и не уломал на него, особенно когда он узнал, что он стоит около 10тр., но думаю скоро купит, если так дальше все пойдет. в принципе, я придумал как все проверить, у меня есть еще ноут, запущу на одном Астудию, на другом иар, и по шагу буду долбится об стол, искать причину глюка. надеюсь к вечеру дам результат, только скорее всего без видео, так что придется поверить на слово.
Сообщение отредактировал __nik__ - Dec 31 2007, 17:28
|
|
|
|
|
Dec 31 2007, 18:49
|
Участник

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

|
короче, я нашел.... вот только что делать. у тани 461 нет MUL инструкций, а иар их использует в математике, по этому и глюк. знающие может подскажут как это обойти?
|
|
|
|
|
Dec 31 2007, 22:07
|
Гуру
     
Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521

|
Цитата(__nik__ @ Dec 31 2007, 22:49)  короче, я нашел.... вот только что делать. у тани 461 нет MUL инструкций, а иар их использует в математике, по этому и глюк. знающие может подскажут как это обойти? Самое забавное, что в tiny26 тоже нет данной инструкции - я уже посмотрел. Обойти можно выбрав вместо прямого камня проверенный, но подменив и переписав файл конфига. Или посмотреть - может новый config появился под эту микруху у IARа PS:Искать. Где-то объявлены определения __HAS_MUL__ и __HAS_ENHANCED_CORE__. Очевидно, что этого быть объявлено не должно быть. Искать во всех файлах связанных с 461
|
|
|
|
|
Dec 31 2007, 23:22
|
Участник

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

|
А знаете что настараживает, а ведь программа скомпилированная под тани26 в процессоре не работала, а в ней нет команд аппаратного умножения и регистры ацп у них совподают, я тупо хекс в нее заливал от тани26. я вспомнил, еще кое что, скомпилированную программу под 261 я заливал в тани26 и мне кажется она работала исправно. что то мне говорит что разница в них более глобальна и еще не описана до конца. в таком случае я продолжаю поиск... как то все это загадисто. за подсказки спасибо, попробую просмотреть файлы от тани 26 и тани 461. Иар при выборе проца Tiny26 снимает галку на "Enhanced core" и "No MUL instruction" и наоборот их ставит при выборе Tiny461, что весьма странно, у них нет MUL инструкций у обоих.
Указанных определений __HAS_MUL__ и __HAS_ENHANCED_CORE__ я не нашел в файлах.
Сообщение отредактировал __nik__ - Jan 1 2008, 00:19
|
|
|
|
|
Jan 1 2008, 18:01
|
Участник

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

|
Галки есть при выборе процессора, в свойствах проэкта, на закладке Target. Короче не помог ни выбор проца -v1 с описанием без МУЛ и Энхансед коре. всетаки подозреваю, что они всетаки перекомпилируют. Припоминаю что на версии ИАР 2.28, там еще небыло тн26, использовал -v1 или -v0, с h файлом для 26, но такой фокус не прокатил для 461, всеравно умнодение не прокатило. Ума не приложу, как быть если нужно умножение с точкой, а при делении ощибка слишком велика...
|
|
|
|
|
Jan 1 2008, 18:27
|
Гуру
     
Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521

|
Цитата(__nik__ @ Jan 1 2008, 22:01)  Галки есть при выборе процессора, в свойствах проэкта, на закладке Target. Короче не помог ни выбор проца -v1 с описанием без МУЛ и Энхансед коре. всетаки подозреваю, что они всетаки перекомпилируют. Припоминаю что на версии ИАР 2.28, там еще небыло тн26, использовал -v1 или -v0, с h файлом для 26, но такой фокус не прокатил для 461, всеравно умнодение не прокатило. Ума не приложу, как быть если нужно умножение с точкой, а при делении ощибка слишком велика... Задай вопрос на форуме по IAR. Там есть спецы типа Сергея Борщ или Zltigo. Они ответят. У меня тоже вкл. ENHANCED_CORE на 461. IAR C/C++ Compiler for AVR 4.12A/W32 [Evaluation] (4.12.1.3)
|
|
|
|
|
Jan 1 2008, 20:41
|
Участник

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

|
Похоже, что математика это чистая проблема иара, осталось еще с прескалером ацп разобратся. пока так и не смог заставить его считать медленнее.
Сообщение отредактировал __nik__ - Jan 1 2008, 20:43
|
|
|
|
|
Jan 1 2008, 23:24
|
Участник

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

|
Посмотрел, в оригинале cl1t-ec_nomul.r90. Я там в файлах его покопался, он теперь подключает cl0t-ec_nomul.r90, но всеравно не помогает. посмотрел что он подключает к тани26 ... порадовало cl0t.r90 , а различия то у них в плане инструкций не очень большие. Я проверил,  , cl1t-ec_nomul.r90 использует MUL,  нафига она называется номул, не понятно. Я так подозреваю, что такой трабл будет со всеми процами которые используют эту библиотеку в совокупности с десятичной дробью, не факт, что в других этого глюка нет. Видимо это подарок от ирара, проверял версии EW IAR 4.21A Ev EW IAR 4.30A Ev Народ осторожнее, тем кто использует эту библиотеку. Само существование такого глюка мне бы и в голову не пришло. Осталось с ацп разобратся.... ПС: Напишу ИАРу, стебану их, пусть дергаются. Жалко им картинки не отправить, но я чтонть придумаю.
Сообщение отредактировал __nik__ - Jan 2 2008, 00:10
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|