BASCOM-AVR to popularne środowisko do programowania mikrokontrolerów AVR w języku BASIC. Łączy przystępną składnię z rozbudowaną obsługą peryferiów oraz zintegrowanymi narzędziami do kompilowania, symulowania i programowania układów.
Czym jest BASCOM-AVR?
BASCOM-AVR to zintegrowane środowisko programistyczne przeznaczone do programowania mikrokontrolerów z rodziny AVR w języku BASIC. Układy te zostały opracowane przez firmę Atmel, która obecnie jest częścią Microchip Technology.
Do najważniejszych cech środowiska należą:
- IDE dla systemu Windows – łączy edytor kodu, kompilator, programator, symulator i podstawowe narzędzia diagnostyczne;
- przystępny język BASCOM – wykorzystuje składnię zbliżoną do klasycznego języka BASIC, dzięki czemu ułatwia rozpoczęcie pracy osobom bez doświadczenia w C;
- rozbudowane biblioteki sprzętowe – zawiera gotowe funkcje do obsługi portów wejścia i wyjścia, przetwornika ADC, interfejsu UART, pamięci EEPROM oraz innych peryferiów;
- obsługa wielu rodzin AVR – pozwala programować między innymi układy ATtiny, ATmega i wybrane modele ATxmega;
- współpraca z płytkami Arduino – umożliwia programowanie wielu modeli wyposażonych w klasyczne mikrokontrolery AVR, takich jak Arduino Uno i Arduino Nano.
BASCOM-AVR może być pomostem między prostym językiem wysokiego poziomu a bezpośrednim sterowaniem sprzętem.
Obsługiwane mikrokontrolery i zastosowania
BASCOM-AVR obsługuje wiele popularnych mikrokontrolerów AVR — od niewielkich układów ATtiny po bardziej rozbudowane modele ATmega i wybrane układy ATxmega.
Typowe zastosowania środowiska obejmują:
- sterowniki i panele HMI z wyświetlaczami LCD oraz klawiaturami,
- proste roboty i układy mechatroniczne,
- systemy pomiarowe wykorzystujące ADC, UART lub USB,
- sterowanie oświetleniem i automatyką domową,
- projekty edukacyjne i hobbystyczne.
Aktualna lista obsługiwanych mikrokontrolerów jest dostępna w środowisku programistycznym oraz dokumentacji producenta. Obejmuje szeroki wybór układów AVR i współpracujących z nimi programatorów.
Wymagania systemowe i licencje
Przed instalacją warto sprawdzić wymagania programu oraz różnice między dostępnymi licencjami:
- system operacyjny – BASCOM-AVR jest aplikacją przeznaczoną dla systemu Windows;
- wersja demonstracyjna – jest bezpłatna, ale ogranicza rozmiar generowanego programu; zazwyczaj wystarcza do nauki i realizacji prostych projektów;
- wersja komercyjna – zapewnia pełną funkcjonalność i nie nakłada limitu rozmiaru generowanego kodu właściwego dla wersji demonstracyjnej.
Wersja demonstracyjna dobrze nadaje się do nauki oraz tworzenia prostych sterowników LED i projektów wykorzystujących UART. Przy bardziej rozbudowanych aplikacjach warto rozważyć zakup pełnej wersji.
Instalacja BASCOM-AVR krok po kroku
Instalację i pierwsze uruchomienie można przeprowadzić w kilku etapach:
- Pobierz instalator. Wybierz najnowszą dostępną wersję demonstracyjną lub komercyjną BASCOM-AVR.
- Wybierz katalog instalacji. Zainstaluj program w lokalizacji, do której użytkownik ma prawo zapisu, na przykład
C:\bascavr. Ułatwi to aktualizowanie aplikacji i zapisywanie plików tymczasowych. - Zainstaluj wymagane sterowniki. Jeśli instalator lub używany programator tego wymaga, uruchom instalację z uprawnieniami administratora.
- Sprawdź działanie środowiska. Utwórz projekt, zapisz go, a następnie skompiluj prosty program testowy.
Pierwsza konfiguracja środowiska
Po instalacji należy wybrać docelowy mikrokontroler oraz skonfigurować sposób przesyłania programu do układu.
Wybór mikrokontrolera
W menu, zazwyczaj w sekcji Options → Chip, wybierz rodzinę mikrokontrolera, taką jak ATtiny, ATmega lub ATxmega, a następnie konkretny model, na przykład ATmega8, ATmega16 albo ATmega328P.
Wybrany układ określa między innymi:
- dostępne peryferia, takie jak ADC, UART i liczniki,
- rozmiar pamięci Flash, RAM i EEPROM,
- dostępne rejestry oraz źródła przerwań.
Konfiguracja programatora
W menu Options → Programmer wybierz urządzenie używane do przesyłania kodu do mikrokontrolera. BASCOM-AVR może obsługiwać programator bezpośrednio albo uruchamiać aplikację zewnętrzną, taką jak AVRDUDE.
Najczęściej spotykane rozwiązania to:
- USBasp – popularny programator USB ISP;
- JTAG ICE i debugWIRE – interfejsy służące do programowania i debugowania wybranych układów;
- bootloader – umożliwia programowanie mikrokontrolera przez UART lub USB bez używania klasycznego programatora ISP;
- programator LPT – historyczne rozwiązanie ISP korzystające z portu równoległego, nadal spotykane w starszych projektach edukacyjnych.
Konfiguracja programatora w praktyce
Klasyczny programator ISP na LPT
W starszych poradnikach można znaleźć prosty programator ISP podłączany do portu równoległego LPT. Taki układ składa się zwykle z gniazda DB25, kilku rezystorów i przewodów.
Konfiguracja takiego programatora przebiega następująco:
- Skonfiguruj port LPT w BIOS-ie. W zależności od konstrukcji programatora może być wymagany określony tryb pracy portu, na przykład ECP.
- Podłącz programator. Połącz linie portu LPT z sygnałami ISP mikrokontrolera: MOSI, MISO, SCK i RESET. Pamiętaj również o połączeniu masy programatora z masą układu.
- Skonfiguruj BASCOM-AVR. W menu Options → Programmer wybierz typ programatora zgodny z używanym interfejsem i sprawdź adres portu LPT.
- Przetestuj połączenie. Włącz zasilanie mikrokontrolera i użyj funkcji Chip → Identify, aby sprawdzić, czy układ jest prawidłowo wykrywany.
USBasp jako programator zewnętrzny
USBasp jest popularnym programatorem ze względu na prostą konstrukcję i obsługę przez wiele narzędzi. BASCOM-AVR może współpracować z programem AVRDUDE, uruchamianym z odpowiednimi parametrami wiersza poleceń.
Konfigurację można przeprowadzić w trzech krokach:
- w oknie Options → Programmer wybierz opcję External programmer,
- wskaż plik wykonywalny programu AVRDUDE,
- wprowadź parametry wywołania odpowiednie dla programatora i mikrokontrolera.
Przykładowe parametry dla mikrokontrolera ATmega8 wyglądają następująco:
-p m8 -c usbasp -U flash:w:demo.hex
Polecenie wskazuje układ ATmega8, programator USBasp oraz plik demo.hex, który ma zostać zapisany w pamięci Flash.
W konfiguracji BASCOM-AVR można zastosować następujący wzorzec:
-p m8 -c usbasp -U flash:w:"{FILE}":a
Wartość {FILE} jest automatycznie zastępowana ścieżką do aktualnie wygenerowanego pliku HEX.
Należy zaznaczyć opcję „Use HEX file”, aby BASCOM-AVR wygenerował plik HEX i przekazał go do zewnętrznego programatora.
Dodawanie innych programatorów
Niestandardowy programator, na przykład wbudowany w płytkę ewaluacyjną, można skonfigurować za pomocą opcji Options → Programmer → Other. Należy wskazać plik wykonywalny aplikacji odpowiedzialnej za fizyczne programowanie mikrokontrolera.
W ten sposób można uruchamiać zewnętrzne narzędzia obsługujące różne interfejsy programujące. BASCOM-AVR przekazuje im plik wynikowy oraz zdefiniowane parametry.
Struktura programu w BASCOM-AVR
Typowy program w BASCOM-AVR zawiera następujące elementy:
- deklaracje – instrukcje takie jak
DimiDeclare, służące do definiowania zmiennych oraz procedur; - konfigurację – instrukcje rozpoczynające się od słowa
Config, odpowiedzialne za ustawienie portów i peryferiów; - dyrektywy kompilatora – polecenia rozpoczynające się od znaku dolara, używane między innymi do wyboru mikrokontrolera i częstotliwości zegara.
Podstawowa struktura programu może wyglądać tak:
$regfile = "m8def.dat" ' Plik definicji mikrokontrolera
$crystal = 8000000 ' Częstotliwość oscylatora: 8 MHz
Config Portb = Output ' Port B jako wyjście
Dim I As Byte ' Deklaracja zmiennej
Do
Portb = &B00000001
Waitms 500
Portb = &B00000000
Waitms 500
Loop
Najważniejsze elementy przykładu to:
- dyrektywa
$regfile– wskazuje plik z definicjami wybranego mikrokontrolera, w tym przypadku ATmega8; - dyrektywa
$crystal– określa częstotliwość taktowania potrzebną do prawidłowego działania funkcji czasowych i interfejsu UART; - instrukcja
Config– konfiguruje porty i peryferia; - instrukcja
Dim– deklaruje zmienne używane w programie.
Podstawy języka BASCOM
Deklaracje i typy danych
Do najczęściej używanych typów danych należą:
- Byte – 8-bitowa liczba całkowita bez znaku;
- Integer – 16-bitowa liczba całkowita ze znakiem;
- Word – 16-bitowa liczba całkowita bez znaku;
- Long – 32-bitowa liczba całkowita;
- Single – liczba zmiennoprzecinkowa pojedynczej precyzji.
Zmienne deklaruje się za pomocą instrukcji Dim:
Dim Licznik As Byte
Dim Temperatura As Integer
Dyrektywy kompilatora
Dyrektywy rozpoczynające się od znaku $ sterują pracą kompilatora. Do najważniejszych należą:
- dyrektywa
$regfile– wybiera plik definicji mikrokontrolera; - dyrektywa
$crystal– określa częstotliwość zegara mikrokontrolera; - dyrektywy
$hwstack,$swstacki$framesize– określają rozmiary stosów oraz obszaru ramek; - dyrektywa
$baud– ustawia prędkość transmisji interfejsu UART.
Konfiguracja portów wejścia i wyjścia
Porty mikrokontrolera można skonfigurować jako wejścia lub wyjścia:
Config Porta = Input
Config Portb = Output
Przykładowe operacje na portach wyglądają następująco:
Portb.0 = 1 ' Ustawienie bitu 0 portu B
Portb = &B10101010
If Pina.1 = 1 Then
' Reakcja na wysoki stan wejścia
End If
BASCOM-AVR udostępnia instrukcje wysokiego poziomu, a jednocześnie umożliwia bezpośrednią zmianę stanu pojedynczych bitów portów.
Obsługa liczników i opóźnień
Do odmierzania czasu można wykorzystać następujące mechanizmy:
- instrukcje
Wait,WaitmsiWaitus, - sprzętowe liczniki i timery mikrokontrolera,
- przerwania wywoływane w określonych odstępach czasu.
Prosty program migający diodą może korzystać z instrukcji Waitms. W bardziej wymagających aplikacjach lepiej użyć sprzętowego timera, ponieważ oczekiwanie blokujące zatrzymuje wykonywanie pozostałej części programu.
Obsługa peryferiów w BASCOM-AVR
Jedną z głównych zalet BASCOM-AVR są gotowe instrukcje i biblioteki upraszczające obsługę peryferiów mikrokontrolera.
Przetwornik analogowo-cyfrowy
Konfigurację przetwornika ADC upraszczają instrukcje Config oraz funkcje odczytu. Można określić tryb pracy, źródło napięcia odniesienia i preskaler, a następnie zapisywać wyniki pomiarów bezpośrednio w zmiennej.
Przykładowa konfiguracja i odczyt kanału ADC wyglądają tak:
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Start Adc
Dim Wynik As Word
Do
Wynik = Getadc(0) ' Odczyt kanału 0
' Dalsze przetwarzanie
Loop
Transmisja szeregowa UART
BASCOM-AVR oferuje prostą konfigurację interfejsu UART. Prędkość transmisji można określić dyrektywą $baud, a bufory skonfigurować odpowiednimi instrukcjami.
Podstawowy program wysyłający tekst przez UART może wyglądać następująco:
$regfile = "m8def.dat"
$crystal = 8000000
$baud = 9600
Config Serialin = Buffered , Size = 16
Config Serialout = Buffered , Size = 16
Print "Witaj z BASCOM!"
Instrukcja Print wysyła tekst przez UART. Dane można odbierać za pomocą instrukcji Input lub mechanizmu buforowania.
Pamięć EEPROM
BASCOM-AVR udostępnia instrukcje do zapisywania i odczytywania danych z wbudowanej pamięci EEPROM. Można w niej przechowywać ustawienia urządzenia, wartości kalibracyjne oraz informacje, które powinny pozostać dostępne po odłączeniu zasilania.
Do obsługi EEPROM służą polecenia Writeeeprom Zmienna, Adres oraz Readeeprom Zmienna, Adres.
Przykładowy projekt z migającą diodą LED
Przykład zakłada użycie mikrokontrolera ATmega8 taktowanego częstotliwością 8 MHz. Dioda LED jest podłączona do wyprowadzenia PB0 przez odpowiednio dobrany rezystor ograniczający prąd.
Kod źródłowy
Program cyklicznie włącza i wyłącza diodę co 500 ms:
$regfile = "m8def.dat"
$crystal = 8000000
Config Portb = Output
Do
Portb.0 = 1 ' Włączenie diody na PB0
Waitms 500
Portb.0 = 0 ' Wyłączenie diody
Waitms 500
Loop
Kompilowanie programu
Aby przygotować plik wynikowy, wykonaj następujące czynności:
- zapisz kod, na przykład w pliku
led.bas, - uruchom polecenie Compile, aby wygenerować plik z rozszerzeniem
.hex, - sprawdź komunikaty kompilatora wyświetlane w dolnej części okna programu.
Programowanie mikrokontrolera
Jeżeli programator jest obsługiwany bezpośrednio, wybierz polecenie Program → Send to Chip → Program lub użyj przypisanego skrótu klawiszowego. W przypadku programatora zewnętrznego sprawdź ustawienia External programmer i Use HEX file, a następnie uruchom zapis programu.
Przed zaprogramowaniem pamięci warto użyć funkcji Chip → Identify, aby sprawdzić połączenie i komunikację z mikrokontrolerem.
Przykładowy projekt z komunikacją UART
Poniższy program co sekundę wysyła do komputera bieżącą wartość licznika.
Kod źródłowy
Przykład wykorzystuje transmisję z prędkością 9600 bit/s:
$regfile = "m8def.dat"
$crystal = 8000000
$baud = 9600
Config Serialout = Buffered , Size = 16
Dim Licznik As Byte
Do
Print "Licznik = " ; Licznik
Incr Licznik
Waitms 1000
Loop
Po każdym wysłaniu wartości zmienna Licznik jest zwiększana o jeden.
Połączenie sprzętowe
Do komunikacji z komputerem należy przygotować następujące połączenia i ustawienia:
- podłącz interfejs USB–UART lub odpowiedni konwerter poziomów RS232,
- połącz wyprowadzenie TX mikrokontrolera z wejściem RX konwertera,
- połącz masę mikrokontrolera z masą konwertera,
- uruchom terminal szeregowy na komputerze i ustaw prędkość 9600 bit/s.
Symulowanie i debugowanie programu
BASCOM-AVR zawiera wbudowany symulator, który pozwala analizować działanie programu oraz wybranych urządzeń wejścia i wyjścia.
Najważniejsze możliwości symulatora to:
- wykonywanie programu krok po kroku,
- podgląd rejestrów, pamięci i zmiennych,
- symulowanie podstawowych urządzeń wejścia i wyjścia.
Dzięki tym funkcjom można:
- sprawdzić logikę programu przed przesłaniem go do mikrokontrolera,
- wykrywać błędy w obliczeniach i obsłudze warunków,
- analizować działanie przerwań oraz procedur.
Typowy proces pracy obejmuje kompilowanie, symulowanie, programowanie mikrokontrolera i testowanie aplikacji w docelowym układzie.
Typowe błędy i dobre praktyki
Problemy z programatorem
Do najczęstszych przyczyn problemów z programowaniem należą:
- nieprawidłowy typ programatora wybrany w menu Options → Programmer,
- brak zaznaczonej opcji Use HEX file podczas korzystania z programu zewnętrznego,
- nieodpowiedni tryb portu LPT,
- brak wspólnej masy między mikrokontrolerem a programatorem,
- uszkodzony lub nieprawidłowo podłączony przewód ISP,
- zbyt wysoka częstotliwość zegara programatora w stosunku do częstotliwości taktowania mikrokontrolera.
Diagnostykę warto rozpocząć od funkcji Chip → Identify, która pozwala sprawdzić, czy mikrokontroler jest prawidłowo wykrywany.
Niezgodność częstotliwości zegara
Jeśli wartość dyrektywy $crystal nie odpowiada rzeczywistej częstotliwości taktowania, funkcje czasowe i interfejs UART będą działać nieprawidłowo. Skutkiem może być niewłaściwa długość opóźnień lub błędna prędkość transmisji.
Podczas diagnostyki należy:
- sprawdzić ustawienia bitów konfiguracyjnych mikrokontrolera,
- ustalić, czy układ korzysta z wewnętrznego oscylatora, czy z zewnętrznego rezonatora kwarcowego,
- ustawić wartość
$crystalzgodnie z rzeczywistą częstotliwością zegara.
Zbyt mała ilość pamięci
Wersja demonstracyjna BASCOM-AVR ogranicza rozmiar generowanego kodu. Jeśli projekt przekracza dopuszczalny limit, można:
- usunąć nieużywane funkcje i biblioteki,
- uprościć kod oraz ograniczyć liczbę zmiennych,
- przejść na pełną wersję BASCOM-AVR.
Kiedy warto wybrać BASCOM-AVR?
Najważniejsze zalety BASCOM-AVR to:
- prosty język BASIC – zapewnia niski próg wejścia dla początkujących;
- rozbudowane biblioteki – ułatwiają obsługę popularnych peryferiów;
- zintegrowane środowisko – łączy edytor, kompilator, programator i symulator;
- dostępność materiałów edukacyjnych – obejmuje dokumentację, książki, kursy i przykłady projektów.
Do ograniczeń środowiska należą:
- zależność od systemu Windows – program jest przeznaczony głównie dla tej platformy;
- mniejsza popularność w zastosowaniach profesjonalnych – w wielu projektach częściej wykorzystuje się język C i kompilator AVR-GCC;
- limit wersji demonstracyjnej – ograniczenie rozmiaru kodu utrudnia rozwijanie większych aplikacji.
BASCOM-AVR sprawdza się szczególnie w następujących zastosowaniach:
- edukacji i nauce podstaw mikrokontrolerów,
- małych projektach hobbystycznych,
- szybkim tworzeniu prototypów,
- projektach wymagających wygodnej obsługi typowych peryferiów.
W rozbudowanych projektach wymagających maksymalnej wydajności, przenośności i pełnej kontroli nad sprzętem lepszym wyborem może być język C, kompilator AVR-GCC, system czasu rzeczywistego lub odpowiednie biblioteki HAL.
Źródła wiedzy i dalsza nauka
W dalszej nauce BASCOM-AVR mogą pomóc następujące materiały:
- książka „Programowanie mikrokontrolerów AVR w języku Bascom” Marcina Wiązani – omawia podstawy języka i praktyczne projekty;
- dokumentacja BASCOM-AVR – zawiera opis składni, dyrektyw, instrukcji i obsługiwanych mikrokontrolerów;
- materiały dotyczące peryferiów – przedstawiają przykłady obsługi ADC, UART, wyświetlaczy LCD, klawiatur i pamięci EEPROM;
- kursy i projekty praktyczne – oferują gotowe schematy, kody źródłowe i omówienia uruchamiania urządzeń.
Regularne tworzenie niewielkich projektów — od migającej diody, przez pomiar napięcia, aż po komunikację szeregową — pozwala stopniowo opanować środowisko i poznać specyfikę mikrokontrolerów AVR.

