Просмотр полной версии : Ошибки в даташитах
Всем добрый день!
Возможно кто-то, как и я, столкнулся с подобным.
Изучая МК Mega8 искал даташит на русском т.к. с английским проблемы.
Так вот, в даташите который нашел я, серьезная ошибка: на стр. 72 с описанием работы регистра TCCR0 таблица программирования битов абсолютно не корректна. Не соответствуют кэффициенты деления и вообще отсутсвуют варианты настройки внешнего тактирования !
Я для себя сделал вывод, что господа перевордчики почему-то взяли эту таблицу из раздела описания работы таймера Т2. Т.е. при изучении работы данного МК ОБЯЗАТЕЛЬНО нужно сверяться с АНГЛИЙСКИМ вариантом даташита.
Привожу здесь только одну страницу, т.к. весь PDF весит более 10 Мб.
Предлагаю всем кто столкнулся с подобными казусами, делиться своим опытом в данной теме.
Ромм,
1.Предпочитаю язык оригинала, неоднократно сталкивался на работе с качеством "перевода" "профессиональных переводчиков". К примеру английский сильно зависит от контекста, который лучше знает пользователь "перевода", чем "профессиональный переводчик", в довесок схемы, чертежи, коды прог., рис. и т.п.
2.Пользоваться данными из интернета, СМИ, газет, журналов, "заборов", даже из уважаемых справочников - нехороший тон (а на работе запрещенный), часто вкрадываются опечатки, за которые Авторы ответственности не несут.
3.Если иного исхода нет, надо проверять "на себе", логически, макетированием, моделированием и т.п. (что на работе Вам не позволят).
даже из уважаемых справочников - нехороший тон
Александр, чем Вам справочники то не угодили:smile:
Если иного исхода нет, надо проверять "на себе", логически
Так и получилось в данном случае.
Правда пока я додумался что это туфта, подозревал себя в психическом нездоровье:smile:
Не думаю, что тема получит развитие. Переводных даташитов вообще очень немного, а ещё меньше их читающих.
Genadi Zawidowski
27.12.2017, 15:42
Ещё пример миленьких очепяток - в книге редькина по мегам ошибки в описании битов реакции входов прерываний. Пара недель жизни в унитаз.
Александр, чем Вам справочники то не угодили:smile:
В справочниках иногда тоже встречаются изумительные ляпы. Как, например, описание работы 561КТ3 в справочнике Шило. Перефразируя классика - "не читайте перед обедом переводные даташиты и справочники"... И после обеда - тоже, разумеется...
- Филип Филипыч, да ведь других нет!
- Вот никаких и не читайте...
Евгений240
27.12.2017, 17:09
Ошибка в цоколёвке Гу 50, гуляющая по сети. Справа - неправильно. Информация от UR7HBP (http://www.cqham.ru/forum/member.php?20699-UR7HBP)
Здравствуйте.
Мои 5 копеек.
PIC16F628, TIMER1.
Некорректно работает прерывание от таймера 1. В симуляторе все вылизал (использую встроенный в MPLAB), а когда запрограммировал кристалл и включил питание то получилась ерунда.
Прерывание от таймера запрещено и битом TMR1IE (регистр PIE1), бит разрешения PEIE (INTCON) тоже сброшен. В обоих случаях работа таймера разрешена.
Только когда я разрешил прерывание и запретил работу таймера, все встало на места.
Даташит и симулятор друг другу не противоречат (и то, и другое брал на WWW.MICROCHIP.RU), а кристалл не слушается.
F628 старый и довольно популярный. Если чего нет в errata - нет и живьем. Перепроверяйте еще. Иной раз сделаешь плюху, потом долго удивляешься - какой идиот так написал ? А, это я...
Только когда я разрешил прерывание и запретил работу таймера, все встало на места
"И эта странная фраза: собака - друг человека" :). Получается с Ваших слов, что при запрете прерывания от таймера оно не работало - вроде так и должно быть, а вот ситуация разрешенных прерываний и запрета работы таймера более интересная, возможно состояние таймера соответствовало тому, которое должно генерировать прерывание. Чип достаточно древний, вряд ли осталось что-то невылизанное в документации, скорее что-то в симуляторе криво сделано :)
Ну и соглашусь с rx3apf - сделать ляп очень легко
Я,наверное, не очень удачно описал проблему. Прерывание запрещено, но при переполнении таймера был переход на процедуру обработки на настоящей микросхеме, что не соответствует даташиту. А симулятор работал в полном соответствии с документацией.
В ходе работы были варианты
1. запрещено прерывание от таймера TMR1IE = 0, прерывания от периферии разрешены PEIE = 1, таймер считает.
2. запрещены прерывания от периферии PEIE = 0, разрешено прерывание от таймера TMR1IE = 1,таймер считает.
3. разрешены прерывания TMR1IE = 1 PEIE = 1, счет таймера запрещен.
Во всех трех вариантах при выполнении условия все разрешалось. Но работоспособным оказался только третий. В первом и втором вне зависимости от разрешения прерываний был переход на процедуру обработки.
PavelS, Ну так читайте внимательно, справочник (а лучше пользоваться надзираемым даташитом или ТУ). А симулятор можете засунуть сами знаете куда, никто не знает какая модель там была заведена, и насколько соответствует физического изделлия параметрам, и Вашего исполнения.
ПС:Если делаете для тиражирования, а не для себя, забудьте об "справочниках", был случай, когда в уважаемом мной справочнике Анурьева (2-е издание, в 1-м и 3-ем в этой строке ее не было, сам проверил) вкралась "опечятка", если б ребята, токари, во время мне это не подсказали, при физическом исполнении, платить бы пришлось по сей день, как алименты, по КЗОТу. :).
были варианты
А приведите их со значениями установленных битов и результатом, может свежий взгляд на их описание откроет что-то новое. С 628-м сталкивался в антенном анализаторе пана Тарасова, глубоко не копал, но что-то там и с таймерами было
Флаг TMR1IF в обработчике сбрасывался ?
А вообще такие вещи вылавливаются вдумчиво, с скопом (или анализатором), с дерганием контрольных ног в обработчиках. С уверенностью 100% - это ошибка установок, но никак не кристалла. Столь грубых плюх там не было.
Вадим, это будет возможно не раньше сентября, я сейчас в отъезде.
rx3apf. Флаг TMR1IF в обработчике сбрасывался ?
Обижаете:-P
Ну, мало ли ;) У меня "дежурная" ошибка для PIC16 - перепутать банки.
Я,наверное, не очень удачно описал проблему. Прерывание запрещено, но при переполнении таймера был переход на процедуру обработки на настоящей микросхеме, что не соответствует даташиту. А симулятор работал в полном соответствии с документацией.
В ходе работы были варианты
1. запрещено прерывание от таймера TMR1IE = 0, прерывания от периферии разрешены PEIE = 1, таймер считает.
2. запрещены прерывания от периферии PEIE = 0, разрешено прерывание от таймера TMR1IE = 1,таймер считает.
3. разрешены прерывания TMR1IE = 1 PEIE = 1, счет таймера запрещен.Ничего не понятно. Работа таймера разрешается битом TMR1ON (бит 0 регистра T1CON ) вне зависимости от разрешения и запрещения каких либо прерываний. Пока TMR1ON будет 1, таймер 1 будет считать. Может быть конкретный экземпляр PIC16F628 у вас дефектный, или версия компилятора подглючивает. Попробуйте другую версию компилятора, желательно STANDART а не PRO.
:offtop:
У меня "дежурная" ошибка для PIC16 - перепутать банки.Никогда не поздно перейти на C/C++.:smile:
при изучении работы данного МК ОБЯЗАТЕЛЬНО нужно сверяться с АНГЛИЙСКИМ вариантом даташитаТам ошибок не меньше бывает. Даташит на 100 листов и еррата страниц в 200 :-P Вот с последней и нужно сверяться.
Ничего не понятно.
1. запрещено прерывание от таймера TMR1IE = 0, прерывания от периферии разрешены PEIE = 1, TMR1ON=1.
2. запрещены прерывания от периферии PEIE = 0, разрешено прерывание от таймера TMR1IE = 1, TMR1ON=1.
3. разрешены прерывания TMR1IE = 1 PEIE = 1, TMR1ON=0.
В первых двух случаях есть переполнение таймера, но запрещен переход на процедуру обработки. В третьем случае запрещен счет, но разрешено прерывание. Во всех трех случаях для нормальной работы все три указанных бита д.б. в лог. 1.
Работоспособным оказался только третий.
Во всех трех случаях для нормальной работы все три указанных бита д.б. в лог. 1.
Работоспособным оказался только третий
Вы же сами себе противоречите: под номером 3 таймер запрещен:
3. разрешены прерывания TMR1IE = 1 PEIE = 1, TMR1ON=0
А так, все три в единице - по даташиту, "звучит логично" (с) дятел Вуди :)
Ничуть. При выполнении условия во всех трех вариантах недостающий бит устанавливался в 1.
недостающий бит устанавливался в 1
То есть все получалось по даташиту? Вернемся к исходному вопросу - приведите набор битов, который в симуляторе и в реальном чипе ведет себя по-разному и противоречит даташиту
1. запрещено прерывание от таймера TMR1IE = 0, прерывания от периферии разрешены PEIE = 1, TMR1ON=1.
2. запрещены прерывания от периферии PEIE = 0, разрешено прерывание от таймера TMR1IE = 1, TMR1ON=1.При этих установках Вы каким образом попадаете в программу обработчика? По флагу TMR1IF? Если да, то этот способ неверный. При данных установках (выделено синим) таймер будет считать всегда. И, даже если будет глобальный запрет по GIE=0, всё одно по флагу TMR1IF будете улетать в обработку.
Сколько работал с TMR1 никогда не видел ошибки в даташите по этому таймеру.
При этих установках Вы каким образом попадаете в программу обработчика? По флагу TMR1IF? Если да, то этот способ неверный. При данных установках (выделено синим) таймер будет считать всегда. И, даже если будет глобальный запрет по GIE=0, всё одно по флагу TMR1IF будете улетать в обработку.
Переход на обработку аппаратный. При переполнении таймера переход на 0x0004
Тогда в чем смысл битов запрета/разрешения прерываний? По Вашим словам при переполнении все равно будет переход на обработку?
То есть все получалось по даташиту? Вернемся к исходному вопросу - приведите набор битов, который в симуляторе и в реальном чипе ведет себя по-разному и противоречит даташиту
Варианты 1 и 2.
Если TMR1IE = 0 или PEIE = 0, то при переполнении не должно быть перехода на обработку. В симуляторе перехода действительно нет. А на микросхеме - есть.
По Вашим словам при переполнении все равно будет переход на обработку?По моим словам, что если TMR1ON=1, таймер будет считать всегда. Для него PE1IE=0 и TMR1IE=0, INTCON,GIE=0 не указ. И также будет всегда выставляться флаг TMR1IF. Проверяйте свой исходник, в частности переход по 0х04. Симулятор чаще ошибается, чем железо на столе.
Для него PE1IE=0 и TMR1IE=0, INTCON,GIE=0 не указ
А если глядеть на FIGURE 14-14 в http://ww1.microchip.com/downloads/en/DeviceDoc/40044G.pdf (стр. 109) - то PEIE и GIE должны быть указом
Вадим, я не спорю, что эти биты установки регистров INTCON и PIE1 тесно связаны с работой TMR1. Речь о том, что при бите TMR1ON=1 таймер будет всегда выставлять флаг TMR1IF переполнения при любых установках регистров INTCON и PIE1. И собака, скорее всего, порылась в ПП обработчика прерываний. Скорее всего Pavels ныряет туда по флагу, а не по вызову.
ныряет туда по флагу, а не по вызовуТо есть по чужому незамаскированному прерыванию проверяет флаг таймера 0 и обрабатывает его? PEIE и GIE работают на все периферийные источники, тут трудно напортачить. Разве что GIE взведется в единицу по команде возврата из любого прерывания, специально ставить его в 1 надо только после явного запрета прерываний. В общем, совсем запутали :). Сейчас поглядел, у пана Тарасова в АА 819-й, правда своих исходников найти не могу, они на другом компе
Скорее всего Pavels ныряет туда по флагу, а не по вызову.
Вы имеете в виду, что я в основном цикле написал что-то похожее на "BTFSS PIR1,TMR1IF"? Такого в программе нет.
в основном цикле
Нет, речь о том, что входите в начало обработчика по чужому прерыванию, а в ходе анализа флагов обрабатываете и таймерное
Кажется понял свою ошибку. Вернусь домой - проверю.
Вот мой кусочек кода по обработке прерываний по RB0, RB4, RB5, RB6, RB7. На RB0 висит кнопка записи в EEPROM, а на RB4-7 висят два валкода.
Это выжимка из исходника по "Синтезатор для Урала и не только" (http://www.cqham.ru/forum/showthread.php?39380-%D1%E8%ED%F2%E5%E7%E 0%F2%EE%F0-%E4%EB%FF-%F2%F0%E0%ED%F1%E8%E 2%E5%F0%E0-%AB%D3%D0%C0%CB-84%BB-%E8-%ED%E5-%F2%EE%EB%FC%EA%EE%8 5&p=1617763&viewfull=1#post16177 63) Немного обрезано, но суть ясна.
Посмотрите Павел, может что пригодится. Было бы легче подсказать, если бы озвучили хотя бы свой алгоритм работы TMR1.
vadim_d и UN7GE
Спасибо, вы вправили мне мозги. Все было так, как вы описывали.
Моя ошибка была в том, что при отладке в симуляторе я для ускорения принудительно менял значения регистров TMR1L TMR1H и TMR0. Не хотел ждать.
Вот уж точно: поспешишь - людей насмешишь.
поспешишь - людей насмешишьЯ обычно привожу другую формулировку: широко шагаешь - штаны порвешь :). Но рад, что одним загадочным явлением стало меньше
ozforester
26.12.2020, 23:22
Всем доброй ночи. Пытаюсь заполнить пробел в понимании даташита. В характеристиках по постоянному напряжению часто указывается значение относительно питающего напряжения. ( напр. MAX Vcc+0.5 при Vcc 1.8..4.5V ) Нужно ли понимать это буквально, как "при уменьшении питающего напряжения, уменьшается и указанное максимальное значение напряжения"? Задумался, поскольку при выключении питания контроллера, на его АЦП может поступать контролируемое напряжения с делителя. Добавил токоограничивающий резистор от греха подальше, но осадочек остался. Завидую белой завистью радолюбителям, которым подобные сомнения незнакомы %-)
Речь, очевидно, идет о номинале входных напряжений (лог "1"). Таки да, верхнее значение лимитировано напряжением питания плюс напряжение на защитном диоде по входу. Обычно это в диапазоне +0.3...0.6V относительно Vcc.
ozforester
26.12.2020, 23:57
Например мега2560
348415
Подаем на АЦП 3 вольта при питании 1.8 вольт. В данной таблице недопустимо (ну можно так интерпетировать), а если руководствоваться таблицей предельных значений, где нет взаимосвязи с питающим напряжением, то ничего старшного не случится со входом. Читать даташит оплучается вроде бы, а делать это правильно пока нет (:
Подаем на АЦП 3 вольта при питании 1.8 вольт. В данной таблице недопустимоЭто таблица для входов, используемых как цифровые, она задает диапазоны напряжений, которые гарантированно распознаются как 0 и 1 (VIL и VIH) при разных питающих напряжениях. Если вход сконфигурирован как аналоговый, для него отдельные ограничения, поищите где-нибудь в разделе АЦП. А максимально допустимые - это когда при выходе за них микросхема может безвозвратно повредиться
ozforester
27.12.2020, 00:24
Спасибо. Получается, что в первом случае логика не будет работать, а во втором всё остальное. (:
А для случая, когда напряжение подается на вход, а питания нет, есть еще такая пакость как "тиристорный эффект" (для CMOS). Современным изделиям это не особо свойственно, но бывает, говорят... Имеет смысл вводить дополнительные внешние элементы защиты.
в первом случае логика не будет работать, а во втором всё остальноеПо АЦП глядите в Table 31-9 на странице 365 даташита https://ww1.microchip.com/downloads/en/DeviceDoc/ATmega640-1280-1281-2560-2561-Datasheet-DS40002211A.pdf . Питание АЦП (AVCC) не должно сильно отличаться от цифрового (+-0.3В), опорное должно быть jn 1V до питания, а на входе от нуля до опорного (может и до питания можно, но все равно будет переполнение при оцифровке)
Powered by vBulletin® Version 4.1.12 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot