UT.6.02.x: Embedded Systems - Shape The World улучшенная версия

В прошлом году был курс Embedded Systems — Shape The World, многие о нём знают. Мне курс очень понравился, получил сертификат (правда бесплатную версию).


Теперь они запустили новую улучшенную версию и добавили несколько новых вещей.


Читать дальше
  • +4
  • 15 января 2015, 13:11
  • Nemo

Инициализация PWM конструктором класса ( C++ )

Долгое время писал код под МК на С. Друг пишет под МК на С++, посоветовал мне, вот я решил попробовать. Микроконтроллер у меня ATmega88А, IDE Atmel Studio 6.2. Буду использовать 6 апаратных PWM для управления сервоприводами, так как нужно писать 6 одинаковых кусков кода, решил сделать класс Servo:

class Servo
{
private:
        int* pulse_width;  

public:
        Servo(int* PWM_Channel);
        void write(int data);
}; //Servo

через конструктор передаем куда будем писать наше значение, тоесть регистр таймера для управления PWM:

// default constructor
Servo::Servo(int* PWM_Channel)
{
        pulse_width = PWM_Channel;
} //Servo


void Servo:: write(int data)
{
        *pulse_width = data;
}

Используем:

int main(void)
{ 
    Servo servo1(&OCR0A);
    Servo servo2(&OCR0B);
        
    servo1.write(10);
    servo2.write(50);
    
    while(1)
    {
    }
}


Вроде код получился читабельней.

Но вот как быть с инициализацией. Писать просто функцию где будут инициализироваться 3 апаратных таймера как то не по ООП. Добавить в конструктор весь код, будет инициализировать всё 6 раз, тоесть делать то же самое. Как можно сделать чтобы получить независимую инициализацию для каждого обьекта (канала) PWM — если регистры конфигурации разные для каждого таймера?
  • -1
  • 29 октября 2014, 12:18
  • Nemo

Embedded Systems - Shape The World

22 января начинается очень интересный курс по Embedded Systems. Записаться можно тут Изучение будет проходить на Cortex M4 от Texas Instruments в среде Keil uVision IDE. Для закрепления знаний будет задание написать графическую игру на дисплее от мобильника. Также можно будет получить сертификат. Список необходимого железа тут.
  • +2
  • 28 декабря 2013, 12:47
  • Nemo

TDD для Embedded.

На своей работе занимаюсь написанием кода для разных микроконтроллером. Но потом приходиться всё тестировать, и тестировать приходиться каждый раз когда идут даже самые простые изменения в прошивке, например смена значения константы и т.д. К примеру изменения в прошивке и компиляцию можно сделать меньше чем за 5 минут, а тестировать нужно примерно часа 5 или больше ( всё завысит от тестплана). Хочу автоматизировать процесс тестирования, так как например делают наши высокоуровневые коллеги — пишут автоматизирование тесты (TDD). Хочется чтобы запустил тестирование и через некоторое время увидел результ — тест такой — pass/fail.

Начал читать книгу: Test Driven Development for Embedded C пока понимаю не много…
Также понемного разбираюсь с библиотекойPySerial — очень просто работать с ком портом.

Само тестирование вижу так:
запустил скрипт или программу на компе, программа конектиться с МК по UART и обмениваеться данными. Программа (скрипт) на компе шлёт данные в МК, а сама знает заведомо правильный результат. МК обрабатывает принятый результат и посылает обратно на комп, программа сравнивает — если сошлось — pass, не сошлось — fail.

Кто нибудь делал подобное?
  • 0
  • 18 августа 2013, 20:53
  • Nemo

Cubieboard VS BeagleBone Black

Думаю о покупке платы. Пока не могу решиться что лучше. Xочу использовать для робота (ком. зрение, стереозрение, передача видео по Wi-Fi) Решил сравнить плюсы и минусы, и услышать мнение сообщества. И так:

Cubieboard                                                            BeagleBone Black


_________________________________________________________________________________________________


Читать дальше
  • -1
  • 04 июня 2013, 13:54
  • Nemo

My Robot Car



Решил сделать своего робота, так как в процесе создание многому можна научиться.
Робот представляет собой платформу которая может управляться с пульта, или компьютера (пока слишком тупая, чтобы принимать решения самостоятельно но я над этим работаю). В планах управление по Wi-Fi, беспроводная передача видео, обработка даных с датчиков, комютерное зрение, и многое другое… И так, с чего же состоит мой робот…

Читать дальше
  • +5
  • 20 апреля 2013, 00:50
  • Nemo

PSoC 1. Быстрый старт.

На блоге увидел статью PSoC 5.Введение. Создание проекта. очень понравилась, решил написать свою но о PSoC 1, самом младшем семействе микроконтроллеров Cypress. Микроконтроллеры PSoC 1 восьмибитные. Их отличие от других производителей мк есть то что переферийные модули (таймеры,UART, и другие) можно добавлять в зависимости от потребности. Можно сказать что cypress микроконтроллеры смесь FPGA і uC.

Читать дальше
  • +7
  • 12 декабря 2012, 23:40
  • Nemo

"Волшебная коробка"

Решил сделать для любимой девушки оригинальный подарок своими руками. Это моя первая статься на блоге, так что не судите строго :))

Функционал устройства:

  • 7- программ миганния;
  • Переключенние между программами происходить по кнопке;
  • Переключенние между программами по таймеру, каждых 30с;
  • Отключение устройства по кнопке;
  • автоматичиское выключение при 5минутах неактивности.

Схема устройства очень простая — микроконтроллера ATmega8, красные светодиды, кнопки и батарейки питания (3 пальчика). Плату сделал двухслойной (не хотелось использовать перемычки).Разводил в Altium Designer, избыточно для такой прсотой платы использовать такую программу, но так как я с ней постоянно работаю — мне в ней удобно. Altium проект вконце статьи в архиве. Чтобы распечатать чертеж для ЛУТ сначала необходимо сгенерировать гербер, как сделать уже описано тут.

Вот так выглядит плата устройства в Altium Designer:



Визуализация платы в Altium Designer:



Плату поместил в сувенирную коробку:



Для программирования МК на плате есть разъем. Конечно он немного портыть выд устройства, но совсем не хотелось мучаться с проводами для прошивки. Я программировал через AVRISP mkII но можно использовать той что есть в у вас в наличии.
Прошивку писал в AVR Studio на язике С, не особо оптиммизировал. Частота работы МК 8MHz В программу очень легко вносить новые эффекты мигания. Кнопкой S2 включаеться устройство, S1 — переключючение программ мигания по кругу, после МК переходить в сон, и чтобы включить нужно нажать S2 (кнопка подключена к внешнему прерыванию). Если кнопка S1 не нажимаеться, через 30 секунд произойдет переключение на следующую программу мигания. Если нет активности пользователся, через 5хв устройство отключиться.

Программа огранизована в виде тасков. В прерывании таймера устанавливаеться флаг события, в главном идет обработка события и сбрасиваеться флаг:

volatile unsigned char BlinkMode = 0; //  какой ефект должен работать
volatile unsigned char  BlinkSpeed = 0; //скорость переключения
volatile unsigned char TaskFlag = 0; // переменная флагов для задачь

ISR(TIMER2_COMP_vect) // 1mS
{
	if (++count2 ==  BlinkSpeed)	
	{
		TaskFlag|= (1<<6); //set flag
		count2 = 0;
	}		
}

while(1)
{
    if (TaskFlag & (1<<6))
    {
        BlinkLedTask();
	TaskFlag&=~(1<<6); // clear flag
    }
}


Так происходить переключение программ мигания:

void BlinkLedTask(void)
{ 
	switch (BlinkMode)
	{
		case 0: Blink1(20);   break; 
		case 1: Blink2(50);   break; 
		case 2: Blink3(200);  break; 
		case 3: Blink4(255);  break;
		case 4: Blink5(150);  break;
		case 5: Blink6(90);   break;
		case 6: Blink7(250);  break;
		case 7: Sleep();      break;
	}	
}


Одна с функций мигания:
iBlinkSpeed
— параметр функции — скорость мигания.

EnableAll();
устанавливает лог «1» на аноды светодиодов.

PWM = 10;
минимальная яркость мигания светодиодов
PWM = 250;
максимальная яркость мигания светодиодов


void  Blink7(unsigned char iBlinkSpeed)
{
	static unsigned char num = 0;	
	
	BlinkSpeed = iBlinkSpeed;
	
	EnableAll();
	
	if (num == 0)
	{
		PWM = 10;
		num = 1;
	}
	else 
	{
		PWM = 250;
		num = 0;
	}
}


Для тех кто выдержал и дочитал:

Как работает устройство-видео

Файлы к статье:
we.easyelectronics.ru/attachments/get/1091
we.easyelectronics.ru/attachments/get/1092

Спасибо. Жду конструктивной критики и замечаний!)
  • +4
  • 08 сентября 2012, 00:05
  • Nemo
  • 2