Дополнено выводом времени на LED screen.

!!! инвертировать USB_PU


****** Распиновка ******

=== Интерфейсы I/O ===
- PA11/12 - USB
- PA9(Tx), PA10(Rx) - USART1 - консоль отладки / прокси RMC-сообщений GPS (опт. - bluetooth).
- PA2(Tx), PA3(Rx) - USART2 - подключение GPS-приемника.
- PB10(Tx), PB11(Rx) - USART3 - подключение лидара или другой консоли.

=== Остальные порты ===
- PA1  - PPS сигнал от GPS; сюда можно подключать любой дополнительный высокоомный вход напрямую.
- PB0  - TRIG0 - (замыкать на землю).
- PB1  - TRIG1 - подключен к 12В.
- PB3  - TRIG2 - (замыкать на землю).
- PA15 - подтяжка USB.
- PA8  - (еще не реализовано) - bluetooth "state"
- PB8, PB9 - индикаторные светодиоды (LED1, LED0 соответственно).
- PC13 - пищалка.

=== Светодиоды ===
- LED0 - при отсутствии сигнала PPS просто горит, если PPS появляется - мигает (затухает на 0.25с на каждый сигнал).
- LED1 - индикатор GPS: не горит, если приемник не обнаружен; горит постоянно, если неуверенный прием времени
(буква "V" во второй позиции RMC-сообщения); мигает при уверенном приеме (буква "A" во второй позиции).
Судя по эксперименту, даже через час после пропадания сигнала точность определения события - не хуже 1мс. Сам GPS-приемник выдает
PPS даже при отсутствии спутников - лишь бы он успел "подхватить" точное время и начать генерировать pps. Начинать работу можно сразу,
как только замигает LED0.


****** Триггеры ******
К TRIG0/TRIG2 подключается кнопка, педаль, иной створ, замыкающий контакты. Никакого внешнего напряжения здесь быть не должно!
К TRIG1 нужно подключать 12-вольтный сигнал, ток не меньше 10мА. Если створ имеет открытый коллектор, то выход створа подключается
к минусу TRIG2, а к плюсу подключается 12В с источника питания.

Иногда бывают ложные срабатывания триггеров TRIG0..TRIG2, связанные с мощными источниками искр (зажигание, искрящиеся обмотки и т.п.). 
В случае таких ложных срабатываний рекомендуется заземлить катод источника питания хронометра. 

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


****** Подключение ******
Хронометр эмулирует "китайский" преобразователь PL2303.

К выходам PA9/PA10 можно подключить преобразователь USART<>USB или накинуть их напрямую на ноги Rx/Tx "малинки" (не забыв соединить
земли хронометра и малинки): PA9(Tx) соединить с Rx, PA10(Rx) - с Tx. Этот USART проксирует RMC-сообщения GPS-приемника (уже после
обработки микроконтроллером, поэтому если МК выключен, а приемник включен, сигнала все равно не будет).

Для подключения PPS сигнала к "малинке" выведен соответствующий разъем.


****** Конфигурация ******
Хронометр конфигурируется через USB. Ввод команд не сопровождается эхом (чтобы удобней было работать из внешних программ), поэтому
для удобства можно тексты команд копировать из окна текстового редактора.
Чтобы увидеть подсказку, достаточно отправить любую строку, начинающуюся с вопросительного знака. Появится справка:

adcmax - max ADC value treshold for trigger
adcmin - min -//- (triggered when ADval>min & <max
adcval - get ADC value
buzzerS - turn buzzer ON/OFF
distmin - min distance threshold (cm)
distmax - max distance threshold (cm)
gpsrestart - send Full Cold Restart to GPS
gpsstring - current GPS data string
ledsS - turn leds on/off (1/0)
mcutemp - MCU temperature
pullupNS - triggers pullups state (N - trigger No, S - 0/1 for off/on)
showconf - show current configuration
time - print time
store - store new configuration in flash
triglevelNS - working trigger N level S
trigpauseNP - pause (P, ms) after trigger N shots
trigtimeN - show last trigger N time
vdd - Vdd value

Из нужного здесь: 
- gpsrestart - перезапуск GPS (если вдруг начнет глючить - у меня такого не случалось), делает "холодный" рестарт. Команда 
	проверялась лишь на прототипе.
- gpsstring - вывод очередного сообщения от GPS. Если все нормально, то появится строка RMC вроде
	$GPRMC,124001.000,A,4340.9369,N,04127.5034,E,0.00,33.26,150819,,,A*5C
- pullupNS - включить или выключить внутренние верхние подтяжки для триггеров 0..3 (особо не нужно, т.к. подтяжки слабые, и если
	будет нужна подтяжка, лучше сделать сильную внешнюю).
- showconf - отображение текущей конфигурации, например:
	CONFIG:
	DISTMIN=50
	DISTMAX=1000
	ADCMIN=1024
	ADCMAX=3072
	PULLUPS=255
	TRIGLVL=0
	TRIGPAUSE={400, 400, 400, 300, 300}
	ENDCONFIG

	пункты конфигурации: DISTMIN/DISTMAX относятся к лидару, ADCMIN/ADCMAX ко входу АЦП, PULLUPS - состояние подтяжек
		(каждый бит, начиная с младшего - состояние соответствующей подтяжки; 0 - не активна, 1 - активна).
	TRIGLVL - конфигурация уровней срабатывания, каждый бит, начиная с младшего (всего три младших бита, как и в PULLUPS),
		равен нулю, если для соответствующего триггера срабатывание при перепаде 1->0, равен единице, если при
		перепаде 0->1.
	TRIGPAUSE - пауза между срабатываниями триггера: если после срабатывания произойдет следующее событие за интервал, меньший
		данного, это событие учитываться не будет.
- time - отображает текущее время так, как оно бы отобразилось при срабатывании триггера, например,
	55725.961 (15:28:45)
	ВРЕМЯ ИЗМЕРЯЕТСЯ В UTC!!! Первое число - количество секунд и миллисекунд с начала суток по UTC, в скобках
	указывается человекочитаемое время.
- store - сохранить новую конфигурацию во флеш-памяти МК.
- triglevelNS - рабочий уровень триггера. Здесь N - номер триггера (0..2), S - уровень (0/1). Скажем, чтобы триггер 0 срабатывал
	при перепаде 1->0, нужно написать команду
	triglevel00
	а чтобы триггер 2 срабатывал при перепаде 0->1,
	triglevel21
- trigpauseNP - задать паузу для триггера N, пауза в миллисекундах. Если написать 0, паузы не будет и каждое срабатывание 
	будет вызывать соответствующее сообщение. Эта пауза нужнад для защиты от "звона" и нескольких срабатываний на "дырках"
	в объекте. Меньше 50мс лучше не делать.
- trigtimeN - отображение последнего времени срабатывания триггера N, например, на запрос trigtime0, может быть выведено:
	TRIG0=45212.930 (12:33:32)
	Если срабатываний с момента включения не было, выведутся нули:
	TRIG4=0.000 (00:00:00)

После изменения конфигурации и ее сохранения необходимо нажатием на reset или отключением/включением питания перезагрузить МК,
т.к. некоторые параметры активируются лишь при старте.

