Главная arrow Программирование arrow ARM arrow ARM: программная реализация SPI (управление электронным переменным резистором MAX5437EUD) Thursday, July 27 2017  
ГлавнаяКонтактыАдминистрированиеПрограммированиеСсылки
UK-flag-ico.png English Version
GERMAN-flag-ico.png Die deutsche Version
map.gif карта сайта
нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.

Поделиться:

ARM: программная реализация SPI (управление электронным переменным резистором MAX5437EUD) Версия для печати
Написал microsin   
28.12.2008

Ядро AT91SAM7X256 у меня работало на частоте 48 МГц. Тип u8 определен как unsigned char. Микросхема MAX5437EUD работает совсем просто - байт, который в неё посылаем - а точнее, младшие 7 бит этого байта - определяют положение "движка" резистора (номинал у него кажется 50 кОм). Всего 128 позиций "движка", любую из которых мы можем задать, просто посылая байт подпрограммой SendByteMAX5437EUD.

//-------------------------------------------------------------------------
//   Модуль MAX5437EUD.c
//   Подпрограмма, посылающая байт резистору MAX5437EUD
//-------------------------------------------------------------------------
#include <pio/pio.h>
#include <intrinsics.h>

//выход - сигнал тактов для резистора контрастности LCD, ножка PB14, сигнал на схеме SCLK_R
#define PIN_SCLK_R {AT91C_PIO_PB14, AT91C_BASE_PIOB, AT91C_ID_PIOB, PIO_OUTPUT_1, PIO_DEFAULT}
//выход - сигнал данных для резистора контрастности LCD, ножка PB15, сигнал на схеме DIN_R
#define PIN_DIN_R {AT91C_PIO_PB15, AT91C_BASE_PIOB, AT91C_ID_PIOB, PIO_OUTPUT_1, PIO_DEFAULT}
//выход - сигнал выборки для резистора контрастности LCD, ножка PB17, сигнал на схеме CS_R
#define PIN_CS_R {AT91C_PIO_PB17, AT91C_BASE_PIOB, AT91C_ID_PIOB, PIO_OUTPUT_1, PIO_DEFAULT}

#define PINS_MAX5437 PIN_SCLK_R, PIN_DIN_R, PIN_CS_R

static const Pin sclkMAX5437    = PIN_SCLK_R;
static const Pin   csMAX5437    = PIN_CS_R;
static const Pin  dinMAX5437    = PIN_DIN_R;
static const Pin MAX5437_Pins[]  = {PINS_MAX5437};

//задержка не потребовалась - быстродействия у MAX5437EUD хватило
//static void spiDelay (void)
//{
//    __no_operation();
//}

void pinSetup (void)
{
    //настраиваем ножки, которые управляют электронным резистором
    PIO_Configure(MAX5437_Pins, PIO_LISTSIZE(MAX5437_Pins));
}

void SendByteMAX5437EUD (u8 byte)
{
    u8 bitCnt;
   
    byte &= 0x7F;                       //выделяем только 7 младших бит
    PIO_Clear(&sclkMAX5437);            //SCLK == 0
    PIO_Clear(&csMAX5437);              //CS   == 0
//    spiDelay();
//    spiDelay();
//    spiDelay();
    for (bitCnt=8;bitCnt!=0;bitCnt--)
    {
        if (byte & 0x80)
            PIO_Set(&dinMAX5437);
        else
            PIO_Clear(&dinMAX5437);
        byte <<= 1;
//        spiDelay();
//        spiDelay();
//        spiDelay();
        PIO_Set  (&sclkMAX5437);        //SCLK==1
//        spiDelay();
//        spiDelay();
//        spiDelay();
        PIO_Clear(&sclkMAX5437);        //SCLK==0
    }
//    spiDelay();
//    spiDelay();
//    spiDelay();
    PIO_Set(&csMAX5437);              //CS   == 0
}

Последнее обновление ( 28.12.2008 )
 

Добавить комментарий

:D:lol::-);-)8):-|:-*:oops::sad::cry::o:-?:-x:eek::zzz:P:roll::sigh:

Защитный код
Обновить

< Пред.   След. >

Top of Page
 
microsin © 2017