kil00
-
Постов
57 -
Зарегистрирован
-
Посещение
Сообщения, опубликованные kil00
-
-
В RM0033 этого упоминания не нашёл.
К тому же TIM1&TIM8 registers must be written by half-words (16 bits) or words (32 bits). (RM0033, page 332).
Извиняюсь, ночью было, не посмотрел, что серия F2.
-
Cкорее всего, см. RM0008 (стр. 270)
Addressing an AHB peripheral that does not support byte or halfword write
operations
-
Опубликовано · Изменено пользователем MarYuriy · Пожаловаться
Насколько я понимаю, Bit Band возможен только для SRAM и периферии, но не для ядра.
-
http://ru.wikipedia.org/wiki/Юлианская_дата
http://stackoverflow.com/questions/1002542...-timestamp-in-c
недавно сам разбирался, только с NTP-временем, - 1-ая ссылка очень полезна в плане понимания, откуда берётся время (+ перевод unixtime_to_datetime)
-
Примерно так:
http://eugenemcu.ru/publ/13-1-0-73 - тактирование
http://ziblog.ru/2011/01/15/stm32-chast-8-...eryivaniya.html - таймеры
-
Если погрешность T может варьироваться в пределах до сотни тактов МК, то можно генерировать импульсы программно, как написал MK2.
-
Хорошо. Я понял. Только экспериментальным путем
В теории - приёмнику (антенне) нужна прямая видимость со спутниками. А для получения более-менее точных координат - не менее 3-ёх спутников. Если учесть то, что достаточно чувствительная антена у окна не ловит больше 1 спутника, то я уверен, что приёма в помещениях не будет. Но сам бы в это не поверил, вот и Вам предлагаю эксперимен с Вашим прёмником.
-
Я думал для моего применения надо больше обращать внимания на чувствительность приемника в ДБ.
У продавца видел GeoHelix-S Активная GPS-антенна 1575,42 МГц, 24 дБ, круговая поляризация, 2...3.5 В (17 мА), 13x15x49 мм, SMD
Да, и на чувствительность тоже.
У антенны АСМ-03 есть такой показатель - "Усиление (без учета потерь в кабеле): 32 dB". Исходя из того, что я написал выше, Вам лучше на практике посмотреть, будет ли приёмник ловить спутники в помещениях, что навряд ли.
-
Здравствуйте!
Подскажите, как сейчас обстоят дела с определением местоположения в плохих условиях?
Мне необходимо определиться с выбором GPS приемника и антенны.
Вероятность, что ваш приёмник поймает хотя бы одни спутник в помещении стремится к нулю, даже с хорошей антенной. Тем более в подвале.
У меня сейчас висит в помещении на раме окна антенна АСМ-03 и видит 1 спутник, если её вытащить на улицу, за окно (всего на полметра от окна), то уже 9 и более.
Приёмники использовались Trimble Resolution-T (OEM) и LassenIQ (OEM).
Здание 3-ехэтажное, этаж последний. Рядом ничего не закрывает обзор.
Есть ещё маленькая антенна от Trimble (Miniature 3V GPS Antenna) - она в помещении вообще не ловит. Что тогда говорить о встроенных антеннах...
В даташитах к приёмникам, вам следует обратить внимание на такую характеристику:
Accuracy: Horizontal.Position:.<6.meters.(50%),.<9.meters.(90%).
Altitude.Position:.<11.meters.(50%),.<18.meters.(90%). (Понятно, чем больше спутников, тем точнее координаты и т. д.)
-
У моего f103ret6 в левом нижнем углу 1-ая ножка. И это единственная отметка.
-
Опубликовано · Изменено пользователем MarYuriy · Пожаловаться
Здравствуйте!
Не могу включить функцию прерывания (NVIC_EnableIRQ (TIM1_UP_IRQn)) от таймера TIM1.
На аргументы TIM1_BRK_IRQn, TIM1_UP_IRQn, TIM1_TRG_COM_IRQn Keil ругается:
Main\main.c(124): error: #20: identifier "TIM1_UP_IRQn" is undefined,
а TIM1_CC_IRQn он проглатывает, и прерывание нормально работает.
Подскажите, пожалуйста, что я делаю не так?
Использую stm32f107vc (connectivity line)
---------
---------
У меня стартап от f103.
-
Достаточно было там кнопку "Report" нажать, чтобы прояснить.
Буду знать.
-
Куда делись сообщения из этой темы? (их было, примерно, 5-6 с решением вопроса)
http://electronix.ru/forum/index.php?showtopic=110679
Поиск в Гугл показал.:
http://electronix.ru/forum/lofiversion/ind...hp/t110677.html
http://electronix.ru/forum/lofiversion/ind...hp/t110679.html
Ответы не пропали, но находятся в разных ветках, хотя тема создавалась в одной ветке. Что бы это значило?
-
/sim68_hardware_design_v1.01.pdf:
Table 1. GPS and GLONASS performance.
-
Многие приёмники работают с протоколами NMEA и TSIP. Вот TSIP, как раз, бинарный, и можно с помощью него общаться с приёмником и настраивать его.
-
Случайно не в таком примерно варианте приходит строка:
$GPRMC,,,,,,,,,,,*1D ?
Если в таком, значит, что, скорее всего, ваш приёмник не нашёл достаточного количества спутников.
Скачайте с сайта производителя ПО для работы с этим приёмником - визуально будет проще разобраться.
-
У меня возник вопрос. Если при достижении таймером TIM1 переполнения я хочу сбросить таймер TIM4 могу ли я написать следующим образом TIM4->CNT=0? Или же если мне нужно не сбросить а продолжить счет TIM4 с определенного значения могу ли я записать TIM4->CNT=X?
Насколько я понимаю, сначала нужно выключить счётчик TIM4->CR1 &=~ TIM_CR1_CEN, потом внести значение в регистр CNT, после чего счётчик включить.
-
В попытках найти ответ на свой вопрос, я получил правильный ответ от
Железнякова Дениса (www.ziblog.ru), причём ответил он втечение 20 минут.
За что я ему очень благодарен!
Вот сам ответ:
Вы используете предварительные делители у обоих таймеров. Оба
предделителя буфферизированны, т.е. просто запись значения ничего не
меняет, изменения происходят только после события обновления.
Следовательно вам необходимо добавить:
TIM4->PSC = 70 - 1;
TIM4->EGR |= TIM_EGR_UG;
Это действие:
а) сбросит их
б) установить новый модуль счета
И всё работает, как надо!
-
Опубликовано · Изменено пользователем MarYuriy · Пожаловаться
Спасибо. Буду разбираться.
Выставление бита ARPE в ноль в обоих таймерах ничего не изменяет..
Пока что единственное решение этого вопроса - это включить ОБА таймера по приходу внешнего сигнала, не синхронизируя их. Но очередная проблема с таймерами в STM32 останется не решённой...
-
Опубликовано · Изменено пользователем MarYuriy · Пожаловаться
Здравствуйте. Да да я понимаю что это источник тока. Только на что он влияет я не понимаю (см. прикрепл. файлы) Быть может это потребитель тока который просто тупо жрёт 0,7 мА. Ну а зачем он тогда нужен(прим TL494). А што направление стрелочки означает?Источник тока в компараторе служит для создания источника опорного напряжения, с которым сравнивается входное напряжение. В даташите всё должно быть подробно написано.
-
1. Уберите TIM5->CR1 |= TIM_CR1_ARPE; - это совсем про другое чем вы пишете в комметариях.
Зачем убирать этот бит, если он отвечает за значение, до которого таймер считает, без него, как раз, гикак. А комментарий я уберу.
Да, это я перед тем как создать тему немного откорректировал свои комментарии и не заметил этих строк, поэтому вышла ошибка.
2. Чаще выводите CNT через UART и смотрите как они изменяются. Сначала оба нарастают от 0, потом TIM5->CNT приближается к 25000 - что дальше? Для замедления и удобства наблюдения можно увеличить PSC обоих таймеров.Спасибо. Буду пробовать.
Вчера возникла идея, что проблема из-за битового поля TS регистра SMCR. Начал просто перебирать возможные значения, но только при значении TS=001 оба счётчика работают, во всех других вариантах счётчик TIM5 всё время равен 0. В общем, cегодня попробую поменять местами TIM5 и TIM3.
Не очень понятна эта таблица 86 (RM0008 стр.386). Из описания следует, что Slave TIM, в моём варианте, - это TIM5 (стр. 386), находим TIM3 и получаем - ITR1 (TS = 001). Вроде бы всё верно, но попробую поменять таймеры местами.
-
Здравствуйте!
Использую stm32f107vc.
Пытаюсь синхронизировать два таймера (TIM3 и TIM5), как включающиеся синхронно от внешнего импульса. Настроил их, как написано в RM0008 стр.386:
void TIM3(void) { RCC->APB1ENR |= RCC_APB1ENR_TIM3EN; // подача тактов на TIM3 от шины тактирования APB1 TIM3->PSC = 70 - 1; TIM3->ARR = 25000 - 1; TIM3->DIER &=~ TIM_DIER_UIE; TIM3->CR1 |= TIM_CR1_ARPE; // сброс по достижении максимального значения // в мастер-режиме передаёт данные о своих Enable, как триггерный выход (MMS=001) TIM3->CR2 |= TIM_CR2_MMS_0; /*!<Bit 0 */ TIM3->CR2 &=~ TIM_CR2_MMS_1; /*!<Bit 1 */ TIM3->CR2 &=~ TIM_CR2_MMS_2; /*!<Bit 2 */ // в подчиненном режиме, чтобы получить входной триггер TI1 (TS=100) TIM3->SMCR &=~ TIM_SMCR_TS_0; /*!<Bit 0 */ TIM3->SMCR &=~ TIM_SMCR_TS_1; /*!<Bit 1 */ TIM3->SMCR |= TIM_SMCR_TS_2; /*!<Bit 2 */ // в режиме триггера (SMS=110) TIM3->SMCR &=~ TIM_SMCR_SMS_0; /*!<Bit 0 */ TIM3->SMCR |= TIM_SMCR_SMS_1; /*!<Bit 1 */ TIM3->SMCR |= TIM_SMCR_SMS_2; /*!<Bit 2 */ // установка задержки для того, чтоб таймеры очень хорошо синхронизировались (MSM=1) TIM3->SMCR |= TIM_SMCR_MSM; TIM3->CNT = 0; // обнулить счётчик, чтобы его значение после синхронизации равнялось 0x00 } void TIM5 (void) { RCC->APB1ENR |= 1<<3; // TIM5EN подача тактов на TIM5 от шины тактирования APB1 TIM5->PSC = 70 - 1; TIM5->ARR = 25000 - 1; TIM5->DIER &=~ TIM_DIER_UIE; TIM5->CR1 |= TIM_CR1_ARPE; // сброс по достижении максимального значения // получаем входной триггер от TIM3 (TS=001) как в Table 86 TIM5->SMCR |= TIM_SMCR_TS_0; /*!<Bit 0 */ TIM5->SMCR &=~ TIM_SMCR_TS_1; /*!<Bit 1 */ // TS=001 TIM5->SMCR &=~ TIM_SMCR_TS_2; /*!<Bit 2 */ // в режиме триггера (SMS=110) TIM5->SMCR &=~ TIM_SMCR_SMS_0; /*!<Bit 0 */ TIM5->SMCR |= TIM_SMCR_SMS_1; /*!<Bit 1 */ TIM5->SMCR |= TIM_SMCR_SMS_2; /*!<Bit 2 */ TIM5->CNT = 0; // обнулить счётчик, чтобы его значение после синхронизации равнялось 0x00 }
В итоге, снимая по запросу значения регистров CNT из обоих таймеров, по USART'у получаю такие значения:
при TIM5->ARR = 25000 - 1; и TIM3->ARR = 25000 - 1; значения регистров CNT одинаковые (например, 0x5936 и 0x5936 или 0x728 и 0x728), и так с любыми одинаковыми значениями регистров ARR таймеров.
а при TIM5->ARR = 50000 - 1; и TIM3->ARR = 25000 - 1; значения регистров CNT, по идее, должны отличаться на 25000 (0х61A8), а реально они, например, вот такие - 0x22D4 и 0x216F или такие - 0x556D и 0xB5B0.
В чём может быть проблема? Может быть, что-то не так настроил?
-
Опубликовано · Изменено пользователем MarYuriy · Пожаловаться
Если это кому-то ещё интересно. Наконец-то разобрался, как получить всё изображение в бинарном виде и записать в файл.
unsigned short *intarray; //= strII; intarray=(unsigned short*)malloc(row_width*rows*2*sizeof(unsigned short));//4008*2672*2 if((malloc(*intarray)) == NULL) printf("malloc() failed"); else printf("malloc() good\n\n"); FILE *pf; pf=fopen("data","ab"); int row = 0; for (row = 0; row < rows; row++) { x = FLIGrabRow (dev, &intarray[row*row_width], row_width); / fflush(stdout); } fwrite(&intarray[0], sizeof(unsigned short), rows*row_width,pf); fclose(pf); free (intarray);
Но вчера нашёл статью Емельянова Э.В. (http://eddy-em.livejournal.com/5087.html), в которой всё доходчиво рассказывается и показывается, что надо делать. А так же говорится о том, что существует стандартная библиотека для работы с FLI-камерами - cfitsio.
В общем, решение нашлось.
-
Попробуйте эту память выделять динамически, через malloc или new.
Спасибо за наводку. Вот, что получилось:
unsigned int *intarray; intarray=(unsigned int*)malloc(row_width*rows*2*sizeof(unsigned int));//4008*2672*2 if((malloc(*intarray)) == NULL) printf("malloc() failed"); else printf("malloc() good\n\n");
Вроде бы буфер работает. Понял, что надо пользоваться функцией fwrite(), получилось так:
FILE *pf; pf=fopen("data","wb"); printf("Read image: "); int row = 0; for (row = 0; row < rows; row++) { x = FLIGrabRow (dev, &intarray, row_width); fflush(stdout); fwrite(intarray,sizeof(unsigned int),row_width,pf); } fclose(pf); free (intarray);
Насколько это правильно?
Пассивный хаб
в В помощь начинающему
Опубликовано · Изменено пользователем MarYuriy · Пожаловаться
Вот такой вариант хаба (http://www.qrz.ru/schemes/contribute/comp/passive-hub.shtml) у нас работал с 2002 по 2008 год, пока не накопили кучу денег и не купили б.у. простой 100 мбит хаб.
На 10 мбит пассивный хаб работал и никаких потерь не было, на 100 тоже работал, но не помню насчёт пинга.
Самое главное в этой конструкции, это симметрировать подключение компов, т.е. на каждый порт должно быть по сетевой карте. Мы на один порт вешали битую сетевую карту, и всё работало.
Да.. с разу будет вопрос "нафига на 2 компа". Ответ: потому что я долго готовил однодискетный рутер и думал, что будет всё просто.