-
- Удалось победить неизведанное? - Evgeny_CD(19.08.2020 10:55)
- недавно похожая ситуация была. ресурсов, правда, чуть более - юзается xc8. оказалось, что в printf заряжал показывать %llu для u16... - Vit(01.08.2020 22:47)
- Предлагаю костыль, что неудивительно, ибо лежу в травме :) VLLV(198 знак., 01.08.2020 10:32)
- Тоже раздумывал над этим. Возможно, тогда проблема исчезнет, но
загадка-то останется. - =AK=(01.08.2020 16:13)
- Т.е. нам шашечки а не ехать? ;) Может какая-то аппаратная причина,
питание осциллографом смотрели? Биения частот записи и опроса. - VLLV(01.08.2020 16:37)
- Длля справки, устройство очень медленное и маломощное: =AK=(267 знак., 01.08.2020 16:50)
- Вот прямо сейчас делаю логгер. Страшно, похожий алгоритм :) - VLLV(01.08.2020 17:18)
- Длля справки, устройство очень медленное и маломощное: =AK=(267 знак., 01.08.2020 16:50)
- Т.е. нам шашечки а не ехать? ;) Может какая-то аппаратная причина,
питание осциллографом смотрели? Биения частот записи и опроса. - VLLV(01.08.2020 16:37)
- У него ошибка из-за сдвига вместо деления на 65535 равна числу с
которым относятся 216 к 216 - 1 RxTx(371 знак., 01.08.2020 11:36)
- Имелось ввиду вычитание не константы, а 1/64 и 1/128 от полученного
значения. Тогда ошибка не 2.4%, а 0.0375%. - Nikolay_Po(01.08.2020 11:54)
- 1. Я наверное что-то пропустил, не прочитал. Откуда взялись 2.4% ? RxTx(165 знак., 01.08.2020 12:11)
- Первый тестовый вариант прошивки из заглавного сообщения: "Единственно где схалтурил: вместо умножения на 1000 деления на 0xFFFF просто сдвигал считанный с результат на 6 разрядов вправо". Вместо 1000 получалось 1024. Ясно? Ошибку 2^-16 никто не рассматривал, так как имеются другие ошибки, 2.4% без умножения или колебания 0.8% при наличии кода умножения. Nikolay_Po(146 знак., 01.08.2020 12:24)
- 1. Я наверное что-то пропустил, не прочитал. Откуда взялись 2.4% ? RxTx(165 знак., 01.08.2020 12:11)
- Имелось ввиду вычитание не константы, а 1/64 и 1/128 от полученного
значения. Тогда ошибка не 2.4%, а 0.0375%. - Nikolay_Po(01.08.2020 11:54)
- У буржуев это называется "strength reduction". Отнять силу,
практицки та же травма :-| - SciFi(01.08.2020 11:27)
- "Все придумано до нас" :( - VLLV(01.08.2020 11:46)
- Тоже раздумывал над этим. Возможно, тогда проблема исчезнет, но
загадка-то останется. - =AK=(01.08.2020 16:13)
- 1) PIC16F819 повторяет по регистрам и набору peripheral's
PIC16C770. Мизерные отличия по регистрам есть (сравни datasheet'ы)
и далеко не факт что вы их используете. Взяв PIC16F819 можно на нем
отладиться, затем отлаженный блок кода использовать в PIC16C770. 2)
Можно сделать software UART и вывести на него интересующие
величины. Можно уложиться в оставшиеся место, а можно на время
отладки отключить условной компиляцией не требуемую
функциональность. - RxTx(31.07.2020 13:46)
- Постепенно прихожу к выводу, что это самый дельный совет. Только
хочу взять не 20-ногий PIC16F819 с 10-битным АЦП, а 40-ногий
PIC16F19175 с 12-битным. =AK=(400 знак., 01.08.2020 16:35)
- Полагаю что мы недопоняли друг друга. Предложение выше было не
предложением сделать новую версию устройства. Я не в курсе как вы
отлаживаетесь с PIC16C770 (напишите как?). Поэтому предлагал, на
ляп-тяп, быстренько справиться хотя бы с проблемой отладки. Напаяв
новый чип временно для отладки либо на проводниках, либо соорудив
панельку-переходник. RxTx(714 знак., 01.08.2020 17:12, ссылка)
- Как отлаживаюсь - смех и слезы. =AK=(1035 знак., 02.08.2020 05:27)
- Да, это очень тяжело. Нет ничего удивительного, что возникла заминка. Я бы наверное в таких условиях ушел в запой (шучу). RxTx(162 знак., 02.08.2020 16:16)
- Как отлаживаюсь - смех и слезы. =AK=(1035 знак., 02.08.2020 05:27)
- Полагаю что мы недопоняли друг друга. Предложение выше было не
предложением сделать новую версию устройства. Я не в курсе как вы
отлаживаетесь с PIC16C770 (напишите как?). Поэтому предлагал, на
ляп-тяп, быстренько справиться хотя бы с проблемой отладки. Напаяв
новый чип временно для отладки либо на проводниках, либо соорудив
панельку-переходник. RxTx(714 знак., 01.08.2020 17:12, ссылка)
- Это вариант, конечно. Только он займет месяц времени, если не больше. Я-то изначально надеялся за полчаса управиться... - =AK=(31.07.2020 16:20)
- Постепенно прихожу к выводу, что это самый дельный совет. Только
хочу взять не 20-ногий PIC16F819 с 10-битным АЦП, а 40-ногий
PIC16F19175 с 12-битным. =AK=(400 знак., 01.08.2020 16:35)
- Это же пик! надо было делать на авр (с) любая пятница лет 10 назад. А теперь даже и поговорить не о чем... - Ralex(31.07.2020 10:48)
- Я когда то давно использовал для умножения 16*16 для AVR ассемблерную штатную подпрограмму от Atmel. Так вот там была ошибка. Чуть чуть подправил. - Sl(31.07.2020 09:50)
- Может переполнение стека? Он у PIC16 аппаратный и без всяких
флажков переполнения. - Boвa(30.07.2020 21:44)
- Нет, это не объясняет п. 4). Почему после добавления кода умножения
16х16, но без вызова его, тот же самый, ранее корректно
исполнявшийся код - работает с осциллированием? - =AK=(31.07.2020 02:22)
- Я думаю, в коде жуткий баг, где-то нештатные переходы, прыжки по
коду. Когда раскопаете, будете удивляться, как оно вообще, чудом,
работало? Ну или воч-дог срабатывает (если есть в чипе). В общем,
что-то страшное - Nikolay_Po(31.07.2020 09:41)
- Я тоже склонен думать, что там какой-то баг связанный с обращением
к SHT35. Но в одном варианте он аннигилировал с каким-то другим
багом, поэтому работало хорошо. А во всех остальных вариантах
вылезает. Поэтому сам подход гнилой, не надо "стараться сделать так
же, как в работающем варианте" =AK=(233 знак., 31.07.2020 12:09)
- А почему бы не разобрать по косточкам весь обмен анализатором I2C
по три австралийских рубля за кило? - MBedder(31.07.2020 12:20)
- Я обмен вижу осциллом и худо-бедно разбираю "глазками". Правда, неоперативно получается. Много чего богомерзкого наблюдаю, но при этом работающий и неработающий варианты выглядят одинаково. =AK=(92 знак., 31.07.2020 12:32)
- Тем, чорненьким? За штуку баксов? ;О) Тот анализатор очень хорош,
да! - mse homjak(31.07.2020 12:28)
- Про что именно идет речь? Про какой анализатор? - RxTx(31.07.2020 13:04)
- Кстати, анализатор пока еще не пробовал - повода не было - MBedder(31.07.2020 12:37)
- А почему бы не разобрать по косточкам весь обмен анализатором I2C
по три австралийских рубля за кило? - MBedder(31.07.2020 12:20)
- Я тоже склонен думать, что там какой-то баг связанный с обращением
к SHT35. Но в одном варианте он аннигилировал с каким-то другим
багом, поэтому работало хорошо. А во всех остальных вариантах
вылезает. Поэтому сам подход гнилой, не надо "стараться сделать так
же, как в работающем варианте" =AK=(233 знак., 31.07.2020 12:09)
- Я думаю, в коде жуткий баг, где-то нештатные переходы, прыжки по
коду. Когда раскопаете, будете удивляться, как оно вообще, чудом,
работало? Ну или воч-дог срабатывает (если есть в чипе). В общем,
что-то страшное - Nikolay_Po(31.07.2020 09:41)
- Нет, это не объясняет п. 4). Почему после добавления кода умножения
16х16, но без вызова его, тот же самый, ранее корректно
исполнявшийся код - работает с осциллированием? - =AK=(31.07.2020 02:22)
- Судя по п. 4 имеется баг, когда читается программная память и её содержимое влияет на процесс. - fk0(30.07.2020 19:08)
- Нужно не жлобиться на функционал отладки и логгировать сырые
считанные из чипа данные (в компорт, запоминать последние 10 в озу
и потом вытаскивать отладчиком и т.п.) - fk0(30.07.2020 19:05)
- +1. и даже это избыточно. Без всяких приборов банально
закомментарить функции обработки, писать в епром необработанные
данные и посмотреть что получается. klown1(371 знак., 31.07.2020 10:20)
- Похоже что вы поленились внимательно прочитать представленное
описание. И не заметили, что сама запись в EEPROM является ключевым
моментом: без нее работает ОК, с ней - "осциллирует" =AK=(931 знак., 31.07.2020 12:56)
- не, я все прочитал.... не поленился, клянусь аллахом. Но вижу вещи
которые меня удивляют и вдвойне удивляют когда я вижу это от
человека с опытом. klown1(968 знак., 31.07.2020 15:01)
- Похоже вам лень посчитать, каковы будут отличия двух вычислений =AK=(1207 знак., 31.07.2020 16:42)
- нет коллега, пальцем в небо это вы... klown1(873 знак., 31.07.2020 17:53)
- Разжую еще раз, поскольку вижу, что с первого раза до вас ничего не доходит. =AK=(318 знак., 01.08.2020 02:32)
- Угу. Три или несколько младших бит читаются то нулями, то
единицами. В порядке бреда по теме таймингов. В EEPROM чтобы
записать время некое потребно, так ведь? - Бapбoc(31.07.2020 21:53)
- С таймингами там много странностей. =AK=(742 знак., 01.08.2020 02:56)
- нуда, обычно флаг выскакивает по завершении записи и новую запись
не начинаем пока этот флаг не встанет и не сбросим. Это на
внутреннем епром, на внешнем программер сам должен контролировать.
А код у коллеги на ассемблере и чужой, буквально каждую строчку
надо под лупой рассматривать. Контроль распределения ресурсов
важнейшая задача на асме (в данном случае я бы очень пристально
смотрел на перехлест прерываний от таймеров с любым другим и что
куда пишется ) + посмотрел бы не klown1(196 знак., 31.07.2020 22:38)
- В PIC16 один-единственный вектор прерывания. Он не может
"перехлестуться" с другими прерываниями, их просто нет. =AK=(363 знак., 01.08.2020 09:40, картинка)
- Как на одноразовых что-то отлаживать? Моя пришёл на это поле тогда,
когда уже были F. Бapбoc(173 знак., 01.08.2020 16:13)
- Вы присмотритесь внимательнее, тогда странности исчезнут. =AK=(263 знак., 02.08.2020 12:34, youtube)
- Чёт вот, глядя на вас обоих, вспоминается статейка одного англика, где говорится о том, что относительное количество дураков совершенно не зависит от изучаемой страты -- будь то сантехники, будь то академики. Всё те же девяносто пять процентов. Ничего личного, я так вижу. Бapбoc(2 знак., 02.08.2020 21:22)
- 16C84 были многоразовые. Потом же были эмуляторы (с ОЗУ что ли, не застал), были с окном для стирания. Наконец можно допрограммировать... но с такой большой памятью тогда не было. - fk0(01.08.2020 20:22)
- Вы присмотритесь внимательнее, тогда странности исчезнут. =AK=(263 знак., 02.08.2020 12:34, youtube)
- т.е. прерывания от таймеров за векторы прерывания не считаете ?
ппц. Даже в терминологии пробелы. И на это ушли годы жизни...
УДАЧИ... - klown1(01.08.2020 12:07)
- Проблемы в терминологии как раз у того, кто путает прерывания с
векторами, а еще и не представляет себе, как в мелких ПИКах
происходит обработка единственного прерывания от многих источников.
Ваш КО. - MBedder(01.08.2020 12:40)
- точно, этож мелкий пик.... тут уже я сам кошмарю.... в бан меня...))) klown1(55 знак., 01.08.2020 15:33)
- Ох, напомнили :) Там ведь кажись 0х04, там проверяешь флаги и
прыгаешь на обработчик. Или мне это кошмар приснился? - Бapбoc(01.08.2020 13:59)
- Экий Вы нежный :-) - Kpoк(01.08.2020 15:21)
- "Идите нахуй, я эстет, бля" Бapбoc(2 знак., 01.08.2020 15:53)
- Экий Вы нежный :-) - Kpoк(01.08.2020 15:21)
- Проблемы в терминологии как раз у того, кто путает прерывания с
векторами, а еще и не представляет себе, как в мелких ПИКах
происходит обработка единственного прерывания от многих источников.
Ваш КО. - MBedder(01.08.2020 12:40)
- Как на одноразовых что-то отлаживать? Моя пришёл на это поле тогда,
когда уже были F. Бapбoc(173 знак., 01.08.2020 16:13)
- В PIC16 один-единственный вектор прерывания. Он не может
"перехлестуться" с другими прерываниями, их просто нет. =AK=(363 знак., 01.08.2020 09:40, картинка)
- нет коллега, пальцем в небо это вы... klown1(873 знак., 31.07.2020 17:53)
- Похоже вам лень посчитать, каковы будут отличия двух вычислений =AK=(1207 знак., 31.07.2020 16:42)
- не, я все прочитал.... не поленился, клянусь аллахом. Но вижу вещи
которые меня удивляют и вдвойне удивляют когда я вижу это от
человека с опытом. klown1(968 знак., 31.07.2020 15:01)
- Похоже что вы поленились внимательно прочитать представленное
описание. И не заметили, что сама запись в EEPROM является ключевым
моментом: без нее работает ОК, с ней - "осциллирует" =AK=(931 знак., 31.07.2020 12:56)
- Нужно не жлобиться на своевременное обновление железа. - VLLV(30.07.2020 20:42)
- Да-да... вы это обьясните людям вписывающим 20+ лет поддержки (покупка комплектующих, обновление версии ПО) - sav6622(30.07.2020 23:06)
- +1. и даже это избыточно. Без всяких приборов банально
закомментарить функции обработки, писать в епром необработанные
данные и посмотреть что получается. klown1(371 знак., 31.07.2020 10:20)
- Хе, как-то больно сильно похоже на наши периодические траблы с
добавлением-убиранием нопиков =)) sav6622(202 знак., 30.07.2020 17:41)
- В пределах 2К команд PIC16 должно быть пофигу что где размещается =AK=(220 знак., 31.07.2020 03:26)
- Может при умножениях переполнение где-то возникает а последующая
программная фильтрация(есть?) сглаживает это в генерацию? Когда-то
использовал float point либы микрочипа (для pic16 на асме), так оно
не работало пока не обнулял используемые в либ регистры. - Илья(30.07.2020 17:13)
- Умножение целочисленное 16x16, баг, имеющийся в микрочиповском AN526, исправлен. =AK=(316 знак., 31.07.2020 02:30)
- Вижу в Datasheet SHT3x-DIS умножение на 100, но не на 1000. RxTx(40 знак., 30.07.2020 16:02, ссылка, картинка)
- А если NOP насовать между обращениями к регистрам I2C? - Evgeny_CD(30.07.2020 15:25)
- У меня там вставлены задержки по 10 мкс между любыми изменениями состояния линий H_SDA и SCL =AK=(36 знак., 30.07.2020 15:33)
- d) связанные с глубиной стека вызовов если они есть. ASDFS(67 знак., 30.07.2020 15:15)
- Это никак не объясняет п. 4) =AK=(68 знак., 30.07.2020 15:24)
- Если вдаваться в детали: =AK=(1048 знак., 30.07.2020 15:14)
- Я бы сделал вместо "частично развязанного" честный общий I2C. Samx(263 знак., 31.07.2020 17:43)
- Я бы с удовольствием сделал все заново. Но реалии таковы, что я
должен использовать имеющееся железо, в котором SCL сделан общим. =AK=(221 знак., 01.08.2020 02:41)
- Осталось сделать общим и SDA (можно программно), чтобы получить честную I2C-шину с двумя девайсами. Samx(125 знак., 01.08.2020 12:39)
- Я бы с удовольствием сделал все заново. Но реалии таковы, что я
должен использовать имеющееся железо, в котором SCL сделан общим. =AK=(221 знак., 01.08.2020 02:41)
- еще гипотеза. используется I2C аппаратный или программный?
Программный по правильному нужно делать через управление TRIS
(эмуляция ОК/OD) а не PORT. По стандарту Slave может затягивать
SCL. Если управлять через PORT, то редко (но возможно) появление
конфликта (Slave удерживает SCL в нуле если не готов, а Master
тянет его к 1) - отсюда лишние токи и/или неправильное считывание
данных и/или подвешивание Slave (с автоматическим "развешиванием"
последующим общением). - Илья(30.07.2020 18:29)
- I2C программный. "Затягивание SCL" не используется. =AK=(414 знак., 31.07.2020 03:12)
- я имею в виду что клок (SCL), т.е. длительность клоков Илья(797 знак., 31.07.2020 10:13, ссылка)
- Все устройства на I2C известны, все 20 с лишним лет работало без проблем. =AK=(843 знак., 31.07.2020 11:57)
- я имею в виду что клок (SCL), т.е. длительность клоков Илья(797 знак., 31.07.2020 10:13, ссылка)
- I2C программный. "Затягивание SCL" не используется. =AK=(414 знак., 31.07.2020 03:12)
- > SCL=0, SDA=0. lloyd(23 знак., 30.07.2020 17:20)
- Почему? Совершенно законная и очень обыденная комбинация. Например,
после START и перед STOP всегда SCL=0, SDA=0. - =AK=(31.07.2020 03:17)
- Но это не режим ожидания. Ожидающая шина - оба сигнала в единице - lloyd(31.07.2020 22:06)
- Почему? Совершенно законная и очень обыденная комбинация. Например,
после START и перед STOP всегда SCL=0, SDA=0. - =AK=(31.07.2020 03:17)
- А если анализатор прицепить и посмотреть, что по I2C читается? - Evgeny_CD(30.07.2020 15:21)
- Завтра осциллом собираюсь смотреть времянки, хотя вряд ли чего
путное увижу. =AK=(300 знак., 30.07.2020 15:30)
- Но должна же быть причина, отличная от магии! - Evgeny_CD(30.07.2020 15:47)
- Завтра осциллом собираюсь смотреть времянки, хотя вряд ли чего
путное увижу. =AK=(300 знак., 30.07.2020 15:30)
- Я бы сделал вместо "частично развязанного" честный общий I2C. Samx(263 знак., 31.07.2020 17:43)
- извиняюсь, а что мешает умножить на 1000 и поделить на 0xFFFF
целочисленкой? - m16(30.07.2020 15:02)
- Лень и отсутствие места в памяти программ. На текущий момент занято 1998 байт из 2048. =AK=(163 знак., 30.07.2020 15:20)