Вывод информации через SWO в KEIL(STM32)

Posted by Reason89 | Posted in , , ,

    Обычно я для подобных нужд использовал один из UART'ов. А здесь наткнулся на подобное в одном из вебинаров, и решил записать в качестве заметки.
    Выводить информацию в STM32 можно через специальный вывод SWO программного интерфейса SWD.
 В первую очередь необходимо настроить отладчик в самом Keil, согласно скриншотам:
  
    Стоит обратить внимание на использование SW, вместо JTAG. И на последнем скриншоте необходимо выставить частоту на которой работает процессор, а не  какой кварц используется. И соответственно выставить какой порт будет использоваться . Обычно ставят P0, но здесь особой разницы в принципе нет.
     Добавляем в проект, между /* USER CODE BEGIN Includes */ и /* USER CODE END Includes */:
#include 
#define ITM_Port8(n)    (*((volatile unsigned char *)(0xE0000000+4*n)))
#define ITM_Port16(n)   (*((volatile unsigned short*)(0xE0000000+4*n)))
#define ITM_Port32(n)   (*((volatile unsigned long *)(0xE0000000+4*n)))
#define DEMCR           (*((volatile unsigned long *)(0xE000EDFC)))
#define TRCENA          0x01000000

struct __FILE { int handle; /* Add whatever you need here */ };
FILE __stdout;
FILE __stdin;
int fputc(int ch, FILE *f) 
   {
       if (DEMCR & TRCENA) 
        {
            while (ITM_Port32(0) == 0);
            ITM_Port8(0) = ch;
        }
    return(ch);
    }

    Затем в проекте в необходимых местах выводим необходимую нам информацию. Главное использовать после функции SystemClock_Config();, В противном случае будем получать иерголифы:
printf("Start Init\n"); // Для вывода текста
printf("%d\n",a);       // Для вывода значений переменных

    Для самой отладки необходимо  перейти View -> Serial Windows -> Debug printf() Viewer, затем нажимаем Run(F5). И наблюдаем в появившемся окне все то, что прописали на вывод.
     Почему то во всех источниках предлагают использовать STM32 ST-LINK Utility. Чтоб им воспользоваться необходимо точно так же запустить процесс отладки в Keil, потом закрыть его, открыть ST-LINK Utility, настроить его на тот же Port и частоту, что настраивали Keil и нажать Connect.

Обзор видеорегистратора Xiaomi Yi 1080P Car WiFi DVR

Posted by Reason89 | Posted in ,

     Приобрел по принципу наилучшее соответствие цена-качество.
    Покупался за 3500р., как выяснилось позже, можно было найти и дешевле, но я решил взять у проверенного продавца.
Характеристики за такие деньги просто сумасшедшие:
- Производитель Xiaomi
- Материал PC / ABS
- Размер 74 × 52.4 ×19.4 мм
- Вес 74 г
- Фиксация С помощью присосок на стекло
- Источник питания Автомобильный прикуриватель (12-24В)
- Фотообъектив F1.8 большая апертура, 165° ультра-широкоугольный объектив
- Процессор изображения YI A 12 двухъядерный + DSP чип, 3D шумоподавление
- Датчик изображения 1/2.7 дюйма, 3,0 × 3.0μm (микрометра), 4000mV / lux — s (ультра-чувствительный датчик изображения)
- Экран 2,7 дюймовый ЖК (TFT) дисплей, соотношение сторон экрана — 16:9, разрешение 960x240
- WDR (технология широкого динамического диапазона) 2-го поколения, e-HDR
- Емкость аккумулятора 240 мАч (литий-полимерный)
- Общая потребляемая мощность ≤ 4.0 Вт
- Длина кабеля питания 3,5 м
- Интерфейс питания Micro USB (5V / 1A)
- Датчик силы тяжести Встроенный высокоточный датчик с тремя осями
- Видео кодирование Кодирование H.264, MP4 формат
- Поддержка дополнительной памяти MicroSD карты 8 — 64 Гб
- Звук Встроенный высококачественный микрофон и динамик
- Сеть Wi-Fi 802.11n, поддержка беспроводных стандартов безопасности
- Беспроводной шифрование WEP / WPA / WPA2
- Поддержка платформ Android 4.1 или более поздние версии и IOS 7.0 или более поздние версии

     Посылку принес курьер СДЭК, прямо до двери.
    Интерфейс на китайском, но это лечится перепрошивкой. Да и нет нужды в этом, по картинкам все интуитивно понятно. Плюс есть русифицированная программа для телефона(об этом ниже).
    Попытка вставить в него флешку с телефона не увенчалась успехом, чудо китайской промышленности вывело сообщение, что с такими медленными флешками работать не будет. И попросил приобрести флешку классом не ниже 10 и со скоростью записи 80Мб/с(говорят при 45мб/с тоже работает).
    Поехал в магазин, купил Kingston microSDHC/SDXC UHS-I U3 90R/80W 32Гб, как выяснилось позже последнее поколение и самые шустрые у них в линейке. Смысл таких манипуляций в том, что регистратор способен писать на разрешении 2304*1296 30к/с. Весит такое видео не хило, и его нужно постоянно пихать на флешку, потому и такие требования.   Сразу стоит отметить, что снимать лучше при 1920*1080 60к/с, так как видео качеством выше не каждый компьютер в состоянии открыть, а тот который смог проигрывал с малозаметными тормозами.
    Из плюсов стоит отметить очень большой угол обзора. Как сказал один мой товарищ, если бы не стойки, то он бы еще и зеркала твои заснял.
    Очень хорошее качество звука, никакого шипения, кряхтения и шумов.
    Есть система ADAS, которая контролирует разметку дороги и материт вас на китайском если вы начинаете съезжать на обочину или на встречку . Эта опция отключается, так как явно не для наших дорог.
    Теперь касаемо Wi-Fi:
    Есть специальная программа, переведенная на русский язык. Устанавливаете ее, там интуитивно понятный интерфейс и куча видеомануалов по настройке, установке регистратора и.т.д. С помощью программы можно настраивать регистратор, есть настройки, которых нет в самом регистраторе. например не отображать на видеозаписи дату, время или марку регистратора.
    Можно подключиться к нему и смотреть через телефон то, что он видит записывать это и фотографировать. Сомнительная опция в плане полезности, но таких там много))
    Порадовал адаптер, который вставляется в розетку. Он на два выхода USB, вроде бы мелочь, а приятно. Раньше там стоял обычный адаптер через который я заряжал телефон. А теперь с одного и телефон в дороге заряжать могу и ведеорегистратор подключени.
    В общем покупкой доволен и всем рекомендую.
На просторах интернета найти видеозаписи для просмотра качества видео вообще не проблема.
    Дополнительно к регистратору можно докупить переходное кольцо и ультрафиолетовый фильтр. Чтоб на солнце картинка было более четкой.
    Покупался здесь. Продавец проверенный, так что рекомендую.

Обзор Xiaomi Power Bank 2, 20000 Ач

Posted by Reason89 | Posted in ,

 
    Не так давно обзавелся Full HD видеокамерой Panasonic HC-V770. Родного аккумулятора хватает на 1,5 часа непрерывной съемки. В связи с чем решил докупить к камере PowerBank.
    Выбор пал на проверенную фирму Xiaomi.
    Собственно купил Xiaomi Power Bank 2 на 20000 Ампер часов.
Вторая версия от первой отличается наличием QC 3.0, у предыдущей версии QC 2.0. Плюс в довесок добавилась кое какая защита.
    Имеется: 
- 2 USB выхода, что позволяет заряжать сразу 2 устройства одновременно.
- светодиодная индикация, в виде 4 светодиодов, которое показывает остаточную емкость аккумулятора.
 -совместимость с QC3.0 устройствами при использовании одного USB-порта
- есть такая интересная особенность как 2 часовая зарядка маленьким током. Для перехода в режим нужно нажать 2 раза функциональную кнопку. Данный режим позволяет заряжать Bluetooth гарнитуру и умный браслет от Xiaomi.
- предусмотрено 9 всевозможных режимов защиты, таких как от короткого замыкания, температуры, полного разряда или перезаряда и.т.д.
    Дизайн и эргономика у продукта Xiaomi как всегда на высоте.В руках приятно держать, даже не смотря на то, что он очень увесистый.
    В комплекте шел короткий кабель micro usb, ми инструкция на китайском.
    Емкость  соответствует заявленной.
    Из таких явных минусов разве что, наличие только одной расцветки. Белый корпус очень маркий, поэтому пришлось докупить ещеи силиконовый чехол.
    После покупки, проверил на официальном сайте на оригинальность. Все бьется и сходится.
    Покупкой полностью доволен. К тому же доставка была весьма быстрой, со склада в Москве. 
Покупал здесь.

8-канальный логический анализатор Saleae Logic.

Posted by Reason89 | Posted in ,

    В Китае был приобретен 8 канальный Логический анализатор в качестве настольного инструмента для отслеживания сигналов. Шикарная вещь, для людей, который часто работают с цифровыми протоколами передачи данных.
    Когда заказывал даже не представлял о возможностях, которые он в себе содержит.
    Начинка стандартная, тот же контроллер CY7C68012A, что и стоит во всех подобных анализаторах. Буфер на микросхеме LVC245A и память ATMLH53602.
    Поддерживает огромное количество цифровых протоколов, принимает обрабатывает и расшифровывает то, что передается по линии. Вполне наглядно можно видеть, какая посылка на  передается по линии, когда у нас что то не работает. Вплоть до скорости обмена.
    Вроде как у оригинального анализатора, который скопировали в поднебесной на плате еще установлена всевозможная защита по каналам и.т.д. Но ценник у него чуть ли не в 10 раз больше.  А возможности одинаковые.
    В комплекте сам анализатор, USB шнурок для питания и шлейф для подключения к плате.  Вскрывается легко, пайка хорошая, плата чистая(никаких следов флюса не обнаружено). Но плата в корпусе сидит не жестко, поэтому желательно в нескольких точках зафиксировать ее герметиком.
    Работать должен с такими программами как Saleae Logic и USBee Suite, но я пробовал только с первой, до второй руки так и не дошли, так как и с первой меня все более чем устроило. При подключении анализатора к ПК, он сам устанавливает все необходимые драйвера.
    В программе Saleae Logic все просто, выставляет время замера, у каждого канала выставляем назначение вывода, который мы к нему подцепили SCL, SDA, TX, RX и.т.д. Если не назначать, то он все так же прекрасно покажет, но уже не будет наглядной расшифровки передаваемых посылок. Выставлять по какому фронту срабатывать ну и много много других настроек. Частота дискретизации 24МГц, что в 99% случаев за глаза хватает. Ну и нажимаем Start.
Купить 8 Канальный логический анализатор Saleae Logic

Xmega & MAX6633 (TWI)

Posted by Reason89 | Posted in , , ,

    MAX6633 - интегральный датчик температуры с I2C интерфейсом, либо TWI кому как удобно.
    Микросхема простая до невозможности, на запрос температуры присылает  2 байта информации. Сдвигаем на три бита вправо, получаем 12 битное значение температуры плюс 1 знак(+/-).
    1 бит это 0,0625 градуса. Мне точность важна не так сильно, потому я просто полученное значение делил на 16 и получал уже температуру в привычных градусах.
    Теперь относительно TWI  в Xmega, на первый взгляд кажется дремучим лесом. Но на деле, все не так сложно. Для начала лучше всего изучить теорию TWI(I2C), если усвоить алгоритм работы протокола, то вопросов в разы будет меньше.
     Я надолго завис над одной проблемой, когда при чтении старшего байта температуры получал NAK в конце посылки. При более детальном изучении теории, я понял, что оказывается при чтении я формирую ответ, а не ведомой устройство.
    Проблему удалось быстро решить благодаря Логическому анализатору. Подпаялся к SCL и к SDA, поймал посылку. Программа, которая шла в комплекте сразу расшифровала посылку и я увидел в чем была моя проблема. Потому если у вас еще нет такого помощника, обязательно заказывайте у проверенного продавца.
    Ну и собственно исходный код инициализации и приема передачи. Делал без прерываний, так как в них не было необходимости:
// Инициализация TWI
void TWIC_init(void)
{
 TWIC.CTRL = 0;
 TWIC.MASTER.BAUD = 0x23;     // При 8 Мгц, на 100кГц = 35(0x23)
 TWIC.MASTER.CTRLA = TWI_MASTER_ENABLE_bm;
 TWIC.MASTER.CTRLB = 0;
 TWIC.MASTER.CTRLC = 0;
 TWIC.MASTER.STATUS = TWI_MASTER_RIF_bm | TWI_MASTER_WIF_bm | TWI_MASTER_ARBLOST_bm | TWI_MASTER_BUSERR_bm | TWI_MASTER_BUSSTATE0_bm;
}

// Отправка данных по TWI
void TWIC_Transiver()
{
 TWIC.MASTER.ADDR = MAX_ADDR | MAX_WRITE ;   // Отправляю адрес с командой на запись 0b10000000 
 while (!(TWIC.MASTER.STATUS & TWI_MASTER_WIF_bm));
    
 TWIC.MASTER.DATA = MAX_Command;     // Отправляю команду 0b00000000
 while(!(TWIC.MASTER.STATUS & TWI_MASTER_WIF_bm));
 
 TWIC.MASTER.ADDR = MAX_ADDR | MAX_READ ;   // Еще раз отправляю адрес с командой на чтение 0b10000001
 
 while(!(TWIC.MASTER.STATUS & TWI_MASTER_RIF_bm));  // Считываю старший байт температуры
 MSB_temp = TWIC.MASTER.DATA;
 
 TWIC.MASTER.CTRLC = 0x02;     // Выставляю ACK на линии
 
 while(!(TWIC.MASTER.STATUS & TWI_MASTER_RIF_bm));  // Считываю младший байт температуры
 LSB_temp = TWIC.MASTER.DATA;
 
 TWIC.MASTER.CTRLC = TWI_MASTER_ACKACT_bm | TWI_MASTER_CMD_STOP_gc;// Отправляю стоп бит
 TWIC.MASTER.CTRLC = 0;      // Обнуляю регистр NAC-ACK
 
}