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.
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).

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
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).

