Перейти к содержанию
    

alik_tv

Участник
  • Постов

    44
  • Зарегистрирован

  • Посещение

Весь контент alik_tv


  1. Привет всем. Да, дело именно в НЕ сбросе WDT после его сработки. Вот же ребята фичу сделали, так сделали. Спасибо всем за помощь.
  2. после тщательного изучения матчасти вроде нашел ответ. Завтра проверю. Note: If the Watchdog is accidentally enabled, for example by a runaway pointer or brown-out condition, the device will be reset and the Watchdog Timer will stay enabled. If the code is not set up to handle the Watchdog, this might lead to an eternal loop of time-out resets. To avoid this situation, the application software should always clear the Watchdog System Reset Flag (WDRF) and the WDE control bit in the initialization routine, even if the Watchdog is not in use.
  3. atmega328PA и ее WDT

    Привет всем Хотел сделать перезагруз проца по команде, для этого по флажку перестаю сбрасывать собаку. При этом проц. не перезагружается, а типа виснет. Ни на что не реагирует, кроме аппаратного сброса. Процедуру для включения собаки делаю в main, саму процедуру взял из его описания. void WDT_On(void) { __disable_interrupt(); __watchdog_reset(); WDTCSR |= (1<<WDCE) | (1<<WDE); WDTCSR = (1<<WDE)| (1<<WDP0)| (1<<WDP1)| (1<<WDP2); // 2s __enable_interrupt(); } Сбрасываю так if (ucFlagReset == StatusFlag_Off) __watchdog_reset(); У этого проца появилось прерывание WDT, поэтому на всякий случай сделал пустое прерывание по WDIF, не помогло. Пробовал команду сброса делать в прерывании и в бесконечном цикле(зачем?), в main-е, никакой разницы. В отчаянии полез на столб прочитал errata, ничего похожего там нет. Явно проблема с головой, не могу понять с чьей. Прошу помощи. Олег
  4. Привет всем Заработало, спасибо за помощь. Причина, ADEN был всегда в 1, я его не сбрасывал. Поэтому после выхода из прерывания АЦП, проц быстренько уходил в следующий слип и соотв. опять запускалось АЦП. Выбрал около 100кГц тактовую АЦП, ближе к нижней границе, понятно, тут баланс. Сейчас пришлось поднять в 2 раза, чтобы обеспечить время преобразования, а это уже верхняя граница. Но, что тут сделаешь, я бы в триггерном режиме запустил АЦП, но тогда нужно задействовать еще один таймер. (upd. пардон, бес попутал, триггерный режим в этом ничем не поможет.) Ставить 5В опорное не получится, питание от двух батареек потому оно сейчас и опорное, я бы даже попробовал 1.1В установить, чтобы на малых сигналах динам. диап. не терять. Но это пока только мысли. Надо посчитать, чем мне это грозит. "Напряжение смещения компаратора АЦП" это Offset Error в "ADC Characteristics" ? Олег
  5. Привет всем. Частота тактирования влияет на хар-ки преобразования. Линейность и прочее, как я понимаю. Но, ваш вариант мне больше понравился. Он как-то прямее. 0) Только зачем в main-е устанавливать ADEN? Я по умолчанию ADCSRA устанавливаю в b00001110; Жду прерывание от таймера, оно установит ADEN, выйдет в main(), а после обязательно доберется до sleep.
  6. Привет всем Да, спасибо. Я пытался этот пункт проверить, у меня не получилось запустить АЦП без ADSC. Вернусь к этому вопросу. Но, если я буду так делать я получу 25 тактов на все преобразования. Я сейчас отключаю ADIE, не даю АЦП прерывание делать(и соотв. просыпаться процу), хотя АЦП конечно работает при этом. Олег
  7. Привет всем ADC работает в режиме прерывания. Инициализация ADC: ADCSRA b10001110 ADCSRB b00000000 ADMUX b00100000 Запуск одиночного преобразования - ADCSRA |= (1<<ADSC) Запуск энергосбер. режима SMCR = 0x01, __sleep(); Управляет запуском АЦП - Таймер2. Запуск каждые 2мс. Если не включаю энергосберегающий режим, то все работает как надо. Если включаю, то прерывания АЦП получаю в темпе Free Running mode. Проверял частотомером по короткому импульсу в обработчике прерывания АЦП. Более того, пробовал включить ADC Auto Trigger - Trigger Source (Analog Comparator). При этом компаратор отключен - ACSR = (1<<ACD); Если без энергосберегающего режима, то АЦП запускается каждые 2мс. Если использовать энергосберегающий режим, то Free Running mode. При этом таймер срабатывает _всегда_ с периодом 2мс. Проверял частотомером (как с АЦП). Проверял состояние бита ADATE, в обработчике прерывания АЦП, не установлен. АЦП вполне корректно работает при этом, результат преобразования достоверен. Но хотелось бы все таки понять с чего вдруг, да и потом, это лишняя потребляемая мощность. Смотрел Errata вер. DS80000855A ничего даже близко похожего там нет. Олег
  8. Нашел как обработчик USART3_6_IRQHandler отключить (вкладка NVIC Mode, code generation), при этом инициализация прерывания не выключается. В файле startup_stm32f030xc.s записал свой обработчик(Куб его не трогает). Красиво все работает. Куб и Иар друг другу не мешают. Спасибо за поддержку.
  9. По моему до меня дошло. Я догнал этот пароход. 0) Не обязательно пользоваться HAL_UART_Receive_IT, можно инициализировать буфер приема и включить прием прямо в main-е. А дальше, как обычно, разбирать байты в USART3_6_IRQHandler. Но вопрос в полезности HAL_UART_IRQHandler остается.
  10. Верно, только вызов HAL_UART_IRQHandler чем мне может помочь? я пока не знаю. А если он лишний, то правильный способ от него избавиться, переопределить обработчик прерывания. Вот только как это корректно сделать, чтобы можно было с кубом и дальше работать.
  11. "Заказывать" один байт это тривиальное решение. Зачем мне лишний код и лишние вызовы. А какой более изящный путь не подскажите? Смотрел я исходники, ничего изящного не придумал. Я могу "нейтрализовать" HAL_UART_IRQHandler своим условным переходом, сохраняя возможность перегенерации исходников кубом, но это изврат. Вряд ли разработчики на это рассчитывали. Пока я вижу два варианта 1. Переопределить USART3_6_IRQHandler. Но хотелось бы этого не делать. Некрасивое решение. 2. Может быть предполагалось, что HAL_UART_Receive_IT на первом этапе "ловит" только заголовок кодограммы. Понятно он имеет одинаковую длину(и формат) у всех кодограмм, в одном канале. Т.е. я постоянно(в фоне) жду заголовок, скажем 4 байта, в этих байтах длина данных кодограммы. После того как словил заголовок, я ожидаю данные. Но тут проблема, у функции HAL_UART_Receive_IT нет таймаута. Если придут только три байта она "повесится".
  12. Привет всем В общем цель описана в заголовке. Не могу понять каким образом подразумевалось это делать. HAL UARTа, в отличии допустим от TIM, не экспортирует функции обратного вызова(Callbacks) непосредственно прерывания (по приходу символа), смотрю файл STM32F070xB_User_Manual.chm в поставке куба). И как предполагалось написание обмена датаграммами _разной_ длины в фоне? Посмотрел пример: STM32Cube_FW_F0_V1.9.0\Projects\STM32F030R8-Nucleo\Examples\UART\UART_TwoBoards_ComIT\ это вообще не серьезно. Я не могу принимать решение сколько будет в первой датаграмме байт аж в main-е. Это должно быть при приеме конкретной датаграммы, в зависимости от значения в специальном ее поле. Как функцией HAL_UART_Receive_IT ( UART_HandleTypeDef * huart, uint8_t * pData, uint16_t Size ) и вызовом HAL_UART_RxCpltCallback ( UART_HandleTypeDef * huart ) такое написать? Я не против даже изменить концепцию(извините, очень уж слово нравится) работы с уартом, если мне расскажут как же с помощью таких ресурсов решить конкретную задачу. А как писать программу уровня "Здравствуй мир" я уже понял.
  13. Привет всем Я знаю, есть куча библиотек к этому индикатору, но в тех которые я нашел, вывод информации реализован через полное обновление экрана. Я бы хотел "запустить" вывод графика через аппаратную функцию Scrolling left 0x27. Так быстрее намного. К сожалению мои попытки пока не увенчались успехом, сложилось впечатление, что эта функциональность была реализована только для того, чтобы красивые картинки прокручивать. 1. Нет возможности запустить сдвиг только на один шаг. Все функции сдвига работают "на постоянной основе". Никакой возможности синхронизации с сдвигом тоже нет. 2. Загадочная фраза в описании "After sending 2Eh command to deactivate the scrolling action, the ram data needs to be rewritten." При периодическом(по таймеру) использовании функции "Стоп сдвиг", появляется мусор на экране, причем в случайных местах. Но если я в буфер индикатора помещаю нулевой(ые) байт(фактически эмуляция вывода информации), то мусора на экране нет(т.е. индикатор пустой). При этом если прокручивать "статическую" картинку(без частого стопа и изменения данных в видеопамяти), то индикатор корректно работает многие часы, мусор не появляется. 3. Сдвиг информации в памяти происходит циклический, т.е. "вытесняемые" слева данные помещаются в крайне правый столбец. Это конечно мешает выводу графика. Два вопроса. Как бы все это побороть? и Какие еще есть типы индикаторов с функцией сдвига, реализ. аппаратно(желательно реализованные именно для вывода графиков)? Интерфейс желательно последовательный IIC(приоритет) либо SPI. Олег
  14. Нужен светофильтр согласованный с http://www.kingbrightusa.com/product.asp?c...id=PSA05-11SRWA Насколько я понимаю, в идеале, фильтр должен повторить график "Relative intensity Vs. Wavelength" этого индикатора. При этом должна быть достаточно высокая плотность(?) фильтра, т.к. рядом с индикаторами на плате стоит приемник ИК. Я бы не хотел, чтобы его было видно через фильтр. Да и саму плату с дорожками тоже. Про пленки я думал, но вот как это будет выглядеть. Не будет ли похоже на залипуху. Боюсь придеться экспериментировать.
  15. Спасибо за инфу. Посмотрел Thorlabs цены космические. Не ожидал, за кусок цветного стекла. А может подскажите производителей пластиковых светофильтров? Посмотрел Швабэ. Светофильтры не нашел. Слишком просто для них по-моему. 0)
  16. Привет всем Хочу найти поставщика(лучше много :) светофильтров. Светофильтр стеклянный, качественный (однотонный по всей площади). Резка под заданный размер. Цвета разные хотелось бы, под выбор, для красного семисегментника. Допустим от оранжевого до красного. Толщина стекла от 3мм - 5мм. Олег
  17. ISL1208

    Привет всем сабж в схеме с питанием 3.3В. Кварц KX-327S 32.768 kHz Geyer рабочий, проверен на VS1307. Связь по I2C есть, проверял чтением STATUS REGISTER. После подачи питания, как и должно быть, 01h. Но CRYSTAL OSCILLATOR не запускается. На выводе кварца отсутствуют соотв. сигнал. При включении FREQUENCY OUT CONTROL BITS не выдается сигнал на FOUT. Уже и кварц менял на другие, пытался переключать на внешней источник тактирования и возвращать на внутренний генератор. Ничего. Микросхема с коррекцией и не очень дорогая, не хочеться с ней расставаться. Чтобы это могло быть? Олег
  18. Привет всем! Не могу найти где описываются "шумовые" и хар-ки нелинейности SD24_A. SINAD, SNR, IN, DN, THD, SFDR. Читал msp430afe253.pdf и slau144j.pdf, смотрел всякие апноты на сайте TI, не помогло. Это первый мой MSP430, видимо не догнал что-то очевидное, да? Олег
  19. USBXpress cp2102

    Привет всем Имеем устройство с мегой, на выходе cp2102 и USB. С виртуальным компортом работает. Решил пойти "глубже", на USBXpress. Поставил SDK Ver 4.0.2. Почитал описание и примеры в ней. Написал простейшую программу. Передача запроса в устр-во и получение ответа от уст-ва. ret = SI_GetNumDevices(&dwNumDevices); ret = SI_GetProductString(dwDevice,asDeviceString.c_str(),SI_RETURN_DESCRIPTION); ret = SI_Open(dwDevice,&cyHandle); ret = SI_SetBaudRate(cyHandle,19200); ret = SI_SetLineControl(cyHandle,0x0800); ret = SI_SetFlowControl(cyHandle, SI_STATUS_INPUT, SI_HELD_INACTIVE, SI_HELD_INACTIVE, SI_STATUS_INPUT, SI_STATUS_INPUT, 0); ret = SI_SetTimeouts(100,INFINITE); //(DWORD dwReadTimeout,DWORD dwWriteTimeout); // Запрос ret = SI_Write(cyHandle,btDataCodogrammaOut,10,&dwBytesWritten); ret = SI_FlushBuffers(cyHandle,1,0); // Ответ устр-ва ret = SI_FlushBuffers(cyHandle,0,1); ret = SI_Read(cyHandle,btDataCodogrammaIn,9,&dwBytesReturned); ret = SI_Close(cyHandle); Результаты работы каждой функции я проверяю. Запросы передает замечательно, устр-во на запрос отвечает(проверял осциком на TX проца). Но при выполнении "// Ответ устр-ва" выдается ошибка SI_Read - SI_READ_TIMED_OUT. Скорость 19200, в датаграмме 10 байт. Но я не сдался. Я переписал прошивку так, чтобы устр-во каждую секунду передавало мне датаграмму(ту же). И в этом случае программа читает данные правильно, но только пока не нажать "Запрос", после первой же передачи функция SI_Read передает SI_READ_TIMED_OUT. Но я опять не сдался. Я взял программный сниффер "Device Monitoring Studio" и посмотрел что же делает ПО при попытке чтения. Оказалось, что отправляет посылку Function URB_FUNCTION_CONTROL_TRANSFER и принимает такую же, но данных там даже близко нет. В общем грабля. Такое впечатление, что канал работает только в одном направлении. Что делать? Олег
  20. схемаCPW2.pdf плата в файле. Чего на схеме нет, и на плате нет. фото платы в зипе. pp.zip foto.ZIP
  21. Не через всю плату, тут вы загнули. Сразу за резистором разъем начинается. 2*3, типа такого На картинке 99% длины этой дорожки. Я и кондер поставил и давлю программно. Другое дело, что этим конденсатором сделал себе новый гембель. "Возьмите у них этот брак и выдайте другой" (с) Проверил я с резистором и кондером. Не помогает. Посмотрел осциком, что на выводе. Есть там мусор при нажатии. Но размах его не более 200мВ, а длительность не более 500нс, что намного меньше чем надо для BOD.
  22. Строго говоря, если почитать описание, легко увидеть _внутренний_ "Pull-up Resistor" сигнала сброса. Но не вопрос, сегодня вечером проверю.
  23. Я отключаю программатор перед проверкой схемы. Эта цепь с резистором просто висит в воздухе. Вы предлагаете мне ее к питанию притянуть и через емкость на землю?
  24. через R16 reset подключен к программатору. Hex значение fuses - есть пару мыслей может выйдет. Но зачем фьюзы, вы про WDT? MCUSR показывает, что не собака это. Может кто подскажет для такой версии схемы программатора есть ПО кроме uniprof? Проверил с avrdude не нашел в ее списке такого программатора.
×
×
  • Создать...