Deutsch
Germany.ruФорумы → Архив Досок→ Программирование

Real Time Counter (RTC) проблема

1853  1 2 все
  moose старожил14.11.19 21:28
14.11.19 21:28 

сутки "тикает" с интервалом чуть меньше секунды без проблем, потом вдруг очередное прерывание не возникает. не знаю с какого конца начать и что вообще можно предпринять.

пока сделал нечто наподобие лога, показую на дисплей символы циклически (последние 8) и номер последнего записанного.

в обработчиках всех прерываний вставил запись в лог, никаких записей не появляется, т.е. просто нет прерывания по часам и все. сутки-двое тикает как часы, и вдруг - стоп.


хоть какую-инубдь идею : (

#1 
AlexNek патриот15.11.19 18:58
AlexNek
NEW 15.11.19 18:58 
в ответ moose 14.11.19 21:28

С постоянно работающим прогами вечно проблемы возникают, причем совершенно не там где думаешь

Тикалка то еще куда-то встроена? Может там память/стэк потихоньку заполняются? Конфилкты между треадми бывали, но в контролере должно быть по другому.

"Частоту" пробовал повышать? Быстрее вылетает или нет?

#2 
  moose старожил15.11.19 19:56
NEW 15.11.19 19:56 
в ответ AlexNek 15.11.19 18:58, Последний раз изменено 15.11.19 20:00 (moose)

никаких переполнений стеков быть там не может потому что не может быть никогда : ). выглядит как "сбой в хардвере", но может и я где-то чего-то недопонимаю, а хочется допонять.

вот этот чип имеется ввиду:

https://infocenter.nordicsemi.com/pdf/nRF51_RM_v3.0.pdf


там куча других возможностей с нужной мне точностью прерывания через определенные промежутки получить, но тогда так и не узнаю, что сейчас не так.


пока две идеи: найти второй экземпляр и попробовать, что будет с ним

упростить задачу до минимума: стартовать часы, и в обработчике только переключить светодиод (зажигать было бы удачнее, но будет слишком быстро, не уверен, что будет видно).

последний раз протикало всего несколько часов.


у меня из этой серии одна дефектрая плата уже попадалась, может и здесь просто с дефектрым экземпляром балуюсь.


если еще какие идеи будут - подкидывать сюда : )


#3 
AlexNek патриот16.11.19 18:02
AlexNek
NEW 16.11.19 18:02 
в ответ moose 15.11.19 19:56

вот еще идея появилась, может в сети что то мощное включается.

#4 
Wanderer_ завсегдатай17.11.19 12:16
NEW 17.11.19 12:16 
в ответ moose 15.11.19 19:56
упростить задачу до минимума

я бы в этом направлении и копал. Убрать всё и оставить только RTC. Если нормально отработает, то потом постепенно подключать один за другим другие задачи (модули) и смотреть после чего RTC опять отваливаться начнёт.

#5 
Murr патриот17.11.19 13:03
Murr
NEW 17.11.19 13:03 
в ответ Wanderer_ 17.11.19 12:16

Убрать всё и оставить только RTC.

-----

Эээ... а скорее всего не поможет.


смотреть после чего RTC опять отваливаться начнёт.

-----

У меня как-то все работало идеально... но только 2 минуты... потом контрoллер останавливался.

К тому времени Я уже успел прочитать доки и знал, что есть в конфигурации параметер, определяющий длительность работы без перезапуска...

#6 
  moose старожил17.11.19 20:29
NEW 17.11.19 20:29 
в ответ Wanderer_ 17.11.19 12:16

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

#7 
  moose старожил19.11.19 17:14
NEW 19.11.19 17:14 
в ответ moose 17.11.19 20:29, Последний раз изменено 19.11.19 17:24 (moose)
0xE4 / 0xE5[3:0] dig_H4 [11:4] / [3:0] signed short
0xE5[7:4] / 0xE6 dig_H5 [3:0] / [11:4] signed short

туплю на этой спецификации. не уверен, что правильно интерпретирую

здесь из трех байт, считанных с адресов 0xE4,0xE5,0xE6 нужно выдрать два двухбайтовых значения: dig_H4 и dig_H5. допустим, считали такое:


0xE4 (биты 76543210): abcd efgh

0xE5 (биты 76543210): ijkl mnop

0xE6 (биты 76543210): rstu vwxy


правильно ли я перетаскиваю биты в двухбайтовики? забудем об endiannes'е, будем считать, что биты просто идут слева (msb) направо, байты не кувыркаются. только перетягивание битов интересно в данный момент, т.е. правильное понимание спецификации. итак, мой вариант результата:


dig_H4: 0000 abcd efgh mnop

dig_H5: 0000 rstu vwxy ijkl

#8 
AlexNek патриот19.11.19 21:25
AlexNek
NEW 19.11.19 21:25 
в ответ moose 19.11.19 17:14, Последний раз изменено 20.11.19 13:25 (AlexNek)

Стыдно признаться, но нифига вообще не понял спецификации, но вот надыбал может поможет

dig_H4 = (data[0] << 4) | (data[1] & 0x0F) ;
dig_H5 = (data[2] << 4) | (data[1] >> 4) ;

отсюда стибрил

https://os.mbed.com/users/Rhyme/code/BME280/file/7b525853b...

#9 
Wanderer_ завсегдатай19.11.19 22:02
NEW 19.11.19 22:02 
в ответ moose 19.11.19 17:14
0xE4 / 0xE5[3:0] dig_H4 [11:4] / [3:0] signed short
0xE5[7:4] / 0xE6 dig_H5 [3:0] / [11:4] signed short

насколько я понимаю, первая пара (0xE4 / 0xE5[3:0]) показывает что Е4 перенимается полностью а у Е5 только четыра бита[3:0].

Вторая пара ([11:4] / [3:0]) местоположение битов в dig_H4.

У dig_H5 используется четыре бита [7:4] из Е5 весь Е6.

Ваше решения я думаю правильное.

#10 
  moose старожил20.11.19 09:52
NEW 20.11.19 09:52 
в ответ Wanderer_ 19.11.19 22:02, Последний раз изменено 20.11.19 09:53 (moose)

AlexNek, Wanderer_, спасибо большое! эти биты по инструкции крутить - всегда головняк. есть ли, интересно, есть ли какой-нибудь RFC на эту тему, или каждый пишет чтобы понятно было ему самому, а остальные - сами виноваты?

в качестве положительного образца могу привести reference manual на nRF51 от nordic semiconductor. никаких вопросов вообще, все ясно с первого прочтения (внимательного, конечно).

#11 
Wanderer_ завсегдатай21.11.19 20:58
NEW 21.11.19 20:58 
в ответ moose 20.11.19 09:52

Тут каждый пишет как может, стандарта нет.


Как вы там с RTC уже разобрались?

#12 
  moose старожил21.11.19 21:43
NEW 21.11.19 21:43 
в ответ Wanderer_ 21.11.19 20:58

не так разобрался, как привык и успокоился : ) пока все на брэдборде соплями собрано, решил не обращать на это внимания.

теперь еще одна проблема. нужно вот такой дисплей

https://www.ebay.de/itm/1-8-inch-TFT-ST7735S-LCD-Display-M...

когда нужен - запитывать, когда не нужен - убирать питание. управление - через gpio + вот такая схема




схема раьботает, т.е. питание убирается/подается, но дело в том, что этот дисплей работает .... и без питания! выяснил, переключая на ходу его запитывающий кабель от питания напрямую к схеме. он при этом продолжал работать в состоянии с вытащенным кабелем питания. у меня пока никаких идей, от чего он таки питается. кабель к ножке питания убрал вообще, но на нем прозванивается 3.3 вольта : ( с брэдбордом что-то не так? завтра попробую спилить краюшек борда, чтобы можно было перевоткнуть так, чтобы ножка питания (хорошо она крайняя) вообще висел в воздухе буквально. но думаю, ничего не даст - будет работать как и сейчас. но сегодня уже все, надоело.

#13 
  moose старожил07.12.19 21:03
NEW 07.12.19 21:03 
в ответ moose 21.11.19 21:43

оффтоп. но в собственной теме, поэтому себе прощаю.

хочу пррекомендовать сериал тем, кто еще не знает:


https://en.wikipedia.org/wiki/The_Crown_(TV_series)


#14 
VSN прохожий11.03.20 07:41
NEW 11.03.20 07:41 
в ответ moose 21.11.19 21:43

Может, уже и выяснили про работу дисплея "без питания", попробую вдогонку. Часто внутри чипа на входах стоят защитные диоды на общий и питание, для предотвращения перенапряжения. Если в такой схеме отключить питание, но оставить на любом входе лог. "1", чип запитается от входа, и возможно защелкнется паразитная тиристорная структура, которая не даст нормально работать, даже при подаче питания на вывод. Вообще, на большинстве микросхем снятие питания при активных сигналах на входах недопустимо. Если невозможно чип вогнать в сон командой или сигналом, то перед снятием питания перевести все управляющие сигналы в "0".

#15 
  moose коренной житель11.03.20 18:45
NEW 11.03.20 18:45 
в ответ VSN 11.03.20 07:41, Последний раз изменено 11.03.20 18:49 (moose)

спасибо за информацию. постараюсь запомнить и иметь ввиду при случае, что еще и такое бывает.

у меня проблема решилась заменой брэдборда на несколько другого типа. был "обычный" белый длинный, и на нем - все. со временем, видимо, контакты разболтались. этот брэдборд вообще некачественный (мои три по крайней мере). особенно если воткнуть туда "стандартный" пин (0.6мм), а потом туда же - легенький китайский с круглыми кончиками 0.4мм. вилка контакта там очень легко деформируется и больше не держит (это хорошо), или плохо держит (это плохо).

переехал на эти маленькие китайские же разноцветные, что их многие на ибее по шесть штук продают (сперва заказал одну у немца какого-то на пробу), посмотрел на контакты - другое дело! втыкается с усилием, после втыкания 0.6 контакт возвращается в исходное положение, и держит 0.4 довольно надежно. в общем, небо и земля. рекомендую, если пользуетесь.

попробую картинки показать. первая картинка - "плохой", вторая - "хороший"




#16 
VSN прохожий11.03.20 22:23
NEW 11.03.20 22:23 
в ответ moose 11.03.20 18:45

Спасибо, буду иметь ввиду.. Я, правда, слегка отошел от рассыпухи (специфика промышленной электроники такова, что задачи лучше решать стандартным оборудованием, даже если это кажется дороже в десятки раз - потом по итогу дешевле выходит..)

#17 
  moose коренной житель12.03.20 16:35
NEW 12.03.20 16:35 
в ответ VSN 11.03.20 22:23

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

#18 
VSN прохожий13.03.20 18:57
NEW 13.03.20 18:57 
в ответ moose 12.03.20 16:35

Стандартное оборудование - это когда например, надо что-либо включать\отключать с задержкой, по определенному алгоритму - не паять что-либо на платке, отрабатывать настраивать, искать корпус и сопрягать сигналы, рисовать схемку и пояснение на бумажке (что бы не забыть потом, да и для других), а взять готовый стандартный промышленный таймер и поставить на DIN-рейку в шкаф. Да, он стоит несколько десятков евро, но его в любой момент можно пойти и купить, заменить, - на него всегда есть описание и внутри уже стоят все возможные защиты и необходимые для промышленности решения. И любой опытный электроник или КИПовец сразу видит что к чему. А не разбирается с самопальными платками и прочей кустарщиной в условиях простоя оборудования, когда каждый час стоит тысячи евро. И это очень простой пример.

#19 
  moose коренной житель13.03.20 21:07
NEW 13.03.20 21:07 
в ответ VSN 13.03.20 18:57

спасибо, "примерно понял" : )

в одном из проектов приводил в нормальное состояние одно дэсктоп приложение, управляющее всякими имбэддэд-штучками. дык чтобы воссоздать мне тулчейн и арбайтсумгэбунг мне на столе собрали нечто, как я потом выяснял, что пару тыщ стоит. большинство из этого было действительно удобно, но за некоторые вещи явно переплачено. просто - бабки есть, покупаем наилучшее что есть и едем дальше.

но я (пока) не могу себе позволить таких затрат, не будучи еще уверенным в отдаче, посему - пока самопальные платки : (

#20 
  moose коренной житель18.03.20 12:04
NEW 18.03.20 12:04 
в ответ moose 13.03.20 21:07

может кто с такой проблемой поможет. чип - nRF51 (Nordic Semiconductor). я его радио не использую вообще, просто был под рукой и мало в system off потребляет. к тому же - супер-документирован. единственное, процессор М0, но обходимся.


проблема такая. конфигурирую для gpio:

input

buffer connect

pulldown

sense high

port enable


хочу его через этот пин будить после WFE. в качестве сенсоров хочу вот эти штучки использовать



но пин "срабатывает", если к нему коснуться источником питания, а сигналы от упомянутых устройст он подсаживает капитально. отсоединяем пин - меряем сигнал. присоединяем пин - сигнала нет, посажен пином на землю.

причем я это уже проделывал когда-то, но не могу найти, как я тогда сконфигурировал пин. кажется, так же, но почему-то не работает : (


#21 
VSN прохожий19.03.20 19:31
NEW 19.03.20 19:31 
в ответ moose 18.03.20 12:04

Думаю, что пин сконфигурирован на выход. Или какая-то периферия автоматом переключает пин на выход. Надо замерить ток сработки от источника. Если он равен единицы-десятки мА, то это выход.

#22 
  moose коренной житель19.03.20 20:14
NEW 19.03.20 20:14 
в ответ VSN 19.03.20 19:31

не думаю, что на выход. было бы слишком хорошо.

потому что, касаясь туда плюсом источника питания, все срабатывает правильно. такое впечатление, что дивайс-источник пина "недодрайвивает". хотя раньше все было как надо. сегодня сваял файл, который ничего больше не делает, кроме как ждет сигнала на пине и зажигает светодиод. опять же все красиво, если подать "сигнал" с батареи. сенсор отдельно от всего работает без проблем. включенный в эту схему - никак. когда разберусь - обязательно сообщу, что я напартачил. но любые подсказки/догадки будут полезны! поэтому - спасибо!

#23 
VSN прохожий19.03.20 23:08
NEW 19.03.20 23:08 
в ответ moose 19.03.20 20:14

Если уверены в регистре DIR, то следует понять тип выхода датчика. Чаще всего он бывает Открытый Коллектор, т.е. NPN типа. А это значит, что вход надо делать PULL UP, и проверять минусом источника.

#24 
  moose коренной житель20.03.20 11:14
NEW 20.03.20 11:14 
в ответ VSN 19.03.20 23:08, Последний раз изменено 20.03.20 13:35 (moose)

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


да, еще интересный момент. на платке этого touch-key светодиодик имеется, который загорается, если к нему палец или что-то поднести. стоит только посадить его на пин - светодиодик гаснет.

#25 
  moose коренной житель20.03.20 20:27
NEW 20.03.20 20:27 
в ответ moose 20.03.20 11:14

так и знал, что где-то был невнимателен. не буду даже рассказывать что было, потому что стыдно, и к делу не относится. все работает как надо.


но зато новая проблема : ) даже две.


проблема - нехилое потребление тока этими датчиками. движения потребляет еще терпимо, но ему (тому что на картинке) не хватает силы качнуть пин. датчик от панасоника работает чудесно. то стоит десятку. жлобно, но что поделаешь.

тач-сенсор работает чудесно, но жрет в стэндбае 1 мА, хотя по документу чипа, там применяемого, должно быть не более 3 или 5 мкА. попробую на плате поколдовать, обрезать эту светодиодную цепь, больше там ничего вообще не вижу. какая-то емкость еще. но емкость ток, насколько знаю, не потребляет.

#26 
  moose коренной житель12.04.20 17:22
NEW 12.04.20 17:22 
в ответ moose 20.03.20 20:27

chip: blue pill stm32f103.

on board rtc. пытаюсь получить прерывание от него раз в секунду. для контроля переключаю его светодиод (gpio 13). мигает однако раз в десять чаще, чем раз в секунду. prescaler установил на 0x7FFF, наибольшее что можно записать в его RTC_PRLL регистр. и так это соответствует описанию. в дибаггере вижу, что значение counter'а (RTC_CNTL) меняется где-то каждую секунду, но прерввания генерируются гораздо чаще.

если у кого идеи имеются - пожалуйста сюда.

#27 
Wanderer_ завсегдатай13.04.20 00:21
NEW 13.04.20 00:21 
в ответ moose 12.04.20 17:22
on board rtc. пытаюсь получить прерывание от него раз в секунду. для контроля переключаю его светодиод

Частота входная (input clock frequency) какая?

Должна быть 32,768kHz ,чтобы получить период в одну секунду.

#28 
  moose коренной житель13.04.20 10:26
NEW 13.04.20 10:26 
в ответ Wanderer_ 13.04.20 00:21

такой кварц там и стоит. все сделал "по учебнику", уже пробовал больший прискэйлэр задавать в разы, все равно мигает как бешеный

#29 
  moose коренной житель13.04.20 16:31
NEW 13.04.20 16:31 
в ответ moose 13.04.20 10:26

нашел. в который раз убеждаюсь: чудес не бывает, нужно просто быть внимательнее : )

#30 
Wanderer_ завсегдатай13.04.20 18:56
NEW 13.04.20 18:56 
в ответ moose 13.04.20 10:26
такой кварц там и стоит. все сделал "по учебнику", уже пробовал больший прискэйлэр задавать в разы, все равно мигает как бешеный

Там вроде два кварца, Не тот использовали?

#31 
  moose коренной житель13.04.20 21:05
NEW 13.04.20 21:05 
в ответ Wanderer_ 13.04.20 18:56

нет, забыл выйти из процедуры инициализации (как оказалось, правильной), и выполнение после инициализации продолжилось дальше по коду. а там - процедура мигания, которую я раньше для теста светодиода набросал. и получалось, что выполнение циклит в этом мигании (раз десять в секунду), и переключение светодиода раз в секунду в процедуре прерывания просто не видно на этом фоне. решил выполнить пошагово и к удивлению не вышел из процедуры, а прямо прошагал в следующую. на ассемблере такое (и многое другое) возможно без проблем : )

#32 
1 2 все