Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Wąż świetlny LED na wyświetlaczu siedmiosegmentowym

BlackOut22 27 May 2020 15:19 669 0
  • #1
    BlackOut22
    Level 1  
    Witam,
    Mam problem z napisaniem do końca kodu w środowisku Bascom, do wyświetlania odpowiednich segmentów na wyświetlaczu.
    Poniżej zamieszczam to co udało mi się uzyskać do tej pory, i instrukcje co powinnam uzyskać po ukończeniu kodu.
    Code: vbnet
    Log in, to see the code

    Poniżej instrukcja:
    Modyfikacja programu węża świetlnego 6-cio diodowego z ćwiczenia M4-e do działania na wyświetlaczu
    siedmiosegmentowym W4 zestawu ZL11AVR. Przetestowanie działania programu w symulatorze
    BASCOM-AVR z emulatorem wyświetlacza siedmiosegmentowego.
    W wyniku realizacji poprzedniego ćwiczenia powstał program sterujący ruchem 6-diodowego węża
    świetlnego dla hipotetycznego systemu wbudowanego ze schematu z rys. 1 (diody LED0?LED5).
    Zadanie polega na takiej modyfikacji programu, aby jeden świecący segment ?poruszał się? w koło
    po sześciu segmentach A?F wyświetlacza W4 ?zakreśląjąc? w ten sposób cyfrę zero. Segment G oraz DP
    powinny być zawsze wygaszone (nie są elementami nowego ?węża?). Podobnie wyświetlacze W1, W2 i W3
    powinny być wygaszone.
    Reakcja węża na przyciski S1 i S2 ma pozostać bez zmian (styki przycisków podłączone są do
    mikrokontrolera zestawu ZL11AVR identycznie jak w układzie z rys. 1).

    Wskazówki
    Porównaj sposób podłączenia diod LED0?LED5 do mikrokontrolera na schemacie z rys. 1. ze
    schematem połączeń czterocyfrowego wyświetlacza 7-segmentowego i mikrokontrolera zestawu ZL11AVR
    ? rys. 2. W tym drugim zastosowano wyświetlacze ze wspólną anodą co oznacza, że dioda LED
    podświetlająca segment zaświeci gdy spełnione zostaną dwa warunki jednocześnie:
    ? na wspólne anody wyświetlacza (końcówki 3, 8) zostanie podany wysoki potencjał zasilana
    (Vcc=5V) przez jeden z tranzystorów T3?T6 typu PNP, i
    ? na końcówce mikrokontrolera PB0?PB7 będzie panował niski potencjał zasilania (0V).
    Oznacza to, że segmenty ?nowego węża? w zestawie ZL11AVR będą zaświecane przez nadanie
    odpowiednim bitom rejestru PORTB wartości ZERO, w nie jak dotąd wartości jeden.
    1. Zmodyfikuj zatem fragment kodu węża obliczający wartości bitów dla rejestru PORTB zarówno dla
    pozytywu jak i negatywu węża (fragment oznaczony liczbą 16. w szkielecie kodu).

    2. Skompiluj program i otwórz symulator. W oknie Hardware simulation zaznacz kwadrat Invert (z
    ang. odwróć, zaneguj) ? rys. 3. Od tej chwili sposób prezentacji wartości bitów rejestrów
    specjalnych zmieni się: bit=0 będzie reprezentowany lampką świecącą, bit=1 lampką zgaszoną.
    Zauważ, że jeżeli kod programu węża został prawidłowo zmodyfikowany to w wyniku negacji w
    sposobie prezentacji lampki PB7?PB0 powinny zachowywać się identycznie jak przed modyfikacją
    (czyli pozytyw węża powinien być widoczny jako jedna świecąca lampka PBx na tle pozostałych
    wygaszonych).
    Zmieni się natomiast sposób symulowania stanów przycisków S1 i S2. Przycisk naciśnięty symuluj
    przez zapalenie lampki bitu PD0 lub PD1, przycisk zwolniony symuluj przez zgaszenie lampki bitu.
    Rys. 3.
    3. Symulator BASCOM-AVR nie posiada emulatora wyświetlaczy siedmiosegmentowych. Dlatego
    użyjesz emulatora w postaci podprogramu dołączonego do twojego programu. Wstaw poniższy
    fragment kodu (z komentarzami) na początek swojego pliku .bas (tuż pod nagłówkiem z twoim
    imieniem i nazwiskiem). Przeczytaj uważnie komentarze!
    ' Poniżej znajduje się deklaracja dwóch podprogramów (ang. Subroutine) symulujących
    ' pracę dwóch wyświetlaczy 7-segmentowych W3 i W4 zestawu ZL11AVR.
    ' Wyświetlacze będą widoczne w zakładce UART0 w oknie symulatora BASCOM-AVR.
    ' Kod źródłowy tych dwóch podprogramów znajduje się w pliku "emulator_wysw_W3_W4.bas",
    ' który należy umieścić w tym samym katalogu co plik .bas z programem głównym.
    ' Podprogram emuluj_W3_W4 symuluje pracę wyświetlaczy W3 i W4 (na podstawie konfiguracji i stanów końcówek mikrokontrolera).
    ' Podprogram należy wywoływać TUŻ PRZED PAUZĄ waitms w pętli głównej programu.
    ' Wywołanie podprogramu - po prostu: emuluj_W3_W4
    Declare Sub emuluj_W3_W4
    ' Podprogram test_emulatora_W3_W4 służy do testowego/próbnego wyświetlenia liczby "3.4" na dwóch
    ' symulowanych wyświetlaczach W3 i W4.
    ' Liczba "3.4" będzie widoczna ZAWSZE (bez względu na konfigurację i stany końcówek mikrokontrolera).
    ' Podprogram można wywoływać TUŻ PRZED PAUZĄ waitms w pętli głównej programu (w razie potrzeby).
    ' Wywołanie podprogramu - po prostu: test_emulatora_W3_W4
    Declare Sub test_emulatora_W3_W4

    4. Zapisz pobrany ze strony kursu plik emulator_wysw_W3_W4.bas (z kodem źródłowym emulatora)
    w tym samym katalogu co twój plik .bas.
    5. Na samym końcu pliku .bas z twoim kodem (po słowie kluczowym End) umieść poniższy fragment
    (z komentarzem):
    ' W trakcie kompilacji dyrektywa kompilatora $INCLUDE wczyta plik z kodem źródłowym podprogramów symulujących wyświetlacze.
    ' (identyczny efekt można uzyskać zastępując poniższą linię zawartością wczytywanego pliku)
    $INCLUDE "emulator_wysw_W3_W4.bas"

    6. Podprogramy emulatora wyświetlaczy są dość obszerne i łącznie z twoim kodem zapełnią prawie
    całą dostępną pamięć FLASH (2KB) w mikrokontrolerze ATtiny2313. Dlatego w menu głównym
    programu BASCOM-AVR wybierz Options>Compiler>Chip. W wyświetlonym oknie zmień typ
    mikrokontrolera (lista Chip) na attiny4313.dat. Mikrokontroler ATtiny4313 ma dwukrotnie więcej
    pamięci FLASH, RAM oraz EEPROM niż ATtiny2313 (poza tym są identyczne).
    7. W swoim kodzie przed linią realizującą pauzę waitms? wstaw wywołanie podprogramu
    testującego/demonstrującego działanie emulatora: test_emulatora_W3_W4. Skompiluj program i
    uruchom go w symulatorze. W niebieskim okienku zakładki UART0 powinien cyklicznie
    wyświetlać się testowy obraz emulatora wyświetlaczy siedmiosegmentowych ?3.4? ? rys. 4.
    Dobierz wysokość okienka UART0 tak, aby widoczny był dokładnie jeden ?obraz? emulowanych
    wyświetlaczy. Czas pauzy (waitms) dobierz tak, aby ?obraz? wyświetlaczy pozostawał nieruchomy
    przez ok. 1 sekundę.

    8. Skonfiguruj odpowiednio tryb pracy końcówek mikrokontrolera sterujących bazami czterech
    tranzystorów T3?T6 (wszystkich czterech, pomimo że emulator symuluje działanie tylko dwóch
    wyświetlaczy W3 i W4).

    9. Wysteruj bazy czterech tranzystorów T3?T6 tak, aby wąż świetlny widoczny był TYLKO NA
    WYŚWIETLACZU W4.

    10. Zastąp wywoływanie podprogramu testowego test_emulatora_W3_W4 wywołaniem podprogramu
    emuluj_W3_W4 (właściwego emulatora wyświetlaczy siedmiosegmentowych W3 i W4)
    Przetestuj program w symulatorze. W oknie UART0 powinny wyświetlać się segmenty TYLKO na
    wyświetlaczu W4 i zachowywać się zgodnie z regułami węża (przetestuj program dla wszystkich
    kombinacji przycisków S1 i S2).


    Wąż świetlny LED na wyświetlaczu siedmiosegmentowym Wąż świetlny LED na wyświetlaczu siedmiosegmentowym