vn821202 0 27 апреля, 2015 Опубликовано 27 апреля, 2015 · Жалоба Т.е. во флеш пишите из прерывания?? Знаете, сколь по длительности запись идет?? А прерывать запись флеши далеко не в каждом контроллере разрешается. Странно, почти везде требуется время... Нет, FLASH пишется уже не из прерывания, во время записи прерывания запрещены все. Вот такие контроллеры ADI делает, ждать выхода PLL на режим не нужно. Что мешает в обработчике IRQ сделать то же самое программно? И что именно там делается с частотой аппаратно?: включается и разгоняется PLL или меняется источник тактирования (PLL/внутренний RC) или просто меняется делитель тактовой перед CPU? Если первое - то время стабилизации PLL довольно велико и много больше времени входа в любой ISR. Если второе или третье - то программно переключить источник (при условии, что он уже работает и готов) или изменить делитель тактовой CPU дело одной-двух записей в регистры на входе в обработчик IRQ. Если Вы не вынесете монитор питания в FIQ, а прочие прерывания - в IRQ, а всё повесите на FIQ, то новый FIQ монитора у Вас не вызовется никак до окончания обработки текущего ISR (у Вас наверное и другие ISR в системе есть?). Ну если только не предпринять каких-то хитрых манипуляций с режимами работы CPU. Да и вообще - говорить о скорости реакции на прерывание, учитывая какую Вам работу на сделать по его обслуживанию (работа с ADC, запись флешь) смешно. Она будет несравнима мала по сравнению со временем доступа к флешь. Флешь у Вас кстати какая? SPI или ...? А учитываете, что если сработал монитор, а у вас уже идёт, не дай бог, операция стирания, сколько придётся ждать? Может всё-таки Вам лучше для записи событий монитора поставить батарейное ОЗУ или FRAM? Заменить на MSP430 из серии с FRAM-памятью ;) Там что запись в ОЗУ, что во FRAM - никакой разницы. Не хватает ОЗУ - отрезал от памяти программ скока надо ;) АЦП должно регистрировать сигнал который вызвал срабатывание компаратора и прерывание FIQ. Фронт сигнала достаточно крутой, поэтому задержки начала регистрации сигнала приведут к потере информации о форме сигнала. При возникновении FIQ в регистре PLL аппаратно сбрасываются биты, задающие коэффициент умножения, так что при в входе в функцию-обработчик FIQ контроллер работает уже на максимальной частоте (впрочем эту возможность можно отключить в файле конфигурации МК), источник тактирования не меняется - всегда работает от собственного RC генератора 32768 Гц. PLL у МК ADUC какая-то хитрая - необходимости ждать выхода PLL на режим не нужно (в документации про это нет информации, да и соответствующих бит в регистрах тоже нет). Запись во FLASH осуществляется после окончания регистрации, при этом используется собственная FLASH память МК. Стирание FLASH заранее - при подготовке прибора к работе. Прибор очень миниатюрный - диаметр 11 мм, высота порядка 15 мм :-), поэтому схемотехнической мысли растекаться особенно некуда :-)? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 27 апреля, 2015 Опубликовано 27 апреля, 2015 · Жалоба ну так кто вам мешает руками этот делитель перебросить? У вас ПЛЛ всегда настроена и шарахает, потому и ждать не надо, просто делитель перебрасывается и всех делов. Ну в общем я не вижу противоречий и с переходом в фик. Зачем вам после прерывания и снятия данных обязательно сразу же их записывать. При штатной работе задержка записи ни на что не повлияет, она будет порядка миллисекунд, а при аварии уже не важно что там было, ИМХО я бы предложил сделал так: Когда появляется прерывание FIQ вы снимаете данные (очевидно вы снимаете какую-то кривую) и пихаете ее в массив RAM и выходите из прерывания с флажком есть данные. В основном цикле вы по флажку есть данные пихаете их во flash, процедуры проверки флажка можно поставить сколь угодно часто в основном цикле, потому задержки почти не будет. Чтобы не терять данные можно сделать 2 буффера. то есть один стоит ждет данные, а другой готов для сохранения во флэш, тогда даже если будет 2 прерывания подряд не успев добраться до процедуры записи ничего не потеряется. А можно сделать кольцевой буффер на большее число массивов, и все будет хорошо и красиво. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 242 28 апреля, 2015 Опубликовано 28 апреля, 2015 · Жалоба АЦП должно регистрировать сигнал который вызвал срабатывание компаратора и прерывание FIQ. Фронт сигнала достаточно крутой, поэтому задержки начала регистрации сигнала приведут к потере информации о форме сигнала. При возникновении FIQ в регистре PLL аппаратно сбрасываются биты, задающие коэффициент умножения, так что при в входе в функцию-обработчик FIQ контроллер работает уже на максимальной частоте (впрочем эту возможность можно отключить в файле конфигурации МК), источник тактирования не меняется - всегда работает от собственного RC генератора 32768 Гц. PLL у МК ADUC какая-то хитрая - необходимости ждать выхода PLL на режим не нужно (в документации про это нет информации, да и соответствующих бит в регистрах тоже нет). Запись во FLASH осуществляется после окончания регистрации, при этом используется собственная FLASH память МК. Стирание FLASH заранее - при подготовке прибора к работе. Как уже сказал ув. Golikov A., в прерываниях FIQ и монитора питания не нужно делать никакой работы - просто поставить флажки (т.е. - активизировать фоновую задачу). А в фоновой задаче выполнять все чтения АЦП/сохранения во флешь. Всё равно если у вас уже идёт запись во флешь, то пока она не закончится, данные монитора питания Вы не запишете. В фоновой задаче, после обнаружения флажка, можно программно переключить делитель PLL на макс. частоту. А вообще - по-моему раз у Вас должна захватываться какая-то осциллограмма с АЦП по сигналу аварии, то мне кажется начинать её сохранять после события уже поздно. Наверняка нужна какая-то предыстория. Поэтому думаю - АЦП должно всегда работать, писать поток данных в кольцевой буфер, а по сигналу аварии защёлкнуть позицию буфера (за N отсчётов до события), после защёлкивания захватить ещё сколько-то данных и записать их во флешь. В нашем устройстве тоже как раз должен делаться подобный захват осциллограммы по одному из сигналов события. С предысторией. И кольцевой буфер у нас к тому-же в энергонезависимой памяти. Прибор очень миниатюрный - диаметр 11 мм, высота порядка 15 мм :-), поэтому схемотехнической мысли растекаться особенно некуда :-)? Это Вы про мой совет использовать FRAM? Так я вообще-то имел в виду, что у TI есть серия MSP430FRxxx - там вместо флешь в качестве энергонезависимой памяти используется FRAM. Так что никаких доп. элементов паять не нужно. И код и данные (журнал событий), если их не много, можно хранить в ней. И корпус очень миниатюрный. ;) И алгоритм получается очень простой: пишете поток данных с АЦП непрерывно в кольцевой буфер во FRAM (буфер размером N+M, где N - размер предыстории события, M-размер послеистории события). После возникновения события, в ISR выставляете флаг==M, в фоновой задаче видите если флаг установлен - декрементируете его с каждым записанным в кольцо сэмплом, после обнуления счётчика останавливаете запись. Если нужна возможность регистрации неск. событий - после защёлкивания текущего буфера и исчерпания M, не останавливаете поток записи в кольцо, а просто - переключаетесь на второй кольцевой буфер, третий и т.п. И при наличии FRAM никаких проблем с занятостью её текущей записью при возникновении аварии монитора питания нет - можете хоть сразу в ISR и записать что надо во FRAM. Да и тактирование в MSP430 очень удобно сделано: Запускаете АЦП с тактированием от какого-то низкочастотного источника, с записью потока через DMA. Усыпляете CPU. Высокочастотный RC тактировавший ядро отключается, потребление падает до неск. мкА. При возникновении прерывания события или монитора питания, ядро пробуждается, его ВЧ RC-генератор (DCO) быстро запускается и во время выполнения ISR работает на высокой частоте. При выходе из ISR буквально одной командой можно выставить состояние завершения ISR: вернётся он в сон или продолжит выполнение уже фоновой задачи на полной частоте. Т.е. - CPU будет почти всё время спать изредка просыпаясь при завершении очередного блока DMA, для его перепрограммирования и для обслуживания событий компаратора и монитора питания. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 28 апреля, 2015 Опубликовано 28 апреля, 2015 · Жалоба Что-то мне говорит что ADuC - это фигня со встроенной АЦП... да еще какой-то хитро много канальной или многодиапазонной. Это же для всяких мультитесторов спец проц да? и jcxz прав, как он предлагает, еще лучше. АЦП просто долбит по кругу и сохраняет в кольцевой буфер, а по событию оно просто до сохраняет хвост данных и пихает это дело во флэш. В такой организации у вас от прерывания события надо просто поставить флажки и все. Частота АЦП связана с основной частотой проца? Можно ее всегда запустить на максимуме? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 53 28 апреля, 2015 Опубликовано 28 апреля, 2015 · Жалоба Заменить на MSP430 из серии с FRAM-памятью Там что запись в ОЗУ, что во FRAM - никакой разницы. Не хватает ОЗУ - отрезал от памяти программ скока надо Дак уж лучше на стм, там есть оч. хорошая штука, как подпитываемая часовой или другой батарейкой, память. Причем это обычное озу, со всеми характеристиками статической памяти, но питается из другого домена, размер до 4килобайт. Во многих случаях с батарейным питанием выручала... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 242 28 апреля, 2015 Опубликовано 28 апреля, 2015 · Жалоба Дак уж лучше на стм, там есть оч. хорошая штука, как подпитываемая часовой или другой батарейкой, память. Причем это обычное озу, со всеми характеристиками статической памяти, но питается из другого домена, размер до 4килобайт. Во многих случаях с батарейным питанием выручала... В MSP430FRxxx FRAM тоже как обычная ОЗУ - так же в ней переменные объявляешь и так же модифицируешь как хочешь - никакой разницы с ОЗУ, только после выключения сохраняет данные. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 28 апреля, 2015 Опубликовано 28 апреля, 2015 · Жалоба ну учитывая габариты не думаю что там много место под еще батарею. FRAM - реальное решение, тоже делал на фрам озу для дата логера. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vn821202 0 28 апреля, 2015 Опубликовано 28 апреля, 2015 · Жалоба Как уже сказал ув. Golikov A., в прерываниях FIQ и монитора питания не нужно делать никакой работы - просто поставить флажки (т.е. - активизировать фоновую задачу). А в фоновой задаче выполнять все чтения АЦП/сохранения во флешь. Всё равно если у вас уже идёт запись во флешь, то пока она не закончится, данные монитора питания Вы не запишете. В фоновой задаче, после обнаружения флажка, можно программно переключить делитель PLL на макс. частоту. А вообще - по-моему раз у Вас должна захватываться какая-то осциллограмма с АЦП по сигналу аварии, то мне кажется начинать её сохранять после события уже поздно. Наверняка нужна какая-то предыстория. Поэтому думаю - АЦП должно всегда работать, писать поток данных в кольцевой буфер, а по сигналу аварии защёлкнуть позицию буфера (за N отсчётов до события), после защёлкивания захватить ещё сколько-то данных и записать их во флешь. В нашем устройстве тоже как раз должен делаться подобный захват осциллограммы по одному из сигналов события. С предысторией. И кольцевой буфер у нас к тому-же в энергонезависимой памяти. Это Вы про мой совет использовать FRAM? Так я вообще-то имел в виду, что у TI есть серия MSP430FRxxx - там вместо флешь в качестве энергонезависимой памяти используется FRAM. Так что никаких доп. элементов паять не нужно. И код и данные (журнал событий), если их не много, можно хранить в ней. И корпус очень миниатюрный. ;) И алгоритм получается очень простой: пишете поток данных с АЦП непрерывно в кольцевой буфер во FRAM (буфер размером N+M, где N - размер предыстории события, M-размер послеистории события). После возникновения события, в ISR выставляете флаг==M, в фоновой задаче видите если флаг установлен - декрементируете его с каждым записанным в кольцо сэмплом, после обнуления счётчика останавливаете запись. Если нужна возможность регистрации неск. событий - после защёлкивания текущего буфера и исчерпания M, не останавливаете поток записи в кольцо, а просто - переключаетесь на второй кольцевой буфер, третий и т.п. И при наличии FRAM никаких проблем с занятостью её текущей записью при возникновении аварии монитора питания нет - можете хоть сразу в ISR и записать что надо во FRAM. Да и тактирование в MSP430 очень удобно сделано: Запускаете АЦП с тактированием от какого-то низкочастотного источника, с записью потока через DMA. Усыпляете CPU. Высокочастотный RC тактировавший ядро отключается, потребление падает до неск. мкА. При возникновении прерывания события или монитора питания, ядро пробуждается, его ВЧ RC-генератор (DCO) быстро запускается и во время выполнения ISR работает на высокой частоте. При выходе из ISR буквально одной командой можно выставить состояние завершения ISR: вернётся он в сон или продолжит выполнение уже фоновой задачи на полной частоте. Т.е. - CPU будет почти всё время спать изредка просыпаясь при завершении очередного блока DMA, для его перепрограммирования и для обслуживания событий компаратора и монитора питания. У рассматриваемого ADUC7021 есть одно хорошее качество - корпус QFN40 размером 6х6 мм. Есть новые контроллеры на Cortex-M0+ c еще меньшим корпусом QFN32 и всеми наворотами включая DMA. Но руководство возлюбило ADUCи, поэтому приходится крутиться на этой МК. Что-то мне говорит что ADuC - это фигня со встроенной АЦП... да еще какой-то хитро много канальной или многодиапазонной. Это же для всяких мультитесторов спец проц да? и jcxz прав, как он предлагает, еще лучше. АЦП просто долбит по кругу и сохраняет в кольцевой буфер, а по событию оно просто до сохраняет хвост данных и пихает это дело во флэш. В такой организации у вас от прерывания события надо просто поставить флажки и все. Частота АЦП связана с основной частотой проца? Можно ее всегда запустить на максимуме? Если бы в ADUC было DMA, так бы и сделал. Но там его нет и с АЦП приходится работать программно, а чтобы успевать обрабатывать поступающие данные и кольцевой буфер нужна частота ЦПУ порядка 10 МГц. Поэтому пишу кривую без предыстории, вернее с предысторией но с очень низкой частотой дискретизации на минимальной тактовой частоте ЦПУ. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 53 28 апреля, 2015 Опубликовано 28 апреля, 2015 (изменено) · Жалоба FRAM - реальное решение, Я так понимаю, что эта FRAM - разновидность EEPROM, а след. у нее есть кол-во циклов перезаписи, после которого начинаются "чудеса"...Или я что-то путаю?? вернее с предысторией но с очень низкой частотой дискретизации на минимальной тактовой частоте ЦПУ. "Очень низкая" это сколько? Изменено 28 апреля, 2015 пользователем mantech Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vn821202 0 28 апреля, 2015 Опубликовано 28 апреля, 2015 (изменено) · Жалоба Я так понимаю, что эта FRAM - разновидность EEPROM, а след. у нее есть кол-во циклов перезаписи, после которого начинаются "чудеса"...Или я что-то путаю?? "Очень низкая" это сколько? частота ЦПУ 300 кГц, частота пробуждения ЦПУ - 1 Гц, между пробуждениями ЦПУ находится в режиме STOP Изменено 28 апреля, 2015 пользователем VadimNic_nt Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 28 апреля, 2015 Опубликовано 28 апреля, 2015 · Жалоба Я так понимаю, что эта FRAM - разновидность EEPROM, а след. у нее есть кол-во циклов перезаписи, после которого начинаются "чудеса"...Или я что-то путаю?? да, но оно очень большое 10^5 а бывает и больше сильно Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 53 28 апреля, 2015 Опубликовано 28 апреля, 2015 · Жалоба да, но оно очень большое 10^5 а бывает и больше сильно Если идет постоянная и интесивная запись, то 100000 быстро закончатся... Из прерывания FIQ вызывать эту функцию не хочу, так как она по времени выполнения занимает порядка 30 мс, к тому же в процессе ее выполнения может произойти прерывание от монитора напряжения питания в случае возникновения которого необходимо корректное остановка работы микроконтроллера. Мне все-таки одно не понятно из задачи ТС, это то, зачем нужно так быстро реагировать на сигнал монитора питания? Непонятно то, что даст такая скорость? Батарея вдруг вот так, за 30 мсек не разрядится, и вполне можно, просто зафиксировав факт сработки монитора питания, "неспеша" записать показания и отключить контроллер... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 28 апреля, 2015 Опубликовано 28 апреля, 2015 · Жалоба FM23MLD16 (8 Мбит) 10^14 циклов перезаписи, малюсенькая, я подобную гонял для RAM датологгера, писал кольцевые буферы в нее, если питание слетало буфер оставался... А скорость реакции, думаю как обычно в таких делах никто не знает сколько она должна, потому закладываются на чем лучше тем больше:) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 242 29 апреля, 2015 Опубликовано 29 апреля, 2015 · Жалоба У рассматриваемого ADUC7021 есть одно хорошее качество - корпус QFN40 размером 6х6 мм. Есть новые контроллеры на Cortex-M0+ c еще меньшим корпусом QFN32 и всеми наворотами включая DMA. Но руководство возлюбило ADUCи, поэтому приходится крутиться на этой МК. MSP430FR57xx: корпуса от VQFN24 до VQFN40. Так что и здесь - получше ADUC ;) Выбор элементной базы и обоснование этого выбора, имхо - это прерогатива разработчика. Неужто начальство такое невменяемое, что не смотря ни на какие сравнительные характеристики просто хочет потому что хочет??? а чтобы успевать обрабатывать поступающие данные и кольцевой буфер нужна частота ЦПУ порядка 10 МГц. Поэтому пишу кривую без предыстории, вернее с предысторией но с очень низкой частотой дискретизации на минимальной тактовой частоте ЦПУ. А зачем их обрабатывать? Пока не наступило событие Вашего компаратора, их не надо обрабатывать. Писать и писать поверх. Обрабатывать только при наступлении события. Если идет постоянная и интесивная запись, то 100000 быстро закончатся... Вообще-то не 10^5, а 10^15, а это, если писать с частотой 1МГц, на неск. десятилетий непрерывной записи хватит. К тому-же там указано, что это теоретический предел, так как в реальности состояние износа достигнуто не было никогда. К тому-же во FRAM (в отличие от Flash) минимальной записываемой единицей является байт. Поэтому в случае записи кольцевого буфера, кол-во циклов перезаписи можно умножить на размер кольцевого буфера. Я так понимаю, что эта FRAM - разновидность EEPROM, а след. у нее есть кол-во циклов перезаписи, после которого начинаются "чудеса"...Или я что-то путаю?? Это совершенно другой тип ячейки памяти. Технологически. Где-то пишут: "ferroelectric random access memory", где-то: "память на сегнетомагнетиках". частота ЦПУ 300 кГц, частота пробуждения ЦПУ - 1 Гц, между пробуждениями ЦПУ находится в режиме STOP Какие требования по потреблению устройства? А скорость реакции, думаю как обычно в таких делах никто не знает сколько она должна, потому закладываются на чем лучше тем больше:) Монитор питания обычно подразумевает, что есть источник (LDO или импульсник) понижающий Uвх до Uвых защищаемого узла. Детектор пропадания питания работает по Uвх. Соответственно - время между выставлением сигнала аварии питания и снижением Uвых до уровня срабатывания супервизора питания защищаемого узла определяется энергией, запасённой в конденсаторах. Т.е. - ёмкостью кондёров на Uвх и Uвых, разницей Uвх-Uвых и током потребления защищаемого узла. И это время должно рассчитываться на этапе проектирования монитора питания и соответствовать заданному в ТЗ. А "чем больше тем лучше" - это радиолюбительство ;) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 29 апреля, 2015 Опубликовано 29 апреля, 2015 · Жалоба А "чем больше тем лучше" - это радиолюбительство я вас умоляю:)... У рассматриваемого ADUC7021 есть одно хорошее качество - корпус QFN40 размером 6х6 мм. Есть новые контроллеры на Cortex-M0+ c еще меньшим корпусом QFN32 и всеми наворотами включая DMA. Но руководство возлюбило ADUCи, поэтому приходится крутиться на этой МК. похоже что тут будут оценены бюджет потребления и величина емкостей:)? В ADUC7021 даже есть кусок программируемой логической матрицы, это проц для мультиметров ИМХО, а не для миниатюрных логеров процесса. Так что чем лучше тем больше:) и никакого радиолюбетельства)... кстати в первых MSP430F149(449) фрамке как раз ставили 10^5, это потом появились значения 10^14, кстати 10^15 мне не попадалось, наверное взяли очередной рубеж на тестах и увеличили на порядок:) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться