Самый лучший сервис для получения Кэшбэка с Online покупок.

Posted by Reason89 | Posted in , ,

    В последнее время все больше людей начинают совершать онлайн покупки. Мало того, что это весьма удобно, так еще и можно найти именно то, что ты хочешь и по более низкой цене.
Онлайн магазинов сейчас огромное количество, самые знаменитые это Ebay и Aliexpress. Существуют и отечественные площадки, но на них цены немного больше китайских и почти всегда приходится платить за доставку.
    Люди  с Китая заказывают все, начиная от резинки для волос и заканчивая топовыми телефонами и компьютерами. Если взглянуть на те же социальные сети, то там появилось огромное количество групп связанных с покупками на Aliexpress. Обычно выкладывается изображение товара, один из хороших комментариев к нему и ссылка по которой люди переходят и добавляют товар в корзину.
    Мало кто догадывается, что ссылки на эти товары являются некой CPA рекламой. Если вы приобретаете этот товар, то человек, который разместил данную ссылку получает определенный процент за то, что привел вас на сайт. Процент может быть разнообразным, вплоть до 15%, зависит от продавца.
   Подобные отчисления называются "CashBack", т.е. это награда за то, что покупателя привели на сайт.
    Но не каждый знает, что он может сам получать этот самый Кэшбэк. Существует много сайтов, на которых нужно зарегистрироваться, заходить туда перед покупкой. Вбивать ссылку на товар и получать новую, по которой и будет совершаться покупка. А деньги в итоге можно вывести только на WebMoney или ЯндексДеньги. На мой взгляд это крайне не удобно. Плюс ко всему, не видно распространяется ли акция на данный товар.
    В итоге, из всего многообразия подобных сайтов я выбрал на мой взгляд самый удобный сервис.
    Этот сервис предлагает после регистрации установить плагин в браузер. И когда вы будете посещать какой либо онлайн магазин, плагин будет вам показывать возможную скидку для вас. Если брать самый популярный китайский онлайн магазин(Aliexpress), то там CashBack составит порядка 7%(т.е. с 1000 потраченных рублей, на счет телефона можно будет вернуть 70).
    Вам нужно всего лишь на странице с товаром щелкнуть по плагину и нажать по кнопке "Перейти к покупке". После этого страница обновится и вы можете покупать товар.
Позже зайдя на сайт сервиса, на вкладке статистика, вы увидите номер операции и отчисления, которые вам положены.
    Все деньги полученные вами от покупок можно переводить как на счет телефона, интернет кошельки или на карты Visa или MasterCard.
    В общем если вы часто покупаете товары в интернете, вам стоит задуматься о том, какие деньги вы упускаете.

Xmega: Работа с дисплеем Winstar WH1602 на контроллере HD44780

Posted by Reason89 | Posted in , ,

 
    Разъяснять о дисплее ничего не буду, информации в сети просто уйма. Самый распространенный контроллер для LCD. Дисплее встретить можно везде и повсеместно. На момент подписания подобные дисплее 16х2 можно с китая заказать за 90 рублей за штуку.
    Подключаются все практически однотипно, единственный косяк есть в том что у некоторых моделей VCC и GND поменяны местами, если перепутать сгорает моментально.
    Изучал подобный дисплей еще в универе, тогда было проще) Макетка заранее настроена, все библиотеки подключены, печатаешь все согласно методичке и все работает)
    Решил подключить сей девайс к Xmega. Как подключать, включать подсветку, настраивать контрастность и выводить кириллицу найти не проблема.
    Моя первая и главная ошибка была в том, что я много времени убил на поиск готовой библиотеки, которых на самом деле не мало. Нашел даже для контроллеров Xmega Но любые попытки подключить уже что то готовое разбивались в пух и прах. То компилятору что то не нравилось, то не хватало какой то библиотеки и.т.д. В итоге плюнул, освоил с нуля документацию и начал писать сам. Совету вчитаться в команды и расшифровать их, а не в лоб использовать готовые.
 
    Второе на что следует обратить внимание это то, что дисплей мягко говоря заторможен. После любой отправленной ему команды необходимо выдерживать приличную паузу.
Смотрите даташит и ставите с запасом и не прогадаете.
Ну и собственно несколько функций для приятной работы по 8 битной шине данных:
Пытался выложить по как обычно через виджет, но он исковеркал код до неузнаваемости, итого выложу так.

Включение преобразований c типом float в Atmel Studio

Posted by Reason89 | Posted in , , ,

    На днях столкнулся с проблемой вывода числа с плавающей запятой на LCD дисплей WH1602.
    При преобразовании обычного десятичного числа, на LCD выводилось все как нужно.
long int Temp = 0x7777;
char st_Temp[6] = "";
itoa(Temp, st_Temp, 10);
LCD_Data(st_Temp[0]);
LCD_Data(st_Temp[1]);
LCD_Data(st_Temp[2]);
LCD_Data(st_Temp[3]);
    После преобразования в число с плавающей  запятой на WH1602 выводился знак вопроса и ряд пробелов.
long int Temp = 0x7777;
char st_Temp[10] = "";
float Temp_float = 0;
Temp_float = (float)Temp / 100; 
sprintf(st_Temp, "%01.2f", Temp_float );
LCD_Data(st_Temp[0]);
LCD_Data(st_Temp[1]);
LCD_Data(st_Temp[2]);
LCD_Data(st_Temp[3]);
LCD_Data(st_Temp[4]);
LCD_Data(st_Temp[5]);
    После долгих поисков проблемы, скачал DEV C++ и скомпилировал проект там с выводом в консоль. Все вывелось, как и было задумано.
    Получается проблема была в компиляторе Atmel Studio. Версия была у меня 6.0.1703
    Так как контроллеры Atmel сами по себе не умеют работать с числами с плавающей запятой, то такие преобразования выполняются сугубо программно.
    Функции преобразования типа float, такие как sprintf, ftoa, snprintf и.т.д. отнимают много ресурсов контроллера от того их использовать не рекомендуется и они по умолчанию отключены в Atmel Studio.
    Можно  постоянно делить число 10, и проверять результат деления больше или меньше он 10. Чтобы своевременно самому выставить запятую, но для этого нужно городить несколько циклов и условий, а в ресурсах МК я не был ограничен.
     Потому для решения проблемы я скачал Atmel Studio 6.2( в 6.0.1703 такие опции я не нашел).
    Переходим на вкладку параметров проекта ALT+F7.
    В меню AVR/GNU linker- General клацаем галочку на против Use vprintf library
     Затем в AVR/GNU linker- Library добавляем 2 библиотеки: printf_flt и scanf_flt
    Компилируем проект, получаем пару предупреждений об использовании типа float и собственно все. На LCD результат выводит с плавающей запятой.

Счетчик реального времени(RTC) в Xmega.

Posted by Reason89 | Posted in , ,


    В микроконтролерах Xmega используется 16 битный счетчик реального времени(RTC) с одним каналом сравнения. Счетчик реального времени обычно используется в экономичных режимах работы МК с целью сохранения счета времени и возобновления активной работы МК через регулярные интервалы времени. Максимальное время отсчета счетчика 18 с лишним часов. Счетчик реального времени имеет предмасштабирование, с максимальным коэффициентом 1024. Коэффициент предмасштабирования можно задать в регистре CTRL.
    RTC - асинхронный модуль. Он синхронизируется от отдельного источника, который никак не связан с сигналом основной системной синхронизации и другими производными от него сигналами.  RTC может тактироваться от: внутреннего RC-генератора ультранизкой мощности на 32 кГц, внутренний подстраиваемый RC-генератор на 32 кГц( более точный, но и более прожорливый), внешний кварцевый генератор на 32.768 кГц (самый точный).
    RTC формирует событие или прерывание по достижению определенного или максимального значения(т.е. по переполнению). Счетчик реального времени может генерировать прерывания, по переполнению и по сравнению.
    Прерывание по переполнению имеют постоянную частоту при постоянном значении периода (PER). Регистр сравнения (COMP) позволяет изменять частоту прерываний без изменения периода или перезапуска регистра счетчика (CNT).
    Система событий не работает в спящих режимах глубже нерабочего режима (Idle).
    Векторы прерываний RTC:
OVF_vect Вектор прерывания по переполнению счетчика реального времени
PER_vect Вектор прерывания по совпадению в счетчике реального времени
    Функция инициализации RTC:

void RTC_init()
{
    CLK.RTCCTRL = CLK_RTCEN_bm+CLK_RTCSRC_RCOSC_gc;    // Включение и настройка на частоту 1кГц от внутреннего генератора 32кГц
    RTC.PER = 264;                                    // Заносим значение вершины счета.(До какого значения считать)
    RTC.CNT = 0;                                    // Обнуляем счетчик. В этом регистре хранится значение счетчика реального времени.
    RTC.INTCTRL = 0x03;                                // Включаем прерывания. Уровень прерываний высокий
}

RTC.CTRL = 0x01;                                    // Включение счетчика реального времени без предделителя, при 0x00 RTC выключен
                                                    // В этот регистр заносится коэффициент деления при включении RTC

Прерывания в Xmega

Posted by Reason89 | Posted in , ,


     В семейсте Xmega добавлена разветвленная система прерываний. Дл каждого прерывания может быть задано 4 уровня приоритета прерываний(High (высокий), Medium (средний),Low (низкий) и Off (выключенный). Плюс есть несколько не маскируемых прерываний, на вроде отказа внешней частоты.
     При поступлении запроса на обслуживание прерывания с более высоким уровнем приоритета процесс обработки прерывания с более низким уровнем приостанавливается, и процессор начинает обрабатывать более значимый запрос. Запросы на прерывание, которым присвоен статус High, обслуживаются немедленно после поступления, даже если центральный процессор сильно загружен. Чтобы не пропал ни один из запросов, и все они были обслужены, пусть даже и с задержкой есть специальная процедура Round Robin , этакий своеобразный циклический алгоритм диспетчеризации.
    Общая команда для включения всех прерываний осталась неизменной:
sei();
    Далее необходимо включить все три уровня прерываний:
PMIC.CTRL |= PMIC_LOLVLEN_bm | PMIC_MEDLVLEN_bm | PMIC_HILVLEN_bm;
    Соответственно если нужно включить только низкий уровень прерываний, то код упрощается:
PMIC.CTRL |= PMIC_LOLVLEN_bm
    О более конкретной настройке PMIC.CTRL можно прочесть в мануале.
    Для всех переферийных прерываний уровень приоритета выставляется отдельно, в соответствующем регистре. В качестве примера назначи прерыванию по таймеру TCC0, самый высокий уровень прерываний:
TCC0.INTCTRLA = 0x03;
    а для внешнего прерывания на порт ввода-вывода поставим самый низкий уровень прерываний:
PORTA.INTCTRL = 0x01;
    Для каждого порта может быть объявленно только 2 прерывания, int0 и int1:
PORTA.DIR = 0x00;
PORTA.INT0MASK = 0x01;
PORTA.INT1MASK = 0x02;
    Далее для корректной работы прерываний, необходимо подтянуть вывод порта:
PORTA.PIN1CTRL= PORT_OPC_WIREDANDPULL_gc;
PORTA.PIN2CTRL= PORT_OPC_WIREDANDPULL_gc;
    Так же можно настроить по какому из фронтов будет срабатывать прерывание, в качестве примера приведем срабатывание по заднему фронту:
PORTA.PIN1CTRL = PORT_ISC_FALLING_gc;
PORTA.PIN2CTRL = PORT_ISC_FALLING_gc;
     После того, как правильно настроили работу прерываний, необходимо написать обработчки этого прерывания:
ISR(PORTA_INT0_vect)
{
   //Code
}
    В Xmega огромное количество всевозможных прерываний, как по приему и передаче данных по всевозможным протоколам, так и по переполнению и совпаднию таймеров. Гибкая настройка позволяет реализовать практически любые свои потребности.