Inhaltsverzeichnis:

Erste Schritte mit Bascom AVR - Gunook
Erste Schritte mit Bascom AVR - Gunook

Video: Erste Schritte mit Bascom AVR - Gunook

Video: Erste Schritte mit Bascom AVR - Gunook
Video: Erstes AVR Programm mit Bascom 2024, Juli
Anonim
Erste Schritte mit Bascom AVR
Erste Schritte mit Bascom AVR

Dies ist der Beginn einer Serie, in der Sie lernen, Ihren AVR-Mikrocontroller mit Bascom AVR zu programmieren.

Warum ich das tue.

Die meisten Programmbeispiele in dieser Serie können Sie mit Arduino erstellen.

Manche einfacher und manche schwieriger, aber am Ende laufen beide auf demselben Controller.

Aber die Art der Programmierung ist in jeder Entwicklungsumgebung anders. Arduino benötigt für alles außer den Grundfunktionen eine Bibliothek. Bascom arbeitet auch mit Bibliotheken, aber ich muss selten eine einbinden. Bei Arduino werden alle hardwarespezifischen Einstellungen über die Bibliotheken vorgenommen. Sie haben sehr wenig Einfluss auf die tatsächliche Leistung des Mikrocontrollers. Angefangen bei den Timern, die der Controller hat. mit arduino brauchst du wieder eine Bibliothek. Wenn Sie den Timer haben, bis er funktioniert, kann es sein, dass eine andere Bibliothek mit Ihren Einstellungen kollidiert. Bei bascom haben Sie freien Zugriff auf die komplette Hardware inklusive des von arduino belegten Bootsektors. Beispielsweise fragen Sie einige Bibliotheken bei bascom, welchen Timer Sie verwenden möchten. Auf der anderen Seite, da Arduino es sehr einfach macht, eine Bibliothek selbst zu erstellen, ist es natürlich eine Plattform, auf der neue Hardware und Sensoren normalerweise direkt eine Bibliothek haben. was bei bascom oft mit viel recherche verbunden ist und die funktionen, die normalerweise eine bibliothek übernehmen würde, muss dann mühsam in den programmcode eingearbeitet werden. aber gute nachrichten auch die bascom-Community ist sehr groß, deshalb gibt es für jede idee eine lösung.

Es hängt also teils vom Projekt ab, was für eine Entwicklungsumgebung verwendet wird und teils vom Know-how des Programmierers.

aber warum mache ich diese serie. Einerseits spart es viel Geld. Ich muss nicht für jedes Projekt ein Arduino-Board kaufen. Zum Beispiel: Ein noname Arduino uno kostet ca. 12 € der Controller der drauf ist kostet gerade mal 2,5 € mit dem minimalen Schaltungsaufwand für eine stabile Funktion kostet er ca. 4 €. Andererseits steht Ihnen die komplette Auswahl an unterstützten AVR-Chips zur Verfügung. atmegas 8 bis 256 und attiny 8 bis 2313 und viele xmega-Typen, mit denen ich keine Erfahrung habe. Wenn Sie nur ein Servo und einen Ultraschallsensor verwenden möchten, der beispielsweise eine Hand erkennen kann, und dann einen Deckel eines Mülleimers öffnen, können Sie den kleinstmöglichen Chip verwenden. Es gibt also viele Gründe, eine zweite Sprache zu lernen.

Also lasst uns anfangen

Lieferungen

Dies ist eine Liste der minimal erforderlichen Teile für einen stabilen Betrieb des Chips und die Programmierung.

Steckbrett zum Testen

Atmega 8-16PU (besser kaufen Sie 2 oder 3, wenn Sie sie versehentlich töten)

7805 5V Spannungsregler

10Kohm Widerstand

100nF Filmkondensator

10µF Elektrolytkondensator

100µF Elektrolytkondensator

einige Drähte für Steckbrett

Windows-PC 7/8/8.1/10

ISP-Programmer (ich werde hier den USBasp verwenden, den Sie für wenig Geld bei Amazon kaufen können)

Bascom AVR (Sie können hier eine DEMO herunterladen. Alle Funktionen sind freigeschaltet, aber Sie können Code nur bis zu einer Größe von 4Kb schreiben, die für viel Code ausreicht).

Optionale Teile:

LED´s mit Widerständen

Druckschalter

projektspezifische Teile

Schritt 1: Installation von Bascom und Setup

Installation von Bascom und Setup
Installation von Bascom und Setup
Installation von Bascom und Setup
Installation von Bascom und Setup
Installation von Bascom und Setup
Installation von Bascom und Setup

Laden Sie die Datei herunter und installieren Sie Bascom AVR. Installieren Sie alle Teile davon, einschließlich des letzten Kontrollkästchens nach der Installation.

Danach starten Sie Ihren PC neu, sonst startet bascom nicht.

Nach dem Neustart starten Sie bascom.

Gehen Sie zu Optionen -> Programmer und wählen Sie USBasp aus der Liste, speichern Sie die Einstellungen und schließen Sie Bascom.

Verwenden Sie dieses Programm, um usbasp zu installieren. Starten Sie danach Ihren PC neu. Verbinden Sie nun den USBasp mit Ihrem PC und starten Sie den Gerätemanager. Bei den libusb-Geräten sollte USBasp erscheinen.

Stat Bascom erneut und erstellen Sie eine neue Datei. Speichern Sie es auf Ihrem PC und drücken Sie die F7-Taste auf Ihrer Tastatur.

Der Compiler startet und kompiliert das leere Programm. Jetzt können Sie die Funktionalität des Programmiergeräts testen.

Drücken Sie die F4-Taste auf Ihrer Tastatur, um das Programmierfenster zu starten. Gehen Sie nun zu Chip -> Identifizieren, um eine Interaktion zu starten. Die LED`s vom USBasp sollten nun kurz blinken. Sie sollten eine Meldung erhalten, wie die Chip-ID FFFFFF konnte das Gerät nicht lesen. Das ist ein gutes Zeichen, dass der Programmierer funktioniert, aber keinen Chip gefunden hat.

Jetzt können wir mit dem Bau der ersten Schaltung beginnen.

Schritt 2: Schauen wir uns den Chip genauer an

Schauen wir uns den Chip genauer an
Schauen wir uns den Chip genauer an

Wenn Sie sich die Pinbelegung des Chips ansehen, scheint der Chip keine Ähnlichkeit mit dem Arduino-Board zu haben. Klar, wir verwenden einen Atmega8 und auf dem Arduino uno ist ein Atmega328. Aber die Pinbelegung ist fast die gleiche, aber der Chip des Arduino Uno Boards hat mehr Funktionen. Hier die Namen der Pins. VCC und GND sind die Pins für die Stromversorgung.

AREF und AVCC sind Pins für die Referenzspannung und Stromversorgung für den Analog-Digital-Wandler.

PB 0-7 PC 0-6 PD 0-7 sind Mehrzweck-Eingangs-Ausgangs-Pins mit Mehrfachbelegung.

Reset-Pin ist das, was der Name sagt. Um den Chip neu zu starten. Die Zeile über dem Reset-Namen bedeutet Negation. Das heißt, um den Chip zurückzusetzen, müssen Sie ihn auf 0V ziehen.

Für die folgenden Pins kommen in Kürze separate Anleitungen.

RXD TXD sind Hardware-Pins für die serielle UART-Kommunikation.

INT0 INT1 sind Hardware-Interrupt-Pins

XCK /T0 UART Taktquelle / Timer/Counter0 Taktquelle

XTAL /TOSC-Pins sind für einen externen Quarz bis 16MHz (verschiedene Modelle bis 20MHz) /Kristall-Pins für einen internen RTC

T1 ist ähnlich zu T0

AIN-Pins sind für den analogen Komparator

ICP1 ist ähnlich zu T0/T1

OC1A ist der Hardware-Ausgangspin für PWM-Timer1-Kanal A

SS / OC2 Chipauswahlpin für SPI / wie OC1B aber Kanal B

MOSI MISO SCK/OC2 sind die Hardware-SPI-Pins und die Pins für die Programmierung des /PWM-Ausgangstimers2

ADC0 bis ADC5 sind die analogen Eingänge

SDA SCL sind die Pins für Hardware I2C

Der normale Chip kann von 4, 5V bis 5, 5V arbeiten, der Atmega 8L kann mit viel niedrigerer Spannung arbeiten.

Sie sehen, selbst dieser Chip kann mehr, als ein Arduino Uno nicht kann. Aber der Arduino kann es auch, man muss ihn nur programmieren.

Schritt 3: Der erste Stromkreis

Der erste Kreislauf
Der erste Kreislauf
Der erste Kreislauf
Der erste Kreislauf

Jetzt ist es an der Zeit, Ihre erste Schaltung zu bauen.

Was ist normalerweise die erste Schaltung? Rechts! Lassen Sie uns eine LED blinken.

Die LED ist mit PB0 verbunden. Der Widerstand neben dem Chip hat 10k Ohm.

Der Widerstand neben der LED hat 470 Ohm.

Nun können Sie den USBasp wie im Bild gezeigt mit dem Atmega verbinden.

Aber bevor Sie den Strom einschalten, lassen Sie uns das Programm schreiben.

Schritt 4: Schreiben Sie das erste Programm

Schreiben Sie das erste Programm
Schreiben Sie das erste Programm

Erstellen Sie eine neue Datei in Bascom und geben Sie den folgenden Text ein.

$regfile "m8def.dat"

$crystal = 1000000 config portb.0 = Ausgabe do portb.0 = 1 warten 1 portb.0 = 0 warten 1 Schleife

Danach kompilieren Sie es, indem Sie F7 auf Ihrer Tastatur drücken.

Jetzt können wir den Chip durch Drücken von F4 programmieren. Das Programmierfenster erscheint. Jetzt ist es an der Zeit, den Strom vom Steckbrett aus einzuschalten. Sie sollten etwas zwischen 6 und 12 Volt anlegen.

Gehen Sie nun zu Chip -> Autoprogramm. Wenn sich das Programmierfenster automatisch schließt, war die Programmierung erfolgreich.

Die LED sollte im Sekundentakt blinken.

Schauen Sie sich das Programm nun genauer an, um die Syntax zu verstehen.

$regfile "m8def.dat"

$kristall = 1000000

mit $regfile teilen wir dem Compiler den Typ des verwendeten Chips mit, der Name des Arduino-Chips wäre "m328pdef.dat"

mit $crystal teilen wir ihm die CPU-Geschwindigkeit von etwa 1MHz mit.

config portb.0 = Ausgang

das bedeutet, dass PB0 als Ausgang fungieren sollte.

Die Abkürzung PB0 bedeutet übrigens Port B Bit 0. Der Chip ist in mehrere Ports aufgeteilt. Jeder Port erhält zur eindeutigen Identifizierung einen Buchstaben. und jedem Portpin ein Bit von 0 bis 7. Ich kann zum Beispiel ein komplettes Byte in das Port-Ausgangsregister schreiben, das über die einzelnen Port-Pins ausgegeben wird.

tun

Schleife

Dies ist, was in Arduino die void-Schleife-Anweisung bedeutet. Alle zwischen diesen beiden Befehlen werden für immer wiederholt. (mit einigen Ausnahmen aber dazu später mehr)

Portb.0 = 1

warte 1 portb.0 = 0 warte 1

Hier erzeugen wir das Blinken der LED.

Portb.0 = 1 weist den Chip an, den Ausgang PB0 auf 5V. zu schalten

der Befehl wait 1 lässt den Chip eine Sekunde warten. Wenn Sie die LED schneller schalten möchten, müssen Sie jetzt den wait-Befehl durch waitms ersetzen. Sie können jetzt eine Zeit in Millisekunden eingeben, z. waitms 500. (waitus bedeutet warten in Nanosekunden)

Portb.0 = 0 weist den Chip an, den Ausgang PB0 auf 0V zu schalten.

Schritt 5: Fügen Sie eine Schaltfläche hinzu, um Eingaben zu verwenden

Fügen Sie eine Schaltfläche hinzu, um Eingaben zu verwenden
Fügen Sie eine Schaltfläche hinzu, um Eingaben zu verwenden

Jetzt fügen wir eine Taste hinzu, um die LED aufleuchten zu lassen, wenn die Taste gedrückt wird.

Fügen Sie die Schaltfläche wie im Bild gezeigt ein.

Geben Sie nun das folgende Programm ein.

$regfile "m8def.dat"

$crystal = 1000000 config portb.0 = Output config portd.7 = Input Portd.7 = 1 do if pind.7 = 0 then portb.0 = 1 else portb.0 = 0 loop

Wenn Sie dieses Programm auf den Chip hochladen, leuchtet die LED nur auf, wenn die Taste gedrückt wird. Aber warum?

das Programm startet identisch wie das letzte bis

config portd.7 = Eingabe. Das heißt, der mit dem Taster verbundene Pin PD7 fungiert als Eingang.

Portd.7 = 1 schaltet den Pin nicht auf High, aktiviert aber den internen Pull-Up-Widerstand des Atmega.

Die if-Anweisung sieht etwas seltsam aus, wenn Sie an Arduino gewöhnt sind.

Wenn Sie die if-Anweisung verwenden, müssen Sie die "then"-Anweisung verwenden. In diesem Beispiel wird die if-Anweisung für Einzelbefehlsoperationen verwendet. Wenn Sie mehr Befehle verwenden möchten, müssen Sie es so schreiben.

wenn pind.7=0 dann

portb.0=1 etwas Code etwas Code etwas Code sonst portb.0 = 0 end if

für diese Verwendung der if-Anweisung müssen Sie die "end if"-Anweisung am Ende verwenden.

was noch wichtig ist. Vielleicht hast du es schon gesehen. die Eingänge werden nicht mit portx.x abgefragt, sondern mit pinx.x. Das kannst du dir leicht merken. Ausgänge haben das "o" (Port) im Wort und Eingänge haben das "i" (Pin).

Jetzt sind Sie an der Reihe, ein wenig herumzuspielen.

Mein nächstes anweisbares wird bald kommen (Standardanweisungen wie while, select case, for und variables.)

Wenn Sie mein instructable mögen und mehr wollen, sagen Sie mir in den Kommentaren.

Empfohlen: