avatar
да, уже нашел
avatar
В интернете всегда кто-то неправ.

Имелись в виду современные абсолютные энкодеры с аналогичным интерфейсом, коие есть, но гораздо проще найти абсолютный энкодер с профибасом или промэзернетом на выходе.

А если говорить о самом коде Баркера, то он вокруг нас где есть Wi-Fi.
avatar
Скрыть эти различия за интерфейсом IPwmChannel. Самый простой вариант — претвориться, что все таймера 16 битные и использовать только старшие 8 бит в 8 битных.

Более высокоуровневый подход — проценты заполнения ШИМ и из процентов пересчитывать в заполнение.
avatar
я думаю что видели…
avatar
а как быть с тем что указатели для OCR таймера0 и таймера2 — uint8_t*, а для таймера2 uint16_t*?
avatar
И если Вам вдруг попадется современный абсолютный энкодер, в том числе на сдвиговом регистре на входе, алгоритм считывания будет аналогичен.
Нет, ты ошибаешься!
avatar
Совершенно точный, но совершенно бесполезный ответ на ваш вопрос — у заказчика.

На основании некоторых ключевых слов в статье можно предположить, что была задача модернизировать что-то очень старое, но очень нужное. Если присмотреться в видео, то это что-то трехкоординатное, с двумя датчиками по X и по Y.

И если Вам вдруг попадется современный абсолютный энкодер, в том числе на сдвиговом регистре на входе, алгоритм считывания будет аналогичен.
avatar
Делимся радостью здесь, чтобы нас услышал издатель. Это очень важно!
avatar
Ура!!!
avatar
И где ты откопал этот почтенный датчик?
avatar
Мне кажется, или я этот пост уже где-то видел?
avatar
НОВОСТЬ! Переиздание двухтомника Джонсона ожидается в ноябре 2014. Ждите!
avatar
Если хочется ООП, то нужно сделать общий интерфейс и по классу — каналу, который реализует интерфейс. Пример:

class IPwmChannel {
public:
    virtual void Initialize() = 0;
    virtual void SetValue(int value) = 0;
}

class Pwm1 : public IPwmChannel {
public:
    void Initialize() { /* инициализация канала 1*/ };
    void SetValue(int value) { /* установка занчения канала 1*/};
}


А потом уже можно делать клас серво-машинки

class Servo
{
private:
        IPwmChannel *_pwm;  

public:
        Servo(IPwmChannel* pwm) { _pwm = pwm; }
        void Write(int data) { _pwm->SetValue = data; }
};


Ну и все. Как использвоать, думаю, очевидно.
avatar
Потому что в техническом задании была прописана именно такая задача.
Задача была сделать драйвер на С, который можно было вызывать из программы на FORTRAN, которая уже была, давно работает и ее совершенно невозможно поддерживать (синтаксис f-77).
avatar
Задачей было оставить основной программный модуль на FORTRAN,

А почему не на С. Очень много наработок, и люди больше использують С чем FORTRAN.
avatar
А посмотри-ка вот на этот мостовой RLC-метр: DER EE DE-5000
ebay
avatar
Ой, братцы, что-то вы сиськи некрасивые рисуете.
Примерно миллион лет назад я делал так :)
avatar
Блин, извиняюсь.
Посмотрел внимательней- там 10 В/дел, а не 100.
Стыдно.
:D
avatar
Хм, напряжение на стоке- выпрямленные 110В.
Автор, признавайся, из какой страны.
: )
avatar
Код будет храниться в неканоничной микросхеме ОЗУ в 64 кбайт.
Причем небольшая область памяти будет выводиться на светодиодную матрицу 32х16 — надо же ее уже куда-нибудь пристроить, а то лежит без дела.

Я не ставлю перед собой задачу сделать простую машину. Можно и аппаратный брейнфак замутить, но смысл?:)