Переходник USB-RS485

Posted by Reason89 | Posted in , ,


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

    Данный адаптер USB-RS485 приобретал здесь. Доставка быстрая, качество меня вполне устроило. Оба переходника пришли рабочими. Вполне компактные и удобные в обращении.
    Сам испробовал работу на скорости 1000000 бод/с(больше необходимости не было) все прекрасно работает.
     Вскрытие показало, что работает на микросхеме MAX485. Качество пайки добротное. Кому необходима более детальная информация по скоростям работы, то можете открыть даташит на нее, и увидите все характеристики.
    Для работы удобно пользоваться терминалом от Br@y++.
    С драйверами под Windows никаких проблем не возникало. Грубо говоря все работает с коробки.
    На момент покупки цена была 55р. за штуку. В наших магазинах электроники, микросхемы RS485 стоят от 80 р., причем это без USB контроллера. Поэтому считаю что дешевле купить и не заморачиваться.
    Из минусов, разве что могли что нибудь по солиднее этого зеленого терминала придумать.

Xmega: АЦП(ADC)

Posted by Reason89 | Posted in , ,

    В микроконтроллерах Xmega используется 12 разрядный АЦП, который позволяет делать нескольких сигналов одновременно. Так же в  АЦП есть усилитель, который можно использовать с целью измерения маленьких напряжений в дифференциальном режиме.
    Преобразование может производиться как в знаковом, так и без знаковом режиме.  Стоит помнить, что если АЦП использует дифференциальные входы, то должен использоваться знаковый режим, а с входами других типов можно использовать оба режима, как знаковый, так и без знаковый.
    Из таких явных неудобств, стоит обратить внимание на то, что режим преобразования устанавливается на весь АЦП, а не индивидуально для каждого канала. То есть когда один из каналов использует дифференциальный вход, АЦП должен быть введен в знаковый режим.
    На входе АЦП стоит мультиплексор, который позволяет нам оцифровывать 4 внутренних сигнала, таких как: датчик температуры, выход ЦАП, деленное на 10 напряжение питания VCC и источник опорного напряжения, плюс 16 внешних сигналов. В AVR такого и близко не было.
    Преобразование АЦП может быть запущено либо программно, запись в определенный регистр заданного значения, либо через систему событий.
    Можно использовать 4 режима измерения:
- дифференциальный вход
- дифференциальный вход с усилением
- несимметричный вход
- внутренний вход
     В качестве опорного напряжения АЦП (VREF) можно выбрать следующие напряжения:
- Точное внутреннее напряжение INT1V 1В.
- Внутреннее напряжение INTVCC VCC/1.6В.
- Внешнее напряжение, поданное на вывод AREF порта А.
- Внешнее напряжение, поданное на вывод AREF порта B.
     Описание всех регистров можно найти в документации на Xmega. Настроек на самом деле огромное количество. В сравнении с предыдущими поколениями, Xmega  позволяет настраивать все более тонко, соответственно и количество регистров здесь гораздо больше.
    Привожу функцию инициализации АЦП:

void ADC_init()
{
    ADCA.CTRLB = ADC_RESOLUTION_12BIT_gc;             // 12 бит дискретизация
    ADCA.CH0.CTRL = ADC_CH_INPUTMODE_SINGLEENDED_gc;  // CH0 настроен на внешний нессимметричный вход
    ADCA.PRESCALER =ADC_PRESCALER_DIV32_gc;           // Переферийная частота работы АЦП
    ADCA.REFCTRL = ADC_REFSEL_INT1V_gc | 0x02;        // Опорное напряжение 1 В.
    ADCA.CH0.MUXCTRL = ADC_CH_MUXPOS_PIN3_gc;         // Настраиваем как положительный вывод порта для АЦП
    ADCA.CTRLA = ADC_ENABLE_bm;                       // Активирую АЦП
} 

Xmega: AWEX

Posted by Reason89 | Posted in , ,

    Прежде чем начать работать с модулем AWEX, изучите его наличие в вашем микроконтроллере. Когда я начинал изучать AWEX я столкнулся с тем, что документация на ATXmega256A3 разнилась, в одном документе было написано что их два, на PORTC и на PORTE. После того, как мои попытки завести AWEX на PORTE не увенчались успехом. Я нашел другой доумент, где было написано, что AWEX есть только на PORTC.
  AWEX это некое расширение модуля таймера-счетчика. Используется для аппаратной генерации импульсов. Очень удобно использовать для генерации ШИМ сигнала для управления инверторами и шаговыми двигателями. Имеется возможность вставлять паузу мертвого времени и.т.д.
    Собственно простой пример:
int main(void)
{
    ClockExt8MHz();
    PORTC.DIRSET = 0xFF;
    PORTC.OUTCLR = 0xFF;
    
    TCC0.CTRLB      = TC_WGMODE_SS_gc | TC0_CCAEN_bm;
    TCC0.PER        = 512;
    TCC0.CCA        = 256;
    TCC0.CTRLA      = TC_CLKSEL_DIV1_gc;
    
    AWEXC.CTRL      = AWEX_DTICCAEN_bm;
    AWEXC.DTBOTH    = 48;
    AWEXC.OUTOVEN   = 0x03;
        
while (1)
    {
    }
}
AWEXC.CTRL = AWEX_DTICCAEN_bm  - здесь разрешаем использование на канале А, паузы неперекрытия.
AWEXC.DTBOTH - Общий регистр паузы неперекрытия
AWEXC.DTHS и AWEXC.DTLS Регистры паузы неперекрытия верзнего и нижнего уровня
AWEXC.OUTOVEN - Регистр разрешения перекрытия выходов
TCC0.CTRLB  =  TC_WGMODE_SS_gc | TC0_CCAEN_bm - запускаем режим генерации импульсов с однонаправленным счетом и активируем канал A.
    Данный пример управляет с помощью PORTC.0 и PORTC.1 двумя транзисторами в плечах преобразователя.
    Так как MOSFET транзисторы запираются не сразу, и не возникло ситуации, когда оба транзистора открыты. Необходимо выставлять паузы неперекрытия, чтобы транзистор наверняка  заперся.
Больше технической русскоязычной документации здесь