Inhaltsverzeichnis
AVR Bascom Basic
Bascom ist eine komplette Basic-Entwicklungsumgebung für die verschiedensten AVR Controller.Er bietet ein ungeheuer großes Leistungsvermögen und besonders anwenderfreundliche Entwicklungsumgebung. Eine kostenlose Version, die bis zu 4 KB (das ist schon einiges bei einem Controller) keinerlei Einschränkungen besitzt, findet man auf der Seite des Herstellers
Nach dem Download müssen alle Dateien entpackt und das SETUP-Programm aufgerufen werden. Danach steht ein Basic-Entwicklungssystem zur Verfügung das alles beinhaltet was für die AVR-Programmierung notwendig ist. Zum Beispiel: Editor mit Befehlsvorschlag, Simulator, Terminalprogram, Avr-FuseBit Einstellung, integriertem Assembler, eingebauten Programmer zur Übertragung des Programmcode usw.
Als erstes solltet ihr unter dem Menü Options / Compiler den Zielprozessor angeben. Fast alle gängigen AVR Controller können programmiert werden. In diesem Dialog können auch noch viele weitere Einstellungen vorgenommen werden. Eigentlich ist das alles selbsterklärend.
http://www.shop.robotikhardware.de/shop/catalog/images/artikelbilder/bascom/bascom.gif
Befehlsübersicht von Bascom
Decision and structures: IF, THEN, ELSE, ELSEIF, END IF, DO, LOOP, WHILE, WEND, UNTIL, EXIT DO, EXIT WHILE, FOR, NEXT, TO, STEP, EXIT FOR, ON .. GOTO/GOSUB, SELECT, CASE. Input and output: PRINT, INPUT, INKEY, PRINT, INPUTHEX, LCD, UPPERLINE, LOWERLINE, DISPLAY ON/OFF, CURSOR ON/OFF/BLINK/NOBLINK, HOME, LOCATE, SHIFTLCD LEFT/RIGHT, SHIFTCURSOR LEFT/RIGHT, CLS, DEFLCDCHAR, WAITKEY, INPUTBIN, PRINTBIN, OPEN, CLOSE, DEBOUNCE, SHIFTIN, SHIFTOUT, GETATKBD, SPC, SERIN, SEROUT Numeric functions: AND, OR, XOR, INC, DEC, MOD, NOT, ABS, BCD, LOG, EXP, SQR, SIN,COS, TAN,ATN, ATN2, ASIN, ACOS, FIX, ROUND, MOD, SGN, POWER, RAD2DEG, DEG2RAD, LOG10, TANH, SINH, COSH. I2C: I2CSTART, I2CSTOP, I2CWBYTE, I2CRBYTE, I2CSEND and I2CRECEIVE. 1WIRE: 1WWRITE, 1WREAD, 1WRESET, 1WIRECOUNT, 1WSEARCHFIRST, 1WSEARCHNEXT. SPI: SPIINIT, SPIIN, SPIOUT, SPIMOVE. Interrupt programming: ON INT0/INT1/TIMER0/TIMER1/SERIAL, RETURN, ENABLE, DISABLE, COUNTERx, CAPTUREx, INTERRUPTS, CONFIG, START, LOAD. Bit manipulation: SET, RESET, ROTATE, SHIFT, BITWAIT, TOGGLE. Variables: DIM, BIT , BYTE , INTEGER , WORD, LONG, SINGLE, DOUBLE, STRING , DEFBIT, DEFBYTE, DEFINT, DEFWORD. Miscellaneous: REM, ' , SWAP, END, STOP, CONST, DELAY, WAIT, WAITMS, GOTO, GOSUB, POWERDOWN, IDLE, DECLARE, CALL, SUB, END SUB, MAKEDEC, MAKEBCD, INP,OUT, ALIAS, DIM , ERASE, DATA, READ, RESTORE, INCR, DECR, PEEK, POKE, CPEEK, FUNCTION, READMAGCARD, BIN2GRAY, GRAY2BIN, CRC8, CRC16, CHECKSUM. Compiler directives: $INCLUDE, $BAUD and $CRYSTAL, $SERIALINPUT, $SERIALOUTPUT, $RAMSIZE, $RAMSTART, $DEFAULT XRAM, $ASM-$END ASM, $LCD, $EXTERNAL, $LIB. String manipulation: STRING, SPACE, LEFT, RIGHT, MID, VAL, HEXVAL, LEN, STR, HEX, LTRIM, RTRIM, TRIM, LCASE, UCASE, FORMAT, FUSING, INSTR.
Erläuterung grundlegender Bascom-Funktionen
Das berühmte Hello World Programm in Bascom
Da bei einem Controllerboard gewöhnlich kein Bildschirm zur Verfügung steht, verbindet man das Board über einfaches RS232 Kabel (nur 3 Drähte sind notwendig) mit dem PC. Ein Terminalprogramm zeigt nun auf dem Bildschirm alle Ausgaben des Boardes (z.B. des Print Befehles) an. Eine Methode die zum Debuggen von Programmen oft genutzt wird.
$regfile = "m32def.dat" 'Die Anweisung bestimmt Ccntrollertyp, hier AVR Mega 32 $framesize = 32 'Stackanweisungen, die eigentlich nur bei größeren Programmen $swstack = 32 'wirklich nötig werden $hwstack = 32 $crystal = 16000000 'Die Frequenz des verwendeten Quarzes $baud = 9600 'Die Baudrate für RS232 Ausgabe. 'Sie muss auch bei PC Terminalprogramm identisch sein do Print "**** RN-CONTROL sagt Hello World *****" wait 1 loop
Einen I/O Port umschalten
Die wohl wichtigste Aufgabe beim Controller ist die Programmierung der Ports. Also das bestimmen des Ausgangspegels eines Controllerpins. Bascom verfügt über zwei Möglichkeiten die Ports zu beeinflussen, die sogenannten High-Level Befehle und die übliche Registerzuweisung wie sie in C üblich ist. Zuerst ein Programm mit High-Level Anweisung. Ein Pin wird als Ausgang definiert und dann fortlaufenden ein und ausgeschaltet. ISt übe rein Wiederstand eine LED an diesem Controllerpin angschlossen (so im Falle von RN-Control), so ergibt sich ein blinken
$regfile = "m32def.dat" 'Die Anweisung bestimmt Ccntrollertyp, hier [[AVR]] Mega 32 $framesize = 32 'Stackanweisungen, die eigentlich nur bei größeren Programmen $swstack = 32 'wirklich nötig werden $hwstack = 32 $crystal = 16000000 'Die Frequenz des verwendeten Quarzes $baud = 9600 'Die Baudrate für RS232 Ausgabe. 'Sie muss auch bei PC Terminalprogramm identisch sein Config Portc.0 = Output 'Ein Pin wird aus Ausgang konfiguriert PC0 (also Pin0 von Port C) do Portc.0 = 1 'Pin wird auf High, also 5V geschaltet Waitms 100 Portc.0 = 0 'Pin wird auf Low, also 0V geschaltet Waitms 100 loop
Man kann das ganze noch etwas übersichtlicher gestalten indem man dem Port-Pin im Programmcode eine andere Bezeichnung gibt, z.B. LED wie in dem folgenden Beispiel. Durch den Alias Befehl wird das ganze Programm wesentlich klarer, so das einige Kommentarzeilen durchaus entfallen könnten. Man sollte sich daher angewöhnen den Alias Befehl auch zu nutzen
$regfile = "m32def.dat" 'Die Anweisung bestimmt Ccntrollertyp, hier [[AVR]] Mega 32 $framesize = 32 'Stackanweisungen, die eigentlich nur bei größeren Programmen $swstack = 32 'wirklich nötig werden $hwstack = 32 $crystal = 16000000 'Die Frequenz des verwendeten Quarzes $baud = 9600 'Die Baudrate für RS232 Ausgabe. 'Sie muss auch bei PC Terminalprogramm identisch sein Config Portc.0 = Output 'Ein Pin wird aus Ausgang konfiguriert PC0 (also Pin0 von Port C) Led Alias Portc.0 do Led = 1 'Pin wird auf High, also 5V geschaltet Waitms 100 Led = 0 'Pin wird auf Low, also 0V geschaltet Waitms 100 loop
Das nachfolgende Beispiel kommt ohne den High-Level Befehl CONFIG aus, indem direkt in das Datenrichtungsregiste rdes Controllers geschrieben wird. In diesem Register steht jedes Bit für den Betriebsmode eines Pins. Die 1 bedeutet der Pin ist auf Ausgang geschaltet, 0 bedeutet Eingang. Diese Schreibweise hat den Nachteil das sie ein wenig unübersichtlicher ist, man kann sehr schnell Pin´s verwechseln. Vorteil ist allerdings das alle 8 Pin´s eines Portes gleichzeitig mit einer Zuweisung definiert werden können. Es gibt daher Programmierer die diese Methode bevorzugen, insbesondere wenn Sie auch Controller in C programmieren. Das Ergebnis ist in jedem Fall gleich: ein Blinklicht
$regfile = "m32def.dat" 'Die Anweisung bestimmt Ccntrollertyp, hier [[AVR]] Mega 32 $framesize = 32 'Stackanweisungen, die eigentlich nur bei größeren Programmen $swstack = 32 'wirklich nötig werden $hwstack = 32 $crystal = 16000000 'Die Frequenz des verwendeten Quarzes $baud = 9600 'Die Baudrate für RS232 Ausgabe. 'Sie muss auch bei PC Terminalprogramm identisch sein DDRC = &b00000001 'Port PC0 wird als Ausgang definiert, man hätte hier auch 'DDRC =1 schreiben können. Man verwendet aber oft die Bitdarstellung 'um alle 8 Bit besser überschauen zu können do Portc.0 = 1 'Pin wird auf High, also 5V geschaltet Waitms 100 Portc.0 = 0 'Pin wird auf Low, also 0V geschaltet Waitms 100 loop
Siehe auch
- Bascom - Erstes Programm in den AVR Controller übertragen
- RN-Control
- RNBFRA-Board
- Atmel
- RN-Board FAQ-Seite mit wichtigen Einstiegstips
- Sourcevergleich - GCC und Bascom
- Bascom Inside
Weblinks
- Niederländischer Hersteller MCSELEC
- Bezugsquelle in Deutschland u.a. Robotikhardware.de
- Bauanleitungen zu Experimentier- und Roboterboards
- RN-Timer Windows Programm zur Timer-Berechnung
Literatur
- Programmieren der AVR RISC Mikrocontroller mit BASCOM-AVR; 2. Auflage
- Bascom–AVR, Autor M.Meissner - Beschreibung der Bascom IDE
- AVR-Microcontroller Lehrbuch – Ein tieferer Einstieg in Bascom und AT-MEGA8 und ähnliche AVR-Controller
- BASCOM-AVR Sprachbefehle - Ein umfangreiches Werk welches alle Befehle beschreibt
- Mega16 Programmierung am Beispiel des RNBFRA-Boards