Digilent Pmod i STM32 (cz. 6) – PmodACL2, PmodDPOT i PmodSSD
PmodDPOT
Drugim z opisywanych modułów jest PmodDPOT z potencjometrem cyfrowym AD5160 od Analog Devices. Potencjometr posiada 256 pozycji, umożliwiających podział całkowitej rezystancji widzianej pomiędzy portami A i B (RAB). Całkowita rezystancja wynosi w sumie 10 kΩ. Zależność pomiędzy ustawieniem ślizgacza, a rezystancją pomiędzy między portami W i B (RWB) jest zgodna z równaniem:
w której D jest konfigurowaną pozycją ślizgacza w zakresie od 0 do 255, natomiast RW jest jego rezystancją wynoszącą 60 Ω. Analogicznie przedstawia się zależność dla portów W i A:
Interfejs SPI
Do komunikacji z układem służy interfejs SPI, za pomocą którego można konfigurować pozycję ślizgacza. Odbywa się to przez wysłanie pojedynczego bajtu, zawierającego żądaną pozycję, która jest jednocześnie wartością D w przedstawionych wcześniej zależnościach.
Moduł posiada sześciopinowe złącze SPI typu 2, które może zostać podłączone do gniazda Pmod-SPI zestawu KAmeleon, tak jak na fotografii 5. Lista wyprowadzeń mikrokontrolera połączonych z pinami modułu PmodDPOT została przedstawiona w tabeli 2. Komunikacja odbywa się tylko w jedną stronę: od mikrokontrolera do modułu.
Fotografia 5. Moduł PmodDPOT podłączony do zestawu KAmeleon
Tabela 2. Sygnały PmodDPOT oraz odpowiadające im piny mikrokontrolera; w tabeli pominięto sygnały niepołączone (NC) i linie zasilania występujące na złączu Pmod
Sygnał | Numer pinu PmodDPOT (J1) | Pin STM32L496ZG (KAmeleon Pmod-SPI) |
~CS | 1 | PB0 |
MOSI | 2 | PA7 |
SCLK | 4 | PA1 |
Kod przykładu
Kod do obsługi modułu PmodDPOT w prezentowanym przykładzie znajduje się w plikach src/PmodDPOT.c i inc/PmodDPOT.h. Konfiguracja interfejsu SPI, znajdująca się w funkcji PmodDPOT_Config, wygląda analogicznie jak dla opisywanego wcześniej modułu PmodACL2 – tryb 0 z programową kontrolą sygnału ~CS. Piny GPIO są jak zwykle konfigurowane przez funkcję HAL_SPI_MspInit wywoływaną wewnątrz funkcji bibliotecznej HAL_SPI_Init. Ostatnia z funkcji – PmodDPOT_SetValue, jest odpowiedzialna za zmianę ustawienia ślizgacza. Została ona przedstawiona na listingu 8.
Listing 8. Funkcja PmodDPOT_SetValue
void PmodDPOT_SetValue(uint8_t value) { HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET); HAL_SPI_Transmit(&pmodDpotSpi, (uint8_t*)&value, 1, 100); HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET); }
Główna pętla programu wykonuje co 100 ms zmianę ustawienia ślizgacza w zakresie od 0 do 255. Można to obserwować przez pomiar rezystancji RWA, lub RWB.