LinkedIn YouTube Facebook
Szukaj

Wstecz
Artykuły

Digilent Pmod i STM32 (cz. 6) – PmodACL2, PmodDPOT i PmodSSD

PmodSSD

Moduł PmodSSD jest wyposażony w dwucyfrowy wyświetlacz siedmiosegmentowy. Obie cyfry wyświetlacza mają wspólną katodę, a wybór aktywnej odbywa się za pośrednictwem jednego z sygnałów. PmodSSD posiada dwa sześciopinowe złącza GPIO typu 1. Z tego względu w przykładzie moduł podłączono do złącza ARDUINO CONNECTOR zgodnie z tabelą 3.

Tabela 3. Sygnały modułu PmodSSD podłączone do złącza ARDUINO CONNECTOR zestawu KAmeleon

Sygnał Numer pinu PmodSSD Numer pinu KAmeleon ARDUINO CONNECTOR Pin mikrokontrolera
AA 1 (J1) D6 PD10
AB 2 (J1) D7 PB11
AC 3 (J1) D8 PD11
AD 4 (J1) D9 PB13
GND 5 (J1) GND
VCC 6 (J1) +3,3
AE 1 (J2) D10 PB12
AF 2 (J2) D11 PB15
AG 3 (J2) D12 PB14
C 4 (J2) D13 PB10
GND 5 (J2)
VCC 6 (J2)

Fotografia 6. Moduł PmodSSD

Kod przykładu

Za obsługę wyświetlacza odpowiedzialny jest kod znajdujący się w plikach inc/PmodSSD.h i src/PmodSSD.c. Na listingu 9. znajdują się definicje pinów i portów GPIO oraz konfiguracja segmentów dla cyfr od 0 do 9. Cyfry są zakodowane jako maski bitowe, w których jedynka oznacza, że segment ma być zapalony. Segment A w każdej masce zakodowano na bicie zerowym, a segment G na szóstym.

Listing 9. Definicje pinów i portów GPIO oraz masek bitowych dla cyfr 0 – 9

uint16_t segmentPins[SEGMENTS_COUNT] = {GPIO_PIN_10, GPIO_PIN_11, GPIO_PIN_11, GPIO_PIN_13,
			                            GPIO_PIN_12, GPIO_PIN_15, GPIO_PIN_14};

GPIO_TypeDef* segmentPorts[SEGMENTS_COUNT] = {GPIOD, GPIOB, GPIOD, GPIOB, GPIOB, GPIOB, GPIOB};

uint8_t segmentsConfig[10] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F};

Za konfigurację wyprowadzeń mikrokontrolera podłączonych do wyświetlacza odpowiedzialna jest funkcja PmodSSD_Config włączająca niezbędne sygnały zegarowe i ustawiająca piny jako wyjścia w stanie niskim. Oprócz pinów obecnych w powyższych definicjach, funkcja konfiguruje także pin PB10, który służy do wybierania aktywnej cyfry wyświetlacza. Funkcję PmodSSD_Config przedstawiono na listingu 10.

Kod programu z plikami projektowymi środowiska Atollic można pobrać w sekcji „Do pobrania”

Listing 10. Konfiguracja wyprowadzeń podłączonych do modułu PmodSSD

void PmodSSD_Config(void)
{
  // Enable clock for all required GPIO ports.
  __HAL_RCC_GPIOB_CLK_ENABLE();
  __HAL_RCC_GPIOD_CLK_ENABLE();

  GPIO_InitTypeDef GPIO_InitStruct;
  GPIO_InitStruct.Mode  = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull  = GPIO_PULLDOWN;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;

  // Initialize GPIOs for all segments
  for(int i=0; i<SEGMENTS_COUNT; i++) {
    GPIO_InitStruct.Pin = segmentPins[i];
    HAL_GPIO_Init(segmentPorts[i], &GPIO_InitStruct);
    HAL_GPIO_WritePin(segmentPorts[i], segmentPins[i], GPIO_PIN_RESET);
  }

  // Initialize display selection pin
  GPIO_InitStruct.Pin = GPIO_PIN_10;
  HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
  HAL_GPIO_WritePin(GPIOB, GPIO_PIN_10, GPIO_PIN_RESET);
}

Druga z funkcji znajdujących się w pliku src/PmodSSD.cPmodSSD_DisplayNumber, służy do wyświetlania wybranej cyfry. Została ona przedstawiona na listingu 11. Funkcja ustawia stan linii C, wybierając w ten sposób jedną z cyfr. Następnie ustawia pozostałe linie GPIO zgodnie z wybraną maską bitową. Aktywna cyfra wybierana jest za pomocą argumentu typu DisplayId, zdefiniowanego w pliku inc/PmodSSD.h.

Listing 11. Wyświetlanie wybranej cyfry na wyświetlaczu

void PmodSSD_DisplayNumber(DisplayId id, uint8_t number)
{
  if (number > 9)
	  return;

  // Select the display using the C pin.
  if(id == DisplayId_0)
    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_10, GPIO_PIN_RESET);
  else
    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_10, GPIO_PIN_SET);

  // Set or reset each segment bit according to the segment configuration array.
  for(int i=0; i<SEGMENTS_COUNT; i++) {
    if((segmentsConfig[number] >> i) & 0x01)
      HAL_GPIO_WritePin(segmentPorts[i], segmentPins[i], GPIO_PIN_SET);
    else
      HAL_GPIO_WritePin(segmentPorts[i], segmentPins[i], GPIO_PIN_RESET);
  }
}

Pętla główna programu w funkcji main wyświetla naprzemiennie cyfry na wyświetlaczu w kolejności rosnącej po prawej stronie i malejącej po lewej stronie wyświetlacza. Podłączony moduł z wyświetloną jedną z cyfr przedstawiono na fotografii 7.

Fotografia 7. Moduł PmodSSD podłączony do złącza ARDUINO CONNECTOR zestawu KAmeleon

Moduły PmodACL2, PmodDPOT i PmodSSD a także zestaw KAmeleon oraz wiele innych płytek ewaluacyjnych i modułów rozszerzających można znaleźć w ofercie Kamami.pl
Zachęcamy do przeczytania siódmej części cyklu, w której omówiliśmy moduły PmodBT2, PmodTC1 i PmodCLP – Digilent Pmod i STM32 (cz. 7) – PmodBT2, PmodTC1 i PmodCLP