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) | – | – |
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.
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.c – PmodSSD_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


Technologie End of Life i bezpieczeństwo sieci – wyzwania Europy związane z tzw. długiem technologicznym
Najczęstsze błędy firm przy wyborze dostawcy energii i jak ich uniknąć
Fotorezystor, czyli czujnik światła dwojakiego działania. Przykład innowacji w automatyce i elektronice możliwej dzięki technologii fotooporników 



