Spisu treści:

Pierwsze kroki z Bascom AVR: 5 kroków
Pierwsze kroki z Bascom AVR: 5 kroków

Wideo: Pierwsze kroki z Bascom AVR: 5 kroków

Wideo: Pierwsze kroki z Bascom AVR: 5 kroków
Wideo: bascom podstawy 2024, Lipiec
Anonim
Pierwsze kroki z Bascom AVR
Pierwsze kroki z Bascom AVR

To początek serii, w której nauczysz się programowania mikrokontrolera AVR za pomocą Bascom AVR.

Dlaczego to robię.

Większość próbek programów z tej serii można wykonać za pomocą Arduino.

Niektóre łatwiejsze, inne trudniejsze, ale w końcu oba będą działały na tym samym kontrolerze.

Ale sposób programowania jest inny w każdym środowisku programistycznym. Arduino potrzebuje biblioteki do wszystkiego oprócz podstawowych funkcji. Bascom współpracuje również z bibliotekami, ale rzadko muszę je dołączać. W Arduino wszystkie ustawienia specyficzne dla sprzętu są dokonywane za pośrednictwem bibliotek. masz bardzo mały wpływ na rzeczywistą moc mikrokontrolera. Zaczynając od timerów, które posiada sterownik. z arduino znów potrzebujesz biblioteki. jeśli masz zegar, dopóki nie zadziała, może to być inna biblioteka kolidująca z twoimi ustawieniami. W bascom masz bezpłatny dostęp do całego sprzętu, w tym do sektora rozruchowego zajmowanego przez arduino. na przykład niektóre biblioteki w bascom pytają, którego timera chcesz użyć. z drugiej strony, ponieważ arduino bardzo ułatwia samodzielne tworzenie biblioteki, naturalnie sprawia, że jest to platforma, na której nowy sprzęt i czujniki zwykle mają bibliotekę bezpośrednio. to, co często wiąże się z wieloma badaniami w bascom i funkcjami, które normalnie przejęłaby biblioteka, musi być następnie skrupulatnie wkomponowana w kod programu. ale dobra wiadomość, społeczność bascom jest również bardzo duża, dlatego istnieje rozwiązanie dla każdego pomysłu.

Zależy to więc częściowo od projektu, co jest używane w środowisku programistycznym, a częściowo od know-how programisty.

ale dlaczego robię tę serię. z jednej strony oszczędza dużo pieniędzy. Nie muszę kupować płytki arduino do każdego projektu. Na przykład: Noname Arduino uno kosztuje około 12 €, kontroler, który się na nim znajduje, kosztuje tylko 2,5 € przy minimalnych obwodach wymaganych do stabilnej funkcji, kosztuje około 4 €. z drugiej strony masz pełny wybór obsługiwanych chipów avr. atmegas 8 do 256 i attiny 8 do 2313 oraz wiele typów xmega o których nie mam doświadczenia. Jeśli chcesz po prostu użyć serwa i czujnika ultradźwiękowego, który może rozpoznać np. rękę, a następnie otworzyć wieczko kosza na śmieci, możesz użyć najmniejszego możliwego chipa. Jest więc wiele powodów, aby nauczyć się drugiego języka.

Więc zacznijmy

Kieszonkowe dzieci

Jest to lista minimalnych części wymaganych do stabilnej pracy układu i programowania.

Deska do krojenia chleba do testów

Atmega 8-16PU (lepiej kupić 2 lub 3, jeśli zabijesz je przez pomyłkę)

7805 Regulator napięcia 5V

Rezystor 10Kohm

Kondensator foliowy 100nF

Kondensator elektrolityczny 10µF

Kondensator elektrolityczny 100µF

trochę przewodów do płytki stykowej

Komputer z systemem Windows 7/8/8.1/10

ISP Programmer (użyję tutaj USBasp można go kupić w amazon za niewielkie pieniądze)

Bascom AVR (możesz pobrać tutaj DEMO. Wszystkie funkcje są odblokowane, ale możesz pisać kod tylko do rozmiaru 4Kb, który wystarczy na dużo kodu).

Części opcjonalne:

diody LED z rezystorami

przełączniki wciskane

części specyficzne dla projektu

Krok 1: Instalacja Bascom i konfiguracja

Instalacja Bascom i konfiguracja
Instalacja Bascom i konfiguracja
Instalacja Bascom i konfiguracja
Instalacja Bascom i konfiguracja
Instalacja Bascom i konfiguracja
Instalacja Bascom i konfiguracja

Pobierz plik i zainstaluj Bascom AVR. Zainstaluj wszystkie jego części, w tym ostatnie pole wyboru po instalacji.

Po tym zrestartuj komputer, w przeciwnym razie bascom się nie uruchomi.

Po ponownym uruchomieniu uruchom bascom.

Wejdź w Opcje -> Programator i wybierz z listy USBasp, zapisz ustawienia i zamknij Bascom.

Użyj tego programu, aby zainstalować usbasp. Następnie ponownie uruchom komputer. Teraz podłącz USBasp do komputera i uruchom menedżera urządzeń. Na urządzeniach libusb powinien pojawić się USBasp.

Stat Bascom ponownie i utwórz nowy plik. Zapisz go na komputerze i naciśnij przycisk F7 na klawiaturze.

Kompilator uruchamia się i kompiluje pusty program. Teraz możesz przetestować funkcjonalność programatora.

Naciśnij przycisk F4 na klawiaturze, aby uruchomić okno programatora. Teraz przejdź do chip -> zidentyfikuj, aby rozpocząć interakcję. Diody LED z USBasp powinny teraz krótko migać. Powinieneś otrzymać komunikat typu chip Id FFFFFF nie mógł odczytać urządzenia. To dobry znak, że programator działa, ale nie znalazł chipa.

Teraz możemy przystąpić do budowy pierwszego obwodu.

Krok 2: Przyjrzyjmy się bliżej chipowi

Przyjrzyjmy się bliżej chipowi
Przyjrzyjmy się bliżej chipowi

Jeśli spojrzysz na pinout chipa, wydaje się, że chip nie ma podobieństwa do płyty arduino. Jasne, używamy Atmega8, a na Arduino uno jest Atmega328. Ale Pinout jest prawie taki sam, ale układ płyty Arduino Uno ma więcej funkcji. Tutaj nazwy szpilek. VCC i GND to piny do zasilania.

AREF i AVCC to piny napięcia odniesienia i zasilania przetwornika analogowo-cyfrowego.

PB 0-7 PC 0-6 PD 0-7 są pinami wyjściowymi ogólnego przeznaczenia z wieloma zajętościami.

reset pin jest tym, co mówi nazwa. Aby ponownie uruchomić chip. Linia nad nazwą resetowania oznacza negację. Oznacza to, że aby zresetować układ, musisz go obniżyć do 0V.

Dla poniższych szpilek oddzielna instrukcja już wkrótce.

RXD TXD to piny sprzętowe do komunikacji szeregowej UART.

INT0 INT1 to szpilki przerwań sprzętowych

XCK /T0 Źródło zegara UART / Timer/Licznik0 Źródło zegara

Piny XTAL /TOSC są dla zewnętrznego kryształu do 16 MHz (różne modele do 20 MHz) / Piny kryształu dla wewnętrznego zegara RTC

T1 jest podobny do T0

Piny AIN są dla komparatora analogowego

ICP1 jest podobny do T0/T1

OC1A to sprzętowy pin wyjściowy dla kanału A PWM timer1

Pin wyboru układu SS/OC2 dla SPI / jak OC1B, ale kanał B

MOSI MISO SCK/OC2 to sprzętowe piny SPI i piny do programowania / timer wyjścia PWM2;

ADC0 do ADC5 to wejścia analogowe

SDA SCL to piny do sprzętu I2C

Normalny układ może pracować od 4, 5 V do 5, 5 V, Atmega 8L może pracować ze znacznie niższym napięciem.

Widzisz, że nawet ten układ może zrobić więcej niż Arduino Uno wydaje się nie być. Ale Arduino też to potrafi, wystarczy go zaprogramować.

Krok 3: Pierwszy obwód

Pierwszy obwód
Pierwszy obwód
Pierwszy obwód
Pierwszy obwód

Teraz nadszedł czas, aby zbudować swój pierwszy tor.

Jaki jest typowy pierwszy obwód? Dobrze! Migajmy diodą LED.

Dioda LED jest połączona z PB0. Rezystor obok układu ma 10k Ohm.

Rezystor obok diody LED ma 470 Ohm.

Teraz możesz połączyć USBasp z Atmegą jak na zdjęciu.

Ale zanim włączysz zasilanie, napiszmy program.

Krok 4: Napisz pierwszy program

Napisz pierwszy program
Napisz pierwszy program

Utwórz nowy plik w Bascom i wpisz następujący tekst.

$regfile "m8def.dat"

$crystal = 1000000 config portb.0 = wyjście do portb.0 = 1 czekaj 1 portb.0 = 0 czekaj 1 pętla

następnie skompiluj go, naciskając F7 na klawiaturze.

Teraz możemy zaprogramować chip, naciskając F4. Pojawi się okno programatora. Teraz czas włączyć zasilanie z płytki stykowej. Powinieneś zastosować coś między 6 a 12 woltami.

Teraz przejdź do chip -> autoprogram. Jeśli okno programatora zamknie się automatycznie, programowanie zakończyło się sukcesem.

Dioda powinna migać z częstotliwością jednej sekundy.

Teraz przyjrzyj się bliżej programowi, aby zrozumieć składnię.

$regfile "m8def.dat"

$kryształ = 1000000

z $regfile mówimy kompilatorowi o typie używanego układu, nazwa układu Arduino będzie brzmiała „m328pdef.dat”

z $crystal podajemy mu prędkość procesora około 1MHz.

config portb.0 = Wyjście

oznacza to, że PB0 powinien działać jako wyjście.

Nawiasem mówiąc, skrót PB0 oznacza port B bit 0. Układ jest podzielony na kilka portów. Każdy port otrzymuje literę w celu jednoznacznej identyfikacji. a każdy portpin trochę od 0 do 7. Na przykład mogę zapisać pełny bajt do rejestru wyjściowego portu, który zostanie wyprowadzony przez poszczególne piny portu.

robić

pętla

To właśnie oznacza w Arduino instrukcja void loop. Wszystko pomiędzy tymi dwoma poleceniami będzie się powtarzać w nieskończoność. (z pewnymi wyjątkami, ale później o tym więcej)

Portb.0 = 1

czekaj 1 portb.0 = 0 czekaj 1

Tutaj generujemy mruganie diody.

Portb.0 = 1 mówi chipowi, aby przełączył wyjście PB0 na 5V

komenda wait 1 pozwala chipowi czekać przez jedną sekundę. Jeśli chcesz szybciej przełączać diody musisz zastąpić komendę wait komendą waitms teraz możesz wpisać jakiś czas teraz w milisekundach np. waitms 500. (waitus oznacza czekać w nanosekundach)

Portb.0 = 0 mówi chipowi, aby przełączył wyjście PB0 na 0V.

Krok 5: Dodaj przycisk, aby użyć wejść

Dodaj przycisk, aby użyć wejść
Dodaj przycisk, aby użyć wejść

Teraz dodajemy przycisk, który zapala diodę po naciśnięciu przycisku.

Włóż przycisk, jak pokazano na rysunku.

teraz wpisz następujący program.

$regfile "m8def.dat"

$crystal = 1000000 config portb.0 = wyjście config portd.7 = wejście Portd.7 = 1 zrób jeśli pind.7 = 0 to portb.0 = 1 w przeciwnym razie portb.0 = pętla 0

Jeśli wgrasz ten program do chipa, dioda zapali się dopiero po naciśnięciu przycisku. Ale dlaczego?

program zaczyna się identycznie jak poprzedni do

config portd.7 = wejście. Oznacza to, że pin PD7 połączony z przyciskiem działa jako wejście.

Portd.7=1 nie przełącza pinu w stan wysoki, ale aktywuje wewnętrzny rezystor podciągający Atmegi.

Wyrażenie if wygląda nieco dziwnie, jeśli jesteś przyzwyczajony do arduino.

jeśli używasz instrukcji if, musisz użyć instrukcji "then". W tym przykładzie instrukcja if jest używana do wykonywania pojedynczych poleceń. Jeśli chcesz używać więcej poleceń, musisz napisać to w ten sposób.

jeśli pin.7=0 to

portb.0=1 jakiś kod jakiś kod inny kod inny portb.0 = 0 end if

dla tego użycia instrukcji if musisz użyć instrukcji "end if" na końcu.

co jest nadal ważne. Może już to widziałeś. wejścia nie są odpytywane za pomocą portx.x, ale za pomocą pinx.x. Możesz to łatwo zapamiętać. Wyjścia mają w słowie "o" (port), a wejścia mają "i" (pin).

Teraz twoja kolej, aby się trochę pobawić.

Wkrótce pojawi się moja następna instrukcja (standardowe instrukcje, takie jak while, select case, for i zmienne).

Jeśli podoba Ci się mój instruktaż i chcesz więcej, powiedz mi w komentarzach.

Zalecana: