- 
	
- Удалось победить неизведанное? - 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)