<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
		<id>https://rn-wissen.de/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Hackgreti</id>
		<title>RN-Wissen.de - Benutzerbeiträge [de]</title>
		<link rel="self" type="application/atom+xml" href="https://rn-wissen.de/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Hackgreti"/>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Spezial:Beitr%C3%A4ge/Hackgreti"/>
		<updated>2026-04-11T16:11:08Z</updated>
		<subtitle>Benutzerbeiträge</subtitle>
		<generator>MediaWiki 1.25.1</generator>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Bascom&amp;diff=12510</id>
		<title>Bascom</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Bascom&amp;diff=12510"/>
				<updated>2007-07-28T06:48:39Z</updated>
		
		<summary type="html">&lt;p&gt;Hackgreti: /* Sonstiges */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==AVR Bascom Basic==&lt;br /&gt;
&lt;br /&gt;
Bascom ist eine komplette Basic-Entwicklungsumgebung für die verschiedensten AVR Controller bzw. [[Controllerboard|Controllerboards]].Er bietet ein ungeheuer großes Leistungsvermögen und besonders anwenderfreundliche Entwicklungsumgebung. &lt;br /&gt;
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 &lt;br /&gt;
&lt;br /&gt;
[http://www.mcselec.com/index.php?option=com_docman&amp;amp;task=cat_view&amp;amp;gid=99&amp;amp;Itemid=54 Bascom-Download]&lt;br /&gt;
&lt;br /&gt;
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, Terminalprogramm, Avr-FuseBit Einstellung, integriertem Assembler, eingebauten Programmer zur Übertragung des Programmcode usw.&lt;br /&gt;
&lt;br /&gt;
Als erstes solltet ihr unter dem Menü Options / Compiler den Zielprozessor angeben. Fast alle gängigen AVR Controller können programmiert werden.&lt;br /&gt;
In diesem Dialog können auch noch viele weitere Einstellungen vorgenommen werden. Eigentlich ist das alles selbsterklärend. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
http://www.shop.robotikhardware.de/shop/catalog/images/artikelbilder/bascom/bascom.gif&lt;br /&gt;
&lt;br /&gt;
==Befehlsübersicht von Bascom==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Verzeigungen und Strukturbefehle===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
IF, THEN, ELSE, ELSEIF, END IF, DO, LOOP, WHILE, WEND, UNTIL,&lt;br /&gt;
EXIT DO, EXIT WHILE, FOR, NEXT, TO,  STEP, EXIT FOR,&lt;br /&gt;
ON .. GOTO/GOSUB, SELECT, CASE.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ein- und Ausgabebefehle===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
PRINT, INPUT, INKEY, PRINT, INPUTHEX, LCD, UPPERLINE, LOWERLINE,&lt;br /&gt;
DISPLAY ON/OFF, CURSOR ON/OFF/BLINK/NOBLINK, HOME, LOCATE, &lt;br /&gt;
SHIFTLCD LEFT/RIGHT, SHIFTCURSOR LEFT/RIGHT, CLS, DEFLCDCHAR, WAITKEY,&lt;br /&gt;
INPUTBIN, PRINTBIN,  OPEN, CLOSE, DEBOUNCE, SHIFTIN, SHIFTOUT,&lt;br /&gt;
GETATKBD, SPC, SERIN, SEROUT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Mathematische Funktionen===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
AND, OR, XOR, INC, DEC, MOD, NOT, ABS, BCD, LOG, EXP, SQR, SIN,COS,&lt;br /&gt;
TAN, ATN, ATN2, ASIN, ACOS, FIX, ROUND, MOD, SGN, POWER, RAD2DEG,&lt;br /&gt;
DEG2RAD, LOG10, TANH, SINH, COSH.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===I2C-Bus===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
I2CSTART, I2CSTOP, I2CWBYTE, I2CRBYTE, I2CSEND, I2CRECEIVE.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===1WIRE Bus===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1WWRITE, 1WREAD, 1WRESET, 1WIRECOUNT, 1WSEARCHFIRST, 1WSEARCHNEXT.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===SPI-Bus===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SPIINIT, SPIIN, SPIOUT, SPIMOVE.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Datum und Zeitfunktionen===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DayOfWeek, DayOfYear, SecOfDay, SecElapsed, SysDay, SysSec, SysSecElapsed,&lt;br /&gt;
Time, Date, Time$, Date$&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Disk/Drive===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DriveReadSector, DriveWriteSector, DriveInit, DriveGetIdentity, &lt;br /&gt;
DriveReset, DriveCheck.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Dateisystem Befehle===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
InitFileSystem, DiskSize, DiskFree, Kill, Dir, Name, ChDir, MkDir, RmDir&lt;br /&gt;
FileLen, FileDateTime, FileDate, FileTime, GetAttr&lt;br /&gt;
FreeFile, Open, Close, Flush, Print, Write, Input, Line Input, Get, Put, Seek&lt;br /&gt;
EOF, LOC, LOF, FileAttr&lt;br /&gt;
BLoad, BSave&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Interrupt Programmierung===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ON INT0/INT1/TIMER0/TIMER1/SERIAL, RETURN, ENABLE, DISABLE, &lt;br /&gt;
COUNTERx, CAPTUREx, INTERRUPTS, CONFIG, START, LOAD.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Bit Manipulation===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SET, RESET, ROTATE, SHIFT, BITWAIT, TOGGLE.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Variablen===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DIM, BIT , BYTE , INTEGER , WORD, LONG, SINGLE, DOUBLE, STRING , DEFBIT,&lt;br /&gt;
DEFBYTE, DEFINT, DEFWORD.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Sonstiges===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
REM, ' , SWAP, END, STOP, CONST, DELAY, WAIT, WAITMS, GOTO, GOSUB, &lt;br /&gt;
POWERDOWN, IDLE, DECLARE, CALL, SUB, END SUB, MAKEDEC, MAKEBCD, &lt;br /&gt;
INP,OUT, ALIAS, DIM , ERASE, DATA, READ, RESTORE, INCR, DECR, PEEK,&lt;br /&gt;
POKE, CPEEK, FUNCTION, READMAGCARD, BIN2GRAY, GRAY2BIN, CRC8, CRC16,&lt;br /&gt;
CHECKSUM, DTMFOUT, DTMFCODE.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Compiler Direktiven===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$INCLUDE, $BAUD and $CRYSTAL,  $SERIALINPUT, $SERIALOUTPUT, $RAMSIZE,&lt;br /&gt;
$RAMSTART,   $DEFAULT XRAM, $ASM-$END ASM, $LCD, $EXTERNAL, $LIB.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===String Manipulationen===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
STRING, SPACE, LEFT, RIGHT, MID, VAL, HEXVAL, LEN, STR, HEX, &lt;br /&gt;
LTRIM, RTRIM, TRIM, LCASE, UCASE, FORMAT, FUSING, INSTR. &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Erläuterung grundlegender Bascom-Funktionen==&lt;br /&gt;
Hier einige kleine Programme welche die grundlegende Funktionen und Syntax zeigen. Es wird immer ein komplettes Programm gezeigt, so das man dieses einfach kopieren und austesten kann. Bascom Programme bestehen in der Regel fast immer nur aus einer Sourcecode-Datei (obwohl es auch anders geht), also nicht wie bei der Programmiersprache C üblich aus mehreren Dateien (Header-Dateien etc.). Auch das macht Bascom besonders einsteigerfreundlich.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Das berühmte Hello World Programm in Bascom===&lt;br /&gt;
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]] (Bascom hat bereits eines in der Entwicklungsumgebung integriert) 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. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $regfile = &amp;quot;m32def.dat&amp;quot; 'Die Anweisung bestimmt Controllertyp, hier AVR Mega 32&lt;br /&gt;
 $framesize = 32         'Stackanweisungen, die eigentlich nur bei größeren Programmen &lt;br /&gt;
 $swstack = 32           'wirklich nötig werden&lt;br /&gt;
 $hwstack = 32&lt;br /&gt;
 $crystal = 16000000     'Die Frequenz des verwendeten Quarzes&lt;br /&gt;
&lt;br /&gt;
 $baud = 9600            'Die Baudrate für RS232 Ausgabe. &lt;br /&gt;
                         'Sie muss auch bei PC Terminalprogramm identisch sein&lt;br /&gt;
  do&lt;br /&gt;
    Print &amp;quot;**** RN-CONTROL sagt Hello World *****&amp;quot;&lt;br /&gt;
    wait 1&lt;br /&gt;
  loop&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Einen I/O Port umschalten===&lt;br /&gt;
Die wohl wichtigste Aufgabe beim Controller ist die Programmierung der Ports. Also das Bestimmen des Ausgangspegels eines Controllerpins. &lt;br /&gt;
Bascom verfügt über zwei Möglichkeiten die Ports zu beeinflussen, die sogenannten High-Level Befehle und die Registerzuweisungen wie sie in C üblich sind.&lt;br /&gt;
Zuerst ein Programm mit High-Level Anweisung. Ein [[Pin]] wird als Ausgang definiert und dann fortlaufend ein- und ausgeschaltet. Ist über einen Widerstand eine LED an diesem Controllerpin angeschlossen (so im Falle von [[RN-Control]]), so ergibt sich ein Blinken&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $regfile = &amp;quot;m32def.dat&amp;quot;  'Die Anweisung bestimmt Controllertyp, hier AVR Mega 32&lt;br /&gt;
 $framesize = 32          'Stackanweisungen, die eigentlich nur bei größeren Programmen &lt;br /&gt;
 $swstack = 32            'wirklich nötig werden&lt;br /&gt;
 $hwstack = 32&lt;br /&gt;
 $crystal = 16000000      'Die Frequenz des verwendeten Quarzes&lt;br /&gt;
&lt;br /&gt;
 $baud = 9600             'Die Baudrate für RS232 Ausgabe. &lt;br /&gt;
                          'Sie muss auch bei PC Terminalprogramm identisch sein&lt;br /&gt;
&lt;br /&gt;
 Config Pinc.0 = Output  'Ein Pin wird aus Ausgang konfiguriert PC0 (also Pin0 von Port C)&lt;br /&gt;
&lt;br /&gt;
  do&lt;br /&gt;
     Portc.0 = 1          'Pin wird auf High, also 5V geschaltet&lt;br /&gt;
     Waitms 100&lt;br /&gt;
     Portc.0 = 0          'Pin wird auf Low, also 0V geschaltet&lt;br /&gt;
     Waitms 100&lt;br /&gt;
  loop&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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 daß einige Kommentarzeilen durchaus entfallen könnten. Man sollte sich daher angewöhnen, den Alias-Befehl auch zu nutzen&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $regfile = &amp;quot;m32def.dat&amp;quot;  'Die Anweisung bestimmt Controllertyp, hier AVR Mega 32&lt;br /&gt;
 $framesize = 32          'Stackanweisungen, die eigentlich nur bei größeren Programmen &lt;br /&gt;
 $swstack = 32            'wirklich nötig werden&lt;br /&gt;
 $hwstack = 32&lt;br /&gt;
 $crystal = 16000000      'Die Frequenz des verwendeten Quarzes&lt;br /&gt;
&lt;br /&gt;
 $baud = 9600             'Die Baudrate für RS232 Ausgabe. &lt;br /&gt;
                          'Sie muss auch beim PC Terminalprogramm identisch sein&lt;br /&gt;
&lt;br /&gt;
 Config Pinc.0 = Output  'Ein Pin wird als Ausgang konfiguriert PC0 (also Pin0 von Port C)&lt;br /&gt;
 Led Alias Portc.0       &lt;br /&gt;
&lt;br /&gt;
  do&lt;br /&gt;
     Led = 1              'Pin wird auf High, also 5V geschaltet&lt;br /&gt;
     Waitms 100&lt;br /&gt;
     Led = 0              'Pin wird auf Low, also 0V geschaltet&lt;br /&gt;
     Waitms 100&lt;br /&gt;
  loop&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Das nachfolgende Beispiel kommt ohne den High-Level Befehl CONFIG aus, indem direkt in das Datenrichtungsregister des Controllers geschrieben wird. In diesem Register steht jedes Bit für den Betriebsmodus 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, daß 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&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $regfile = &amp;quot;m32def.dat&amp;quot;  'Die Anweisung bestimmt Controllertyp, hier [[AVR]] Mega 32&lt;br /&gt;
 $framesize = 32          'Stackanweisungen, die eigentlich nur bei größeren Programmen &lt;br /&gt;
 $swstack = 32            'wirklich nötig werden&lt;br /&gt;
 $hwstack = 32&lt;br /&gt;
 $crystal = 16000000      'Die Frequenz des verwendeten Quarzes&lt;br /&gt;
&lt;br /&gt;
 $baud = 9600             'Die Baudrate für RS232 Ausgabe. &lt;br /&gt;
                          'Sie muss auch bei PC Terminalprogramm identisch sein&lt;br /&gt;
&lt;br /&gt;
 DDRC = &amp;amp;b00000001        'Port PC0 wird als Ausgang definiert, man hätte hier auch&lt;br /&gt;
                          'DDRC =1 schreiben können. Man verwendet aber oft die Bitdarstellung&lt;br /&gt;
                          'um alle 8 Bit besser überschauen zu können&lt;br /&gt;
&lt;br /&gt;
  do&lt;br /&gt;
     Portc.0 = 1          'Pin wird auf High, also 5V geschaltet&lt;br /&gt;
     Waitms 100&lt;br /&gt;
     Portc.0 = 0          'Pin wird auf Low, also 0V geschaltet&lt;br /&gt;
     Waitms 100&lt;br /&gt;
  loop&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===I/O-Port als Eingang===&lt;br /&gt;
Im nachfolgenden Beispiel möchten wir ein PIN als Eingang verwenden und den Zustand eines Tasters abfragen. Dazu werden die Pole eines Tasters einmal mit GND (Masse) und einmal mit einem Port PA0 verbunden. Wir hätten auch jeden anderen Port nehmen können, da beim [[Avr]] Controller nahezu alle Pins auch auf Eingang geschaltet werden können. Der Übersichtlichkeit halber verwenden wir wieder den Config und den Alias Befehl um den Port in Taster umzutaufen.&lt;br /&gt;
Etwas gewöhnungsbedürftig ist in Bascom das man bei der Definition von Eingangsports nicht PORT sondern PIN beim Config-Befehl angibt. Eine weitere Besonderheit dieses Beispiels ist der Befehl ''Porta.0=1'' beim EIngabeport. Dieser Befehl sorgt dafür das im Controller der Eingangsport über einen hohen Widerstand (ca. 100k) mit High (5V) verbunden wird. Dadurch erreicht man, das bei unbelegtem Port, in unserem Fall ungedrückte Taste, immer ein High Signal gelesen wird. Erst wenn der Taster gedrückt wird, wird diese Spannung quasi kurzgeschlossen und so ein LOW angelegt. Das ganze Beispiel bewirkt nun das bei gedrückter Taste die LED leuchtet und beim loslassen wieder aus geht. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $regfile = &amp;quot;m32def.dat&amp;quot;  'Die Anweisung bestimmt Controllertyp, hier AVR Mega 32&lt;br /&gt;
 $framesize = 32          'Stackanweisungen, die eigentlich nur bei größeren Programmen &lt;br /&gt;
 $swstack = 32            'wirklich nötig werden&lt;br /&gt;
 $hwstack = 32&lt;br /&gt;
 $crystal = 16000000      'Die Frequenz des verwendeten Quarzes&lt;br /&gt;
&lt;br /&gt;
 $baud = 9600             'Die Baudrate für RS232 Ausgabe. &lt;br /&gt;
                          'Sie muss auch bei PC Terminalprogramm identisch sein&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 Config Portc.0 = Output  'Ein Pin wird aus Ausgang konfiguriert PC0 (also Pin0 von Port C)&lt;br /&gt;
 Led Alias Portc.0       &lt;br /&gt;
 Config Pina.0 = Input    'Ein Pin (PA0) wird als Eingang definiert&lt;br /&gt;
 Taster Alias Pina.0&lt;br /&gt;
 Porta.0=1                'Interner Pullup Widerstand ein&lt;br /&gt;
 &lt;br /&gt;
  do&lt;br /&gt;
     if taster=0 then&lt;br /&gt;
       Led=1            'Pin wird auf High, also 5V geschaltet&lt;br /&gt;
     else&lt;br /&gt;
       Led = 0          'Pin wird auf Low, also 0V geschaltet&lt;br /&gt;
     endif&lt;br /&gt;
     Waitms 100&lt;br /&gt;
  loop&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Tips und Tricks==&lt;br /&gt;
&lt;br /&gt;
===Wie man besonders kompakten Code erzeugt===&lt;br /&gt;
* Beachte das 32Byte HW-Stack-Minimum für ISR. &lt;br /&gt;
* Vermeide LOCAL Variable &lt;br /&gt;
* Vermeide SUB / FUNCTION mit Parameterübergabe &lt;br /&gt;
* Vermeide Bit-Variable &lt;br /&gt;
* Vermeide a&amp;gt;b, verwende a&amp;gt;=c oder b&amp;lt;a (RISC-Prozessor kennt kein größer als) &lt;br /&gt;
* Vermeide Double/Single/Long etc. und dazugehörige Matheoperationen (am besten nur Byte und Word)&lt;br /&gt;
&lt;br /&gt;
==Siehe auch==&lt;br /&gt;
* [[Bascom - Erstes Programm in den AVR Controller übertragen]]&lt;br /&gt;
* [[RN-Control]]&lt;br /&gt;
* [[RNBFRA-Board]]&lt;br /&gt;
* [[Avr]]&lt;br /&gt;
* [[RN-Board FAQ-Seite]] mit wichtigen Einstiegstips&lt;br /&gt;
* [[Sourcevergleich]] - GCC und Bascom&lt;br /&gt;
* [[Bascom State Machine Menu]] Umfangreiche Menüs in Bascom mit einer State Machine programmieren&lt;br /&gt;
* [[Bascom Inside]]&lt;br /&gt;
* [[Bascom Libraries]]&lt;br /&gt;
* [[Assembler Einführung für Bascom-User]]&lt;br /&gt;
* [[:Kategorie:Quellcode Bascom]]&lt;br /&gt;
&lt;br /&gt;
==Literatur==&lt;br /&gt;
* [[Buchvorstellungen|Programmieren der AVR RISC Mikrocontroller mit BASCOM-AVR; 2. Auflage]]&lt;br /&gt;
* [[Buchvorstellungen|Bascom–AVR, Autor M.Meissner - Beschreibung der Bascom IDE]]&lt;br /&gt;
* [[Buchvorstellungen|AVR-Microcontroller Lehrbuch – Ein tieferer Einstieg in Bascom und AT-MEGA8 und ähnliche AVR-Controller]]&lt;br /&gt;
* [[Buchvorstellungen|BASCOM-AVR Sprachbefehle - Ein umfangreiches Werk welches alle Befehle beschreibt ]]&lt;br /&gt;
* [[Buchvorstellungen|Mega16 Programmierung am Beispiel des RNBFRA-Boards]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Weblinks==&lt;br /&gt;
* [http://www.mcselec.com Niederländischer Hersteller MCSELEC]&lt;br /&gt;
* [http://www.robotikhardware.de Bezugsquelle in Deutschland u.a. Robotikhardware.de] &lt;br /&gt;
* [http://www.roboternetz.de/phpBB2/viewtopic.php?t=1511 Bauanleitungen zu Experimentier- und Roboterboards]&lt;br /&gt;
* [http://www.roboternetz.de/phpBB2/dload.php?action=file&amp;amp;file_id=169 RN-Timer Windows Programm zur Timer-Berechnung]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Microcontroller]]&lt;br /&gt;
[[Kategorie:Software]]&lt;br /&gt;
[[Kategorie:Grundlagen]]&lt;br /&gt;
[[Kategorie:Robotikeinstieg]]&lt;br /&gt;
[[Kategorie:Praxis]]&lt;br /&gt;
[[Kategorie:Quellcode Bascom]]&lt;/div&gt;</summary>
		<author><name>Hackgreti</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Bascom&amp;diff=12509</id>
		<title>Bascom</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Bascom&amp;diff=12509"/>
				<updated>2007-07-28T06:48:21Z</updated>
		
		<summary type="html">&lt;p&gt;Hackgreti: /* Compiler Direktiven */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==AVR Bascom Basic==&lt;br /&gt;
&lt;br /&gt;
Bascom ist eine komplette Basic-Entwicklungsumgebung für die verschiedensten AVR Controller bzw. [[Controllerboard|Controllerboards]].Er bietet ein ungeheuer großes Leistungsvermögen und besonders anwenderfreundliche Entwicklungsumgebung. &lt;br /&gt;
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 &lt;br /&gt;
&lt;br /&gt;
[http://www.mcselec.com/index.php?option=com_docman&amp;amp;task=cat_view&amp;amp;gid=99&amp;amp;Itemid=54 Bascom-Download]&lt;br /&gt;
&lt;br /&gt;
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, Terminalprogramm, Avr-FuseBit Einstellung, integriertem Assembler, eingebauten Programmer zur Übertragung des Programmcode usw.&lt;br /&gt;
&lt;br /&gt;
Als erstes solltet ihr unter dem Menü Options / Compiler den Zielprozessor angeben. Fast alle gängigen AVR Controller können programmiert werden.&lt;br /&gt;
In diesem Dialog können auch noch viele weitere Einstellungen vorgenommen werden. Eigentlich ist das alles selbsterklärend. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
http://www.shop.robotikhardware.de/shop/catalog/images/artikelbilder/bascom/bascom.gif&lt;br /&gt;
&lt;br /&gt;
==Befehlsübersicht von Bascom==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Verzeigungen und Strukturbefehle===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
IF, THEN, ELSE, ELSEIF, END IF, DO, LOOP, WHILE, WEND, UNTIL,&lt;br /&gt;
EXIT DO, EXIT WHILE, FOR, NEXT, TO,  STEP, EXIT FOR,&lt;br /&gt;
ON .. GOTO/GOSUB, SELECT, CASE.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ein- und Ausgabebefehle===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
PRINT, INPUT, INKEY, PRINT, INPUTHEX, LCD, UPPERLINE, LOWERLINE,&lt;br /&gt;
DISPLAY ON/OFF, CURSOR ON/OFF/BLINK/NOBLINK, HOME, LOCATE, &lt;br /&gt;
SHIFTLCD LEFT/RIGHT, SHIFTCURSOR LEFT/RIGHT, CLS, DEFLCDCHAR, WAITKEY,&lt;br /&gt;
INPUTBIN, PRINTBIN,  OPEN, CLOSE, DEBOUNCE, SHIFTIN, SHIFTOUT,&lt;br /&gt;
GETATKBD, SPC, SERIN, SEROUT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Mathematische Funktionen===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
AND, OR, XOR, INC, DEC, MOD, NOT, ABS, BCD, LOG, EXP, SQR, SIN,COS,&lt;br /&gt;
TAN, ATN, ATN2, ASIN, ACOS, FIX, ROUND, MOD, SGN, POWER, RAD2DEG,&lt;br /&gt;
DEG2RAD, LOG10, TANH, SINH, COSH.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===I2C-Bus===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
I2CSTART, I2CSTOP, I2CWBYTE, I2CRBYTE, I2CSEND, I2CRECEIVE.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===1WIRE Bus===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1WWRITE, 1WREAD, 1WRESET, 1WIRECOUNT, 1WSEARCHFIRST, 1WSEARCHNEXT.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===SPI-Bus===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SPIINIT, SPIIN, SPIOUT, SPIMOVE.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Datum und Zeitfunktionen===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DayOfWeek, DayOfYear, SecOfDay, SecElapsed, SysDay, SysSec, SysSecElapsed,&lt;br /&gt;
Time, Date, Time$, Date$&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Disk/Drive===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DriveReadSector, DriveWriteSector, DriveInit, DriveGetIdentity, &lt;br /&gt;
DriveReset, DriveCheck.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Dateisystem Befehle===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
InitFileSystem, DiskSize, DiskFree, Kill, Dir, Name, ChDir, MkDir, RmDir&lt;br /&gt;
FileLen, FileDateTime, FileDate, FileTime, GetAttr&lt;br /&gt;
FreeFile, Open, Close, Flush, Print, Write, Input, Line Input, Get, Put, Seek&lt;br /&gt;
EOF, LOC, LOF, FileAttr&lt;br /&gt;
BLoad, BSave&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Interrupt Programmierung===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ON INT0/INT1/TIMER0/TIMER1/SERIAL, RETURN, ENABLE, DISABLE, &lt;br /&gt;
COUNTERx, CAPTUREx, INTERRUPTS, CONFIG, START, LOAD.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Bit Manipulation===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SET, RESET, ROTATE, SHIFT, BITWAIT, TOGGLE.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Variablen===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DIM, BIT , BYTE , INTEGER , WORD, LONG, SINGLE, DOUBLE, STRING , DEFBIT,&lt;br /&gt;
DEFBYTE, DEFINT, DEFWORD.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Sonstiges===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
REM, ' , SWAP, END, STOP, CONST, DELAY, WAIT, WAITMS, GOTO, GOSUB, &lt;br /&gt;
POWERDOWN, IDLE, DECLARE, CALL, SUB, END SUB, MAKEDEC, MAKEBCD, &lt;br /&gt;
INP,OUT, ALIAS, DIM , ERASE, DATA, READ, RESTORE, INCR, DECR, PEEK,&lt;br /&gt;
POKE, CPEEK, FUNCTION, READMAGCARD, BIN2GRAY, GRAY2BIN, CRC8, CRC16,&lt;br /&gt;
CHECKSUM.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Compiler Direktiven===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$INCLUDE, $BAUD and $CRYSTAL,  $SERIALINPUT, $SERIALOUTPUT, $RAMSIZE,&lt;br /&gt;
$RAMSTART,   $DEFAULT XRAM, $ASM-$END ASM, $LCD, $EXTERNAL, $LIB.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===String Manipulationen===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
STRING, SPACE, LEFT, RIGHT, MID, VAL, HEXVAL, LEN, STR, HEX, &lt;br /&gt;
LTRIM, RTRIM, TRIM, LCASE, UCASE, FORMAT, FUSING, INSTR. &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Erläuterung grundlegender Bascom-Funktionen==&lt;br /&gt;
Hier einige kleine Programme welche die grundlegende Funktionen und Syntax zeigen. Es wird immer ein komplettes Programm gezeigt, so das man dieses einfach kopieren und austesten kann. Bascom Programme bestehen in der Regel fast immer nur aus einer Sourcecode-Datei (obwohl es auch anders geht), also nicht wie bei der Programmiersprache C üblich aus mehreren Dateien (Header-Dateien etc.). Auch das macht Bascom besonders einsteigerfreundlich.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Das berühmte Hello World Programm in Bascom===&lt;br /&gt;
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]] (Bascom hat bereits eines in der Entwicklungsumgebung integriert) 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. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $regfile = &amp;quot;m32def.dat&amp;quot; 'Die Anweisung bestimmt Controllertyp, hier AVR Mega 32&lt;br /&gt;
 $framesize = 32         'Stackanweisungen, die eigentlich nur bei größeren Programmen &lt;br /&gt;
 $swstack = 32           'wirklich nötig werden&lt;br /&gt;
 $hwstack = 32&lt;br /&gt;
 $crystal = 16000000     'Die Frequenz des verwendeten Quarzes&lt;br /&gt;
&lt;br /&gt;
 $baud = 9600            'Die Baudrate für RS232 Ausgabe. &lt;br /&gt;
                         'Sie muss auch bei PC Terminalprogramm identisch sein&lt;br /&gt;
  do&lt;br /&gt;
    Print &amp;quot;**** RN-CONTROL sagt Hello World *****&amp;quot;&lt;br /&gt;
    wait 1&lt;br /&gt;
  loop&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Einen I/O Port umschalten===&lt;br /&gt;
Die wohl wichtigste Aufgabe beim Controller ist die Programmierung der Ports. Also das Bestimmen des Ausgangspegels eines Controllerpins. &lt;br /&gt;
Bascom verfügt über zwei Möglichkeiten die Ports zu beeinflussen, die sogenannten High-Level Befehle und die Registerzuweisungen wie sie in C üblich sind.&lt;br /&gt;
Zuerst ein Programm mit High-Level Anweisung. Ein [[Pin]] wird als Ausgang definiert und dann fortlaufend ein- und ausgeschaltet. Ist über einen Widerstand eine LED an diesem Controllerpin angeschlossen (so im Falle von [[RN-Control]]), so ergibt sich ein Blinken&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $regfile = &amp;quot;m32def.dat&amp;quot;  'Die Anweisung bestimmt Controllertyp, hier AVR Mega 32&lt;br /&gt;
 $framesize = 32          'Stackanweisungen, die eigentlich nur bei größeren Programmen &lt;br /&gt;
 $swstack = 32            'wirklich nötig werden&lt;br /&gt;
 $hwstack = 32&lt;br /&gt;
 $crystal = 16000000      'Die Frequenz des verwendeten Quarzes&lt;br /&gt;
&lt;br /&gt;
 $baud = 9600             'Die Baudrate für RS232 Ausgabe. &lt;br /&gt;
                          'Sie muss auch bei PC Terminalprogramm identisch sein&lt;br /&gt;
&lt;br /&gt;
 Config Pinc.0 = Output  'Ein Pin wird aus Ausgang konfiguriert PC0 (also Pin0 von Port C)&lt;br /&gt;
&lt;br /&gt;
  do&lt;br /&gt;
     Portc.0 = 1          'Pin wird auf High, also 5V geschaltet&lt;br /&gt;
     Waitms 100&lt;br /&gt;
     Portc.0 = 0          'Pin wird auf Low, also 0V geschaltet&lt;br /&gt;
     Waitms 100&lt;br /&gt;
  loop&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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 daß einige Kommentarzeilen durchaus entfallen könnten. Man sollte sich daher angewöhnen, den Alias-Befehl auch zu nutzen&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $regfile = &amp;quot;m32def.dat&amp;quot;  'Die Anweisung bestimmt Controllertyp, hier AVR Mega 32&lt;br /&gt;
 $framesize = 32          'Stackanweisungen, die eigentlich nur bei größeren Programmen &lt;br /&gt;
 $swstack = 32            'wirklich nötig werden&lt;br /&gt;
 $hwstack = 32&lt;br /&gt;
 $crystal = 16000000      'Die Frequenz des verwendeten Quarzes&lt;br /&gt;
&lt;br /&gt;
 $baud = 9600             'Die Baudrate für RS232 Ausgabe. &lt;br /&gt;
                          'Sie muss auch beim PC Terminalprogramm identisch sein&lt;br /&gt;
&lt;br /&gt;
 Config Pinc.0 = Output  'Ein Pin wird als Ausgang konfiguriert PC0 (also Pin0 von Port C)&lt;br /&gt;
 Led Alias Portc.0       &lt;br /&gt;
&lt;br /&gt;
  do&lt;br /&gt;
     Led = 1              'Pin wird auf High, also 5V geschaltet&lt;br /&gt;
     Waitms 100&lt;br /&gt;
     Led = 0              'Pin wird auf Low, also 0V geschaltet&lt;br /&gt;
     Waitms 100&lt;br /&gt;
  loop&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Das nachfolgende Beispiel kommt ohne den High-Level Befehl CONFIG aus, indem direkt in das Datenrichtungsregister des Controllers geschrieben wird. In diesem Register steht jedes Bit für den Betriebsmodus 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, daß 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&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $regfile = &amp;quot;m32def.dat&amp;quot;  'Die Anweisung bestimmt Controllertyp, hier [[AVR]] Mega 32&lt;br /&gt;
 $framesize = 32          'Stackanweisungen, die eigentlich nur bei größeren Programmen &lt;br /&gt;
 $swstack = 32            'wirklich nötig werden&lt;br /&gt;
 $hwstack = 32&lt;br /&gt;
 $crystal = 16000000      'Die Frequenz des verwendeten Quarzes&lt;br /&gt;
&lt;br /&gt;
 $baud = 9600             'Die Baudrate für RS232 Ausgabe. &lt;br /&gt;
                          'Sie muss auch bei PC Terminalprogramm identisch sein&lt;br /&gt;
&lt;br /&gt;
 DDRC = &amp;amp;b00000001        'Port PC0 wird als Ausgang definiert, man hätte hier auch&lt;br /&gt;
                          'DDRC =1 schreiben können. Man verwendet aber oft die Bitdarstellung&lt;br /&gt;
                          'um alle 8 Bit besser überschauen zu können&lt;br /&gt;
&lt;br /&gt;
  do&lt;br /&gt;
     Portc.0 = 1          'Pin wird auf High, also 5V geschaltet&lt;br /&gt;
     Waitms 100&lt;br /&gt;
     Portc.0 = 0          'Pin wird auf Low, also 0V geschaltet&lt;br /&gt;
     Waitms 100&lt;br /&gt;
  loop&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===I/O-Port als Eingang===&lt;br /&gt;
Im nachfolgenden Beispiel möchten wir ein PIN als Eingang verwenden und den Zustand eines Tasters abfragen. Dazu werden die Pole eines Tasters einmal mit GND (Masse) und einmal mit einem Port PA0 verbunden. Wir hätten auch jeden anderen Port nehmen können, da beim [[Avr]] Controller nahezu alle Pins auch auf Eingang geschaltet werden können. Der Übersichtlichkeit halber verwenden wir wieder den Config und den Alias Befehl um den Port in Taster umzutaufen.&lt;br /&gt;
Etwas gewöhnungsbedürftig ist in Bascom das man bei der Definition von Eingangsports nicht PORT sondern PIN beim Config-Befehl angibt. Eine weitere Besonderheit dieses Beispiels ist der Befehl ''Porta.0=1'' beim EIngabeport. Dieser Befehl sorgt dafür das im Controller der Eingangsport über einen hohen Widerstand (ca. 100k) mit High (5V) verbunden wird. Dadurch erreicht man, das bei unbelegtem Port, in unserem Fall ungedrückte Taste, immer ein High Signal gelesen wird. Erst wenn der Taster gedrückt wird, wird diese Spannung quasi kurzgeschlossen und so ein LOW angelegt. Das ganze Beispiel bewirkt nun das bei gedrückter Taste die LED leuchtet und beim loslassen wieder aus geht. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $regfile = &amp;quot;m32def.dat&amp;quot;  'Die Anweisung bestimmt Controllertyp, hier AVR Mega 32&lt;br /&gt;
 $framesize = 32          'Stackanweisungen, die eigentlich nur bei größeren Programmen &lt;br /&gt;
 $swstack = 32            'wirklich nötig werden&lt;br /&gt;
 $hwstack = 32&lt;br /&gt;
 $crystal = 16000000      'Die Frequenz des verwendeten Quarzes&lt;br /&gt;
&lt;br /&gt;
 $baud = 9600             'Die Baudrate für RS232 Ausgabe. &lt;br /&gt;
                          'Sie muss auch bei PC Terminalprogramm identisch sein&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 Config Portc.0 = Output  'Ein Pin wird aus Ausgang konfiguriert PC0 (also Pin0 von Port C)&lt;br /&gt;
 Led Alias Portc.0       &lt;br /&gt;
 Config Pina.0 = Input    'Ein Pin (PA0) wird als Eingang definiert&lt;br /&gt;
 Taster Alias Pina.0&lt;br /&gt;
 Porta.0=1                'Interner Pullup Widerstand ein&lt;br /&gt;
 &lt;br /&gt;
  do&lt;br /&gt;
     if taster=0 then&lt;br /&gt;
       Led=1            'Pin wird auf High, also 5V geschaltet&lt;br /&gt;
     else&lt;br /&gt;
       Led = 0          'Pin wird auf Low, also 0V geschaltet&lt;br /&gt;
     endif&lt;br /&gt;
     Waitms 100&lt;br /&gt;
  loop&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Tips und Tricks==&lt;br /&gt;
&lt;br /&gt;
===Wie man besonders kompakten Code erzeugt===&lt;br /&gt;
* Beachte das 32Byte HW-Stack-Minimum für ISR. &lt;br /&gt;
* Vermeide LOCAL Variable &lt;br /&gt;
* Vermeide SUB / FUNCTION mit Parameterübergabe &lt;br /&gt;
* Vermeide Bit-Variable &lt;br /&gt;
* Vermeide a&amp;gt;b, verwende a&amp;gt;=c oder b&amp;lt;a (RISC-Prozessor kennt kein größer als) &lt;br /&gt;
* Vermeide Double/Single/Long etc. und dazugehörige Matheoperationen (am besten nur Byte und Word)&lt;br /&gt;
&lt;br /&gt;
==Siehe auch==&lt;br /&gt;
* [[Bascom - Erstes Programm in den AVR Controller übertragen]]&lt;br /&gt;
* [[RN-Control]]&lt;br /&gt;
* [[RNBFRA-Board]]&lt;br /&gt;
* [[Avr]]&lt;br /&gt;
* [[RN-Board FAQ-Seite]] mit wichtigen Einstiegstips&lt;br /&gt;
* [[Sourcevergleich]] - GCC und Bascom&lt;br /&gt;
* [[Bascom State Machine Menu]] Umfangreiche Menüs in Bascom mit einer State Machine programmieren&lt;br /&gt;
* [[Bascom Inside]]&lt;br /&gt;
* [[Bascom Libraries]]&lt;br /&gt;
* [[Assembler Einführung für Bascom-User]]&lt;br /&gt;
* [[:Kategorie:Quellcode Bascom]]&lt;br /&gt;
&lt;br /&gt;
==Literatur==&lt;br /&gt;
* [[Buchvorstellungen|Programmieren der AVR RISC Mikrocontroller mit BASCOM-AVR; 2. Auflage]]&lt;br /&gt;
* [[Buchvorstellungen|Bascom–AVR, Autor M.Meissner - Beschreibung der Bascom IDE]]&lt;br /&gt;
* [[Buchvorstellungen|AVR-Microcontroller Lehrbuch – Ein tieferer Einstieg in Bascom und AT-MEGA8 und ähnliche AVR-Controller]]&lt;br /&gt;
* [[Buchvorstellungen|BASCOM-AVR Sprachbefehle - Ein umfangreiches Werk welches alle Befehle beschreibt ]]&lt;br /&gt;
* [[Buchvorstellungen|Mega16 Programmierung am Beispiel des RNBFRA-Boards]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Weblinks==&lt;br /&gt;
* [http://www.mcselec.com Niederländischer Hersteller MCSELEC]&lt;br /&gt;
* [http://www.robotikhardware.de Bezugsquelle in Deutschland u.a. Robotikhardware.de] &lt;br /&gt;
* [http://www.roboternetz.de/phpBB2/viewtopic.php?t=1511 Bauanleitungen zu Experimentier- und Roboterboards]&lt;br /&gt;
* [http://www.roboternetz.de/phpBB2/dload.php?action=file&amp;amp;file_id=169 RN-Timer Windows Programm zur Timer-Berechnung]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Microcontroller]]&lt;br /&gt;
[[Kategorie:Software]]&lt;br /&gt;
[[Kategorie:Grundlagen]]&lt;br /&gt;
[[Kategorie:Robotikeinstieg]]&lt;br /&gt;
[[Kategorie:Praxis]]&lt;br /&gt;
[[Kategorie:Quellcode Bascom]]&lt;/div&gt;</summary>
		<author><name>Hackgreti</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Bascom&amp;diff=12508</id>
		<title>Bascom</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Bascom&amp;diff=12508"/>
				<updated>2007-07-28T06:47:08Z</updated>
		
		<summary type="html">&lt;p&gt;Hackgreti: /* Compiler Direktiven */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==AVR Bascom Basic==&lt;br /&gt;
&lt;br /&gt;
Bascom ist eine komplette Basic-Entwicklungsumgebung für die verschiedensten AVR Controller bzw. [[Controllerboard|Controllerboards]].Er bietet ein ungeheuer großes Leistungsvermögen und besonders anwenderfreundliche Entwicklungsumgebung. &lt;br /&gt;
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 &lt;br /&gt;
&lt;br /&gt;
[http://www.mcselec.com/index.php?option=com_docman&amp;amp;task=cat_view&amp;amp;gid=99&amp;amp;Itemid=54 Bascom-Download]&lt;br /&gt;
&lt;br /&gt;
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, Terminalprogramm, Avr-FuseBit Einstellung, integriertem Assembler, eingebauten Programmer zur Übertragung des Programmcode usw.&lt;br /&gt;
&lt;br /&gt;
Als erstes solltet ihr unter dem Menü Options / Compiler den Zielprozessor angeben. Fast alle gängigen AVR Controller können programmiert werden.&lt;br /&gt;
In diesem Dialog können auch noch viele weitere Einstellungen vorgenommen werden. Eigentlich ist das alles selbsterklärend. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
http://www.shop.robotikhardware.de/shop/catalog/images/artikelbilder/bascom/bascom.gif&lt;br /&gt;
&lt;br /&gt;
==Befehlsübersicht von Bascom==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Verzeigungen und Strukturbefehle===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
IF, THEN, ELSE, ELSEIF, END IF, DO, LOOP, WHILE, WEND, UNTIL,&lt;br /&gt;
EXIT DO, EXIT WHILE, FOR, NEXT, TO,  STEP, EXIT FOR,&lt;br /&gt;
ON .. GOTO/GOSUB, SELECT, CASE.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ein- und Ausgabebefehle===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
PRINT, INPUT, INKEY, PRINT, INPUTHEX, LCD, UPPERLINE, LOWERLINE,&lt;br /&gt;
DISPLAY ON/OFF, CURSOR ON/OFF/BLINK/NOBLINK, HOME, LOCATE, &lt;br /&gt;
SHIFTLCD LEFT/RIGHT, SHIFTCURSOR LEFT/RIGHT, CLS, DEFLCDCHAR, WAITKEY,&lt;br /&gt;
INPUTBIN, PRINTBIN,  OPEN, CLOSE, DEBOUNCE, SHIFTIN, SHIFTOUT,&lt;br /&gt;
GETATKBD, SPC, SERIN, SEROUT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Mathematische Funktionen===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
AND, OR, XOR, INC, DEC, MOD, NOT, ABS, BCD, LOG, EXP, SQR, SIN,COS,&lt;br /&gt;
TAN, ATN, ATN2, ASIN, ACOS, FIX, ROUND, MOD, SGN, POWER, RAD2DEG,&lt;br /&gt;
DEG2RAD, LOG10, TANH, SINH, COSH.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===I2C-Bus===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
I2CSTART, I2CSTOP, I2CWBYTE, I2CRBYTE, I2CSEND, I2CRECEIVE.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===1WIRE Bus===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1WWRITE, 1WREAD, 1WRESET, 1WIRECOUNT, 1WSEARCHFIRST, 1WSEARCHNEXT.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===SPI-Bus===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SPIINIT, SPIIN, SPIOUT, SPIMOVE.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Datum und Zeitfunktionen===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DayOfWeek, DayOfYear, SecOfDay, SecElapsed, SysDay, SysSec, SysSecElapsed,&lt;br /&gt;
Time, Date, Time$, Date$&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Disk/Drive===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DriveReadSector, DriveWriteSector, DriveInit, DriveGetIdentity, &lt;br /&gt;
DriveReset, DriveCheck.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Dateisystem Befehle===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
InitFileSystem, DiskSize, DiskFree, Kill, Dir, Name, ChDir, MkDir, RmDir&lt;br /&gt;
FileLen, FileDateTime, FileDate, FileTime, GetAttr&lt;br /&gt;
FreeFile, Open, Close, Flush, Print, Write, Input, Line Input, Get, Put, Seek&lt;br /&gt;
EOF, LOC, LOF, FileAttr&lt;br /&gt;
BLoad, BSave&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Interrupt Programmierung===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ON INT0/INT1/TIMER0/TIMER1/SERIAL, RETURN, ENABLE, DISABLE, &lt;br /&gt;
COUNTERx, CAPTUREx, INTERRUPTS, CONFIG, START, LOAD.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Bit Manipulation===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SET, RESET, ROTATE, SHIFT, BITWAIT, TOGGLE.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Variablen===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DIM, BIT , BYTE , INTEGER , WORD, LONG, SINGLE, DOUBLE, STRING , DEFBIT,&lt;br /&gt;
DEFBYTE, DEFINT, DEFWORD.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Sonstiges===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
REM, ' , SWAP, END, STOP, CONST, DELAY, WAIT, WAITMS, GOTO, GOSUB, &lt;br /&gt;
POWERDOWN, IDLE, DECLARE, CALL, SUB, END SUB, MAKEDEC, MAKEBCD, &lt;br /&gt;
INP,OUT, ALIAS, DIM , ERASE, DATA, READ, RESTORE, INCR, DECR, PEEK,&lt;br /&gt;
POKE, CPEEK, FUNCTION, READMAGCARD, BIN2GRAY, GRAY2BIN, CRC8, CRC16,&lt;br /&gt;
CHECKSUM.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Compiler Direktiven===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$INCLUDE, $BAUD and $CRYSTAL,  $SERIALINPUT, $SERIALOUTPUT, $RAMSIZE,&lt;br /&gt;
$RAMSTART,   $DEFAULT XRAM, $ASM-$END ASM, $LCD, $EXTERNAL, $LIB, $DTMFOUT, $DTMFCODE.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===String Manipulationen===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
STRING, SPACE, LEFT, RIGHT, MID, VAL, HEXVAL, LEN, STR, HEX, &lt;br /&gt;
LTRIM, RTRIM, TRIM, LCASE, UCASE, FORMAT, FUSING, INSTR. &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Erläuterung grundlegender Bascom-Funktionen==&lt;br /&gt;
Hier einige kleine Programme welche die grundlegende Funktionen und Syntax zeigen. Es wird immer ein komplettes Programm gezeigt, so das man dieses einfach kopieren und austesten kann. Bascom Programme bestehen in der Regel fast immer nur aus einer Sourcecode-Datei (obwohl es auch anders geht), also nicht wie bei der Programmiersprache C üblich aus mehreren Dateien (Header-Dateien etc.). Auch das macht Bascom besonders einsteigerfreundlich.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Das berühmte Hello World Programm in Bascom===&lt;br /&gt;
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]] (Bascom hat bereits eines in der Entwicklungsumgebung integriert) 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. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $regfile = &amp;quot;m32def.dat&amp;quot; 'Die Anweisung bestimmt Controllertyp, hier AVR Mega 32&lt;br /&gt;
 $framesize = 32         'Stackanweisungen, die eigentlich nur bei größeren Programmen &lt;br /&gt;
 $swstack = 32           'wirklich nötig werden&lt;br /&gt;
 $hwstack = 32&lt;br /&gt;
 $crystal = 16000000     'Die Frequenz des verwendeten Quarzes&lt;br /&gt;
&lt;br /&gt;
 $baud = 9600            'Die Baudrate für RS232 Ausgabe. &lt;br /&gt;
                         'Sie muss auch bei PC Terminalprogramm identisch sein&lt;br /&gt;
  do&lt;br /&gt;
    Print &amp;quot;**** RN-CONTROL sagt Hello World *****&amp;quot;&lt;br /&gt;
    wait 1&lt;br /&gt;
  loop&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Einen I/O Port umschalten===&lt;br /&gt;
Die wohl wichtigste Aufgabe beim Controller ist die Programmierung der Ports. Also das Bestimmen des Ausgangspegels eines Controllerpins. &lt;br /&gt;
Bascom verfügt über zwei Möglichkeiten die Ports zu beeinflussen, die sogenannten High-Level Befehle und die Registerzuweisungen wie sie in C üblich sind.&lt;br /&gt;
Zuerst ein Programm mit High-Level Anweisung. Ein [[Pin]] wird als Ausgang definiert und dann fortlaufend ein- und ausgeschaltet. Ist über einen Widerstand eine LED an diesem Controllerpin angeschlossen (so im Falle von [[RN-Control]]), so ergibt sich ein Blinken&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $regfile = &amp;quot;m32def.dat&amp;quot;  'Die Anweisung bestimmt Controllertyp, hier AVR Mega 32&lt;br /&gt;
 $framesize = 32          'Stackanweisungen, die eigentlich nur bei größeren Programmen &lt;br /&gt;
 $swstack = 32            'wirklich nötig werden&lt;br /&gt;
 $hwstack = 32&lt;br /&gt;
 $crystal = 16000000      'Die Frequenz des verwendeten Quarzes&lt;br /&gt;
&lt;br /&gt;
 $baud = 9600             'Die Baudrate für RS232 Ausgabe. &lt;br /&gt;
                          'Sie muss auch bei PC Terminalprogramm identisch sein&lt;br /&gt;
&lt;br /&gt;
 Config Pinc.0 = Output  'Ein Pin wird aus Ausgang konfiguriert PC0 (also Pin0 von Port C)&lt;br /&gt;
&lt;br /&gt;
  do&lt;br /&gt;
     Portc.0 = 1          'Pin wird auf High, also 5V geschaltet&lt;br /&gt;
     Waitms 100&lt;br /&gt;
     Portc.0 = 0          'Pin wird auf Low, also 0V geschaltet&lt;br /&gt;
     Waitms 100&lt;br /&gt;
  loop&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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 daß einige Kommentarzeilen durchaus entfallen könnten. Man sollte sich daher angewöhnen, den Alias-Befehl auch zu nutzen&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $regfile = &amp;quot;m32def.dat&amp;quot;  'Die Anweisung bestimmt Controllertyp, hier AVR Mega 32&lt;br /&gt;
 $framesize = 32          'Stackanweisungen, die eigentlich nur bei größeren Programmen &lt;br /&gt;
 $swstack = 32            'wirklich nötig werden&lt;br /&gt;
 $hwstack = 32&lt;br /&gt;
 $crystal = 16000000      'Die Frequenz des verwendeten Quarzes&lt;br /&gt;
&lt;br /&gt;
 $baud = 9600             'Die Baudrate für RS232 Ausgabe. &lt;br /&gt;
                          'Sie muss auch beim PC Terminalprogramm identisch sein&lt;br /&gt;
&lt;br /&gt;
 Config Pinc.0 = Output  'Ein Pin wird als Ausgang konfiguriert PC0 (also Pin0 von Port C)&lt;br /&gt;
 Led Alias Portc.0       &lt;br /&gt;
&lt;br /&gt;
  do&lt;br /&gt;
     Led = 1              'Pin wird auf High, also 5V geschaltet&lt;br /&gt;
     Waitms 100&lt;br /&gt;
     Led = 0              'Pin wird auf Low, also 0V geschaltet&lt;br /&gt;
     Waitms 100&lt;br /&gt;
  loop&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Das nachfolgende Beispiel kommt ohne den High-Level Befehl CONFIG aus, indem direkt in das Datenrichtungsregister des Controllers geschrieben wird. In diesem Register steht jedes Bit für den Betriebsmodus 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, daß 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&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $regfile = &amp;quot;m32def.dat&amp;quot;  'Die Anweisung bestimmt Controllertyp, hier [[AVR]] Mega 32&lt;br /&gt;
 $framesize = 32          'Stackanweisungen, die eigentlich nur bei größeren Programmen &lt;br /&gt;
 $swstack = 32            'wirklich nötig werden&lt;br /&gt;
 $hwstack = 32&lt;br /&gt;
 $crystal = 16000000      'Die Frequenz des verwendeten Quarzes&lt;br /&gt;
&lt;br /&gt;
 $baud = 9600             'Die Baudrate für RS232 Ausgabe. &lt;br /&gt;
                          'Sie muss auch bei PC Terminalprogramm identisch sein&lt;br /&gt;
&lt;br /&gt;
 DDRC = &amp;amp;b00000001        'Port PC0 wird als Ausgang definiert, man hätte hier auch&lt;br /&gt;
                          'DDRC =1 schreiben können. Man verwendet aber oft die Bitdarstellung&lt;br /&gt;
                          'um alle 8 Bit besser überschauen zu können&lt;br /&gt;
&lt;br /&gt;
  do&lt;br /&gt;
     Portc.0 = 1          'Pin wird auf High, also 5V geschaltet&lt;br /&gt;
     Waitms 100&lt;br /&gt;
     Portc.0 = 0          'Pin wird auf Low, also 0V geschaltet&lt;br /&gt;
     Waitms 100&lt;br /&gt;
  loop&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===I/O-Port als Eingang===&lt;br /&gt;
Im nachfolgenden Beispiel möchten wir ein PIN als Eingang verwenden und den Zustand eines Tasters abfragen. Dazu werden die Pole eines Tasters einmal mit GND (Masse) und einmal mit einem Port PA0 verbunden. Wir hätten auch jeden anderen Port nehmen können, da beim [[Avr]] Controller nahezu alle Pins auch auf Eingang geschaltet werden können. Der Übersichtlichkeit halber verwenden wir wieder den Config und den Alias Befehl um den Port in Taster umzutaufen.&lt;br /&gt;
Etwas gewöhnungsbedürftig ist in Bascom das man bei der Definition von Eingangsports nicht PORT sondern PIN beim Config-Befehl angibt. Eine weitere Besonderheit dieses Beispiels ist der Befehl ''Porta.0=1'' beim EIngabeport. Dieser Befehl sorgt dafür das im Controller der Eingangsport über einen hohen Widerstand (ca. 100k) mit High (5V) verbunden wird. Dadurch erreicht man, das bei unbelegtem Port, in unserem Fall ungedrückte Taste, immer ein High Signal gelesen wird. Erst wenn der Taster gedrückt wird, wird diese Spannung quasi kurzgeschlossen und so ein LOW angelegt. Das ganze Beispiel bewirkt nun das bei gedrückter Taste die LED leuchtet und beim loslassen wieder aus geht. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $regfile = &amp;quot;m32def.dat&amp;quot;  'Die Anweisung bestimmt Controllertyp, hier AVR Mega 32&lt;br /&gt;
 $framesize = 32          'Stackanweisungen, die eigentlich nur bei größeren Programmen &lt;br /&gt;
 $swstack = 32            'wirklich nötig werden&lt;br /&gt;
 $hwstack = 32&lt;br /&gt;
 $crystal = 16000000      'Die Frequenz des verwendeten Quarzes&lt;br /&gt;
&lt;br /&gt;
 $baud = 9600             'Die Baudrate für RS232 Ausgabe. &lt;br /&gt;
                          'Sie muss auch bei PC Terminalprogramm identisch sein&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 Config Portc.0 = Output  'Ein Pin wird aus Ausgang konfiguriert PC0 (also Pin0 von Port C)&lt;br /&gt;
 Led Alias Portc.0       &lt;br /&gt;
 Config Pina.0 = Input    'Ein Pin (PA0) wird als Eingang definiert&lt;br /&gt;
 Taster Alias Pina.0&lt;br /&gt;
 Porta.0=1                'Interner Pullup Widerstand ein&lt;br /&gt;
 &lt;br /&gt;
  do&lt;br /&gt;
     if taster=0 then&lt;br /&gt;
       Led=1            'Pin wird auf High, also 5V geschaltet&lt;br /&gt;
     else&lt;br /&gt;
       Led = 0          'Pin wird auf Low, also 0V geschaltet&lt;br /&gt;
     endif&lt;br /&gt;
     Waitms 100&lt;br /&gt;
  loop&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Tips und Tricks==&lt;br /&gt;
&lt;br /&gt;
===Wie man besonders kompakten Code erzeugt===&lt;br /&gt;
* Beachte das 32Byte HW-Stack-Minimum für ISR. &lt;br /&gt;
* Vermeide LOCAL Variable &lt;br /&gt;
* Vermeide SUB / FUNCTION mit Parameterübergabe &lt;br /&gt;
* Vermeide Bit-Variable &lt;br /&gt;
* Vermeide a&amp;gt;b, verwende a&amp;gt;=c oder b&amp;lt;a (RISC-Prozessor kennt kein größer als) &lt;br /&gt;
* Vermeide Double/Single/Long etc. und dazugehörige Matheoperationen (am besten nur Byte und Word)&lt;br /&gt;
&lt;br /&gt;
==Siehe auch==&lt;br /&gt;
* [[Bascom - Erstes Programm in den AVR Controller übertragen]]&lt;br /&gt;
* [[RN-Control]]&lt;br /&gt;
* [[RNBFRA-Board]]&lt;br /&gt;
* [[Avr]]&lt;br /&gt;
* [[RN-Board FAQ-Seite]] mit wichtigen Einstiegstips&lt;br /&gt;
* [[Sourcevergleich]] - GCC und Bascom&lt;br /&gt;
* [[Bascom State Machine Menu]] Umfangreiche Menüs in Bascom mit einer State Machine programmieren&lt;br /&gt;
* [[Bascom Inside]]&lt;br /&gt;
* [[Bascom Libraries]]&lt;br /&gt;
* [[Assembler Einführung für Bascom-User]]&lt;br /&gt;
* [[:Kategorie:Quellcode Bascom]]&lt;br /&gt;
&lt;br /&gt;
==Literatur==&lt;br /&gt;
* [[Buchvorstellungen|Programmieren der AVR RISC Mikrocontroller mit BASCOM-AVR; 2. Auflage]]&lt;br /&gt;
* [[Buchvorstellungen|Bascom–AVR, Autor M.Meissner - Beschreibung der Bascom IDE]]&lt;br /&gt;
* [[Buchvorstellungen|AVR-Microcontroller Lehrbuch – Ein tieferer Einstieg in Bascom und AT-MEGA8 und ähnliche AVR-Controller]]&lt;br /&gt;
* [[Buchvorstellungen|BASCOM-AVR Sprachbefehle - Ein umfangreiches Werk welches alle Befehle beschreibt ]]&lt;br /&gt;
* [[Buchvorstellungen|Mega16 Programmierung am Beispiel des RNBFRA-Boards]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Weblinks==&lt;br /&gt;
* [http://www.mcselec.com Niederländischer Hersteller MCSELEC]&lt;br /&gt;
* [http://www.robotikhardware.de Bezugsquelle in Deutschland u.a. Robotikhardware.de] &lt;br /&gt;
* [http://www.roboternetz.de/phpBB2/viewtopic.php?t=1511 Bauanleitungen zu Experimentier- und Roboterboards]&lt;br /&gt;
* [http://www.roboternetz.de/phpBB2/dload.php?action=file&amp;amp;file_id=169 RN-Timer Windows Programm zur Timer-Berechnung]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Microcontroller]]&lt;br /&gt;
[[Kategorie:Software]]&lt;br /&gt;
[[Kategorie:Grundlagen]]&lt;br /&gt;
[[Kategorie:Robotikeinstieg]]&lt;br /&gt;
[[Kategorie:Praxis]]&lt;br /&gt;
[[Kategorie:Quellcode Bascom]]&lt;/div&gt;</summary>
		<author><name>Hackgreti</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=DTMF&amp;diff=12507</id>
		<title>DTMF</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=DTMF&amp;diff=12507"/>
				<updated>2007-07-28T06:42:37Z</updated>
		
		<summary type="html">&lt;p&gt;Hackgreti: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Ausbauwunsch|C und Assembler-Programmbeispiele}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
DTMF - (Dual Tone Multiple Frequency: „Doppeltonmehrfrequenz“) ist die bei der analogen Telefontechnik gebräuchliche Wähltechnik und ist das heute überwiegend in der Telefonvermittlungstechnik genutzte Verfahren zur Übermittlung der Rufnummer an das Telefonnetz oder einer Telefonanlage. &lt;br /&gt;
&lt;br /&gt;
=== Grundlagen ===&lt;br /&gt;
&lt;br /&gt;
Je nach Telefonziffer werden 2 Frequenzen üblagert. &lt;br /&gt;
&lt;br /&gt;
{| {{Blauetabelle}}&lt;br /&gt;
 |&lt;br /&gt;
 |1209 Hz&lt;br /&gt;
 |1336 Hz&lt;br /&gt;
 |1477 Hz&lt;br /&gt;
 |1633 Hz&lt;br /&gt;
 |-&lt;br /&gt;
 |697 Hz&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;1&amp;lt;/div&amp;gt;&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;2&amp;lt;/div&amp;gt;&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;3&amp;lt;/div&amp;gt;&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;A&amp;lt;/div&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 |770 Hz&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;4&amp;lt;/div&amp;gt;&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;5&amp;lt;/div&amp;gt;&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;6&amp;lt;/div&amp;gt;&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;B&amp;lt;/div&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 |852 Hz&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;7&amp;lt;/div&amp;gt;&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;8&amp;lt;/div&amp;gt;&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;9&amp;lt;/div&amp;gt;&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;C&amp;lt;/div&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 |941 Hz&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;*&amp;lt;/div&amp;gt;&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;0&amp;lt;/div&amp;gt;&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;#&amp;lt;/div&amp;gt;&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;A&amp;lt;/div&amp;gt;&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
Diese Töne werden von der Telefonvermittlung erkannt und der Teilnehmer mit der entsprechenden Nummer verbunden. Wobei die Buchstaben A-D nur bei speziellen Anwendungen verwendet werden.&lt;br /&gt;
&lt;br /&gt;
=== AVR &amp;amp; DTMF ===&lt;br /&gt;
&lt;br /&gt;
==== Bascom ====&lt;br /&gt;
&lt;br /&gt;
Mit [[Bascom]] kann man leicht einen solchen Ton generieren:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Dtmfout&lt;br /&gt;
&lt;br /&gt;
Syntax:&lt;br /&gt;
Dtmfout String, Dtmftime&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Dabei ist Dtmftime die Dauer des Tones´. Damit ein Telefon den Ton als einen DTMF-Ton erkennt, sollte die Dauer min. 70ms betragen.&lt;br /&gt;
&lt;br /&gt;
Hier ein Programmbeispiel:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$regfile = &amp;quot;2313def.dat&amp;quot;&lt;br /&gt;
$crystal = 4000000&lt;br /&gt;
&lt;br /&gt;
Dim Counter As Byte&lt;br /&gt;
&lt;br /&gt;
Enable Interrupts&lt;br /&gt;
&lt;br /&gt;
Do&lt;br /&gt;
  For Counter = 0 To 15&lt;br /&gt;
    Dtmfout Counter , 200&lt;br /&gt;
    Waitms 250&lt;br /&gt;
  Next Counter&lt;br /&gt;
  Wait 1&lt;br /&gt;
Loop&lt;br /&gt;
&lt;br /&gt;
End&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das obrige Programm erzeugt alle 16 DTMF-Töne nacheinander auf dem OC1 Port eines AVRs. Bascom benützt Timer1 für die DTMF Generierung.&lt;br /&gt;
----&lt;br /&gt;
Folgendes sollte beim Programmieren beachtet werden:&lt;br /&gt;
Die Reihenfolge ist: '' 0,1,2,3,4,5,6,7,8,9,A,B,C,D,*,#. &amp;lt;br/&amp;gt; ''&lt;br /&gt;
Das bedeutet der DTMF-Wert für die Raute, ist 15. Für die Zahl 3 ist er 4...usw&lt;br /&gt;
&lt;br /&gt;
'' Autor: hackgreti ''&lt;br /&gt;
[[Kategorie:Microcontroller]]&lt;br /&gt;
[[Kategorie:Elektronik]]&lt;br /&gt;
[[Kategorie:Quellcode Bascom ]]&lt;br /&gt;
[[Kategorie:Quellcode C]]&lt;br /&gt;
[[Kategorie:Quellcode Assembler AVR]]&lt;/div&gt;</summary>
		<author><name>Hackgreti</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=DTMF&amp;diff=12506</id>
		<title>DTMF</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=DTMF&amp;diff=12506"/>
				<updated>2007-07-28T06:41:12Z</updated>
		
		<summary type="html">&lt;p&gt;Hackgreti: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Ausbauwunsch|Mehr Grundlagen und vor allem C-Programmbeispiele/ Algorithmen etc.}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
DTMF - (Dual Tone Multiple Frequency: „Doppeltonmehrfrequenz“) ist die bei der analogen Telefontechnik gebräuchliche Wähltechnik und ist das heute überwiegend in der Telefonvermittlungstechnik genutzte Verfahren zur Übermittlung der Rufnummer an das Telefonnetz oder einer Telefonanlage. &lt;br /&gt;
&lt;br /&gt;
=== Grundlagen ===&lt;br /&gt;
&lt;br /&gt;
Je nach Telefonziffer werden 2 Frequenzen üblagert. &lt;br /&gt;
&lt;br /&gt;
{| {{Blauetabelle}}&lt;br /&gt;
 |&lt;br /&gt;
 |1209 Hz&lt;br /&gt;
 |1336 Hz&lt;br /&gt;
 |1477 Hz&lt;br /&gt;
 |1633 Hz&lt;br /&gt;
 |-&lt;br /&gt;
 |697 Hz&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;1&amp;lt;/div&amp;gt;&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;2&amp;lt;/div&amp;gt;&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;3&amp;lt;/div&amp;gt;&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;A&amp;lt;/div&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 |770 Hz&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;4&amp;lt;/div&amp;gt;&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;5&amp;lt;/div&amp;gt;&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;6&amp;lt;/div&amp;gt;&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;B&amp;lt;/div&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 |852 Hz&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;7&amp;lt;/div&amp;gt;&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;8&amp;lt;/div&amp;gt;&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;9&amp;lt;/div&amp;gt;&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;C&amp;lt;/div&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 |941 Hz&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;*&amp;lt;/div&amp;gt;&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;0&amp;lt;/div&amp;gt;&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;#&amp;lt;/div&amp;gt;&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;A&amp;lt;/div&amp;gt;&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
Diese Töne werden von der Telefonvermittlung erkannt und der Teilnehmer mit der entsprechenden Nummer verbunden. Wobei die Buchstaben A-D nur bei speziellen Anwendungen verwendet werden.&lt;br /&gt;
&lt;br /&gt;
=== AVR &amp;amp; DTMF ===&lt;br /&gt;
&lt;br /&gt;
==== Bascom ====&lt;br /&gt;
&lt;br /&gt;
Mit [[Bascom]] kann man leicht einen solchen Ton generieren:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Dtmfout&lt;br /&gt;
&lt;br /&gt;
Syntax:&lt;br /&gt;
Dtmfout String, Dtmftime&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Dabei ist Dtmftime die Dauer des Tones´. Damit ein Telefon den Ton als einen DTMF-Ton erkennt, sollte die Dauer min. 70ms betragen.&lt;br /&gt;
&lt;br /&gt;
Hier ein Programmbeispiel:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$regfile = &amp;quot;2313def.dat&amp;quot;&lt;br /&gt;
$crystal = 4000000&lt;br /&gt;
&lt;br /&gt;
Dim Counter As Byte&lt;br /&gt;
&lt;br /&gt;
Enable Interrupts&lt;br /&gt;
&lt;br /&gt;
Do&lt;br /&gt;
  For Counter = 0 To 15&lt;br /&gt;
    Dtmfout Counter , 200&lt;br /&gt;
    Waitms 250&lt;br /&gt;
  Next Counter&lt;br /&gt;
  Wait 1&lt;br /&gt;
Loop&lt;br /&gt;
&lt;br /&gt;
End&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das obrige Programm erzeugt alle 16 DTMF-Töne nacheinander auf dem OC1 Port eines AVRs. Bascom benützt Timer1 für die DTMF Generierung.&lt;br /&gt;
----&lt;br /&gt;
Folgendes sollte beim Programmieren beachtet werden:&lt;br /&gt;
Die Reihenfolge ist: '' 0,1,2,3,4,5,6,7,8,9,A,B,C,D,*,#. &amp;lt;br/&amp;gt; ''&lt;br /&gt;
Das bedeutet der DTMF-Wert für die Raute, ist 15. Für die Zahl 3 ist er 4...usw&lt;br /&gt;
&lt;br /&gt;
'' Autor: hackgreti ''&lt;br /&gt;
[[Kategorie:Microcontroller]]&lt;br /&gt;
[[Kategorie:Elektronik]]&lt;br /&gt;
[[Kategorie:Quellcode Bascom ]]&lt;br /&gt;
[[Kategorie:Quellcode C]]&lt;br /&gt;
[[Kategorie:Quellcode Assembler AVR]]&lt;/div&gt;</summary>
		<author><name>Hackgreti</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=DTMF&amp;diff=12505</id>
		<title>DTMF</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=DTMF&amp;diff=12505"/>
				<updated>2007-07-28T06:40:18Z</updated>
		
		<summary type="html">&lt;p&gt;Hackgreti: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Ausbauwunsch|Mehr Grundlagen und vor allem C-Programmbeispiele/ Algorithmen etc.}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
DTMF - (Dual Tone Multiple Frequency: „Doppeltonmehrfrequenz“) ist die bei der analogen Telefontechnik gebräuchliche Wähltechnik und ist das heute überwiegend in der Telefonvermittlungstechnik genutzte Verfahren zur Übermittlung der Rufnummer an das Telefonnetz oder einer Telefonanlage. &lt;br /&gt;
&lt;br /&gt;
=== Grundlagen ===&lt;br /&gt;
&lt;br /&gt;
Je nach Telefonziffer werden 2 Frequenzen üblagert. &lt;br /&gt;
&lt;br /&gt;
{| {{Blauetabelle}}&lt;br /&gt;
 |&lt;br /&gt;
 |1209 Hz&lt;br /&gt;
 |1336 Hz&lt;br /&gt;
 |1477 Hz&lt;br /&gt;
 |1633 Hz&lt;br /&gt;
 |-&lt;br /&gt;
 |697 Hz&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;1&amp;lt;/div&amp;gt;&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;2&amp;lt;/div&amp;gt;&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;3&amp;lt;/div&amp;gt;&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;A&amp;lt;/div&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 |770 Hz&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;4&amp;lt;/div&amp;gt;&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;5&amp;lt;/div&amp;gt;&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;6&amp;lt;/div&amp;gt;&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;B&amp;lt;/div&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 |852 Hz&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;7&amp;lt;/div&amp;gt;&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;8&amp;lt;/div&amp;gt;&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;9&amp;lt;/div&amp;gt;&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;C&amp;lt;/div&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 |941 Hz&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;*&amp;lt;/div&amp;gt;&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;0&amp;lt;/div&amp;gt;&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;#&amp;lt;/div&amp;gt;&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;A&amp;lt;/div&amp;gt;&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
Diese Töne werden von der Telefonvermittlung erkannt und der Teilnehmer mit der entsprechenden Nummer verbunden. Wobei die Buchstaben A-D nur bei speziellen Anwendungen verwendet werden.&lt;br /&gt;
&lt;br /&gt;
=== AVR &amp;amp; DTMF ===&lt;br /&gt;
&lt;br /&gt;
==== Bascom ====&lt;br /&gt;
&lt;br /&gt;
Mit [[Bascom]] kann man leicht einen solchen Ton generieren:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Dtmfout&lt;br /&gt;
&lt;br /&gt;
Syntax:&lt;br /&gt;
Dtmfout String, Dtmftime&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Dabei ist Dtmftime die Dauer des Tones´. Damit ein Telefon den Ton als einen DTMF-Ton erkennt, sollte die Dauer min. 70ms betragen.&lt;br /&gt;
&lt;br /&gt;
Hier ein Programmbeispiel:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$regfile = &amp;quot;2313def.dat&amp;quot;&lt;br /&gt;
$crystal = 4000000&lt;br /&gt;
&lt;br /&gt;
Dim Counter As Byte&lt;br /&gt;
&lt;br /&gt;
Enable Interrupts&lt;br /&gt;
&lt;br /&gt;
Do&lt;br /&gt;
  For Counter = 0 To 15&lt;br /&gt;
    Dtmfout Counter , 200&lt;br /&gt;
    Waitms 250&lt;br /&gt;
  Next Counter&lt;br /&gt;
  Wait 1&lt;br /&gt;
Loop&lt;br /&gt;
&lt;br /&gt;
End&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das obrige Programm erzeugt alle 16 DTMF-Töne nacheinander auf dem OC1 Port eines AVRs. Bascom benützt Timer1 für die DTMF Generierung.&lt;br /&gt;
----&lt;br /&gt;
Folgendes sollte beim Programmieren beachtet werden:&lt;br /&gt;
Die Reihenfolge ist: '' 0,1,2,3,4,5,6,7,8,9,A,B,C,D,*,#. &amp;lt;br/&amp;gt; ''&lt;br /&gt;
Das bedeutet der DTMF-Wert für die Raute, ist 15. Für die Zahl 3 ist er 4...usw&lt;br /&gt;
&lt;br /&gt;
'' Autor: hackgreti ''&lt;br /&gt;
[[Kategorie:Microcontroller]]&lt;br /&gt;
[[Kategorie:Elektronik]]&lt;br /&gt;
[[Kategorie:Quellcode Bascom ]]&lt;br /&gt;
[[Kategorie:Quellcode C]]&lt;br /&gt;
[[Kategorie:Quellc.Assembler AVR ]]&lt;/div&gt;</summary>
		<author><name>Hackgreti</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=DTMF&amp;diff=12504</id>
		<title>DTMF</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=DTMF&amp;diff=12504"/>
				<updated>2007-07-28T06:38:29Z</updated>
		
		<summary type="html">&lt;p&gt;Hackgreti: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Ausbauwunsch|Mehr Grundlagen und vor allem C-Programmbeispiele/ Algorithmen etc.}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
DTMF - (Dual Tone Multiple Frequency: „Doppeltonmehrfrequenz“) ist die bei der analogen Telefontechnik gebräuchliche Wähltechnik und ist das heute überwiegend in der Telefonvermittlungstechnik genutzte Verfahren zur Übermittlung der Rufnummer an das Telefonnetz oder einer Telefonanlage. &lt;br /&gt;
&lt;br /&gt;
=== Grundlagen ===&lt;br /&gt;
&lt;br /&gt;
Je nach Telefonziffer werden 2 Frequenzen üblagert. &lt;br /&gt;
&lt;br /&gt;
{| {{Blauetabelle}}&lt;br /&gt;
 |&lt;br /&gt;
 |1209 Hz&lt;br /&gt;
 |1336 Hz&lt;br /&gt;
 |1477 Hz&lt;br /&gt;
 |1633 Hz&lt;br /&gt;
 |-&lt;br /&gt;
 |697 Hz&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;1&amp;lt;/div&amp;gt;&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;2&amp;lt;/div&amp;gt;&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;3&amp;lt;/div&amp;gt;&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;A&amp;lt;/div&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 |770 Hz&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;4&amp;lt;/div&amp;gt;&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;5&amp;lt;/div&amp;gt;&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;6&amp;lt;/div&amp;gt;&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;B&amp;lt;/div&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 |852 Hz&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;7&amp;lt;/div&amp;gt;&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;8&amp;lt;/div&amp;gt;&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;9&amp;lt;/div&amp;gt;&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;C&amp;lt;/div&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 |941 Hz&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;*&amp;lt;/div&amp;gt;&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;0&amp;lt;/div&amp;gt;&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;#&amp;lt;/div&amp;gt;&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;A&amp;lt;/div&amp;gt;&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
Diese Töne werden von der Telefonvermittlung erkannt und der Teilnehmer mit der entsprechenden Nummer verbunden. Wobei die Buchstaben A-D nur bei speziellen Anwendungen verwendet werden.&lt;br /&gt;
&lt;br /&gt;
=== AVR &amp;amp; DTMF ===&lt;br /&gt;
&lt;br /&gt;
==== Bascom ====&lt;br /&gt;
&lt;br /&gt;
Mit [[Bascom]] kann man leicht einen solchen Ton generieren:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Dtmfout&lt;br /&gt;
&lt;br /&gt;
Syntax:&lt;br /&gt;
Dtmfout String, Dtmftime&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Dabei ist Dtmftime die Dauer des Tones´. Damit ein Telefon den Ton als einen DTMF-Ton erkennt, sollte die Dauer min. 70ms betragen.&lt;br /&gt;
&lt;br /&gt;
Hier ein Programmbeispiel:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$regfile = &amp;quot;2313def.dat&amp;quot;&lt;br /&gt;
$crystal = 4000000&lt;br /&gt;
&lt;br /&gt;
Dim Counter As Byte&lt;br /&gt;
&lt;br /&gt;
Enable Interrupts&lt;br /&gt;
&lt;br /&gt;
Do&lt;br /&gt;
  For Counter = 0 To 15&lt;br /&gt;
    Dtmfout Counter , 200&lt;br /&gt;
    Waitms 250&lt;br /&gt;
  Next Counter&lt;br /&gt;
  Wait 1&lt;br /&gt;
Loop&lt;br /&gt;
&lt;br /&gt;
End&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das obrige Programm erzeugt alle 16 DTMF-Töne nacheinander auf dem OC1 Port eines AVRs. Bascom benützt Timer1 für die DTMF Generierung.&lt;br /&gt;
----&lt;br /&gt;
Folgendes sollte beim Programmieren beachtet werden:&lt;br /&gt;
Die Reihenfolge ist: '' 0,1,2,3,4,5,6,7,8,9,A,B,C,D,*,#. &amp;lt;br/&amp;gt; ''&lt;br /&gt;
Das bedeutet der DTMF-Wert für die Raute, ist 15. Für die Zahl 3 ist er 4...usw&lt;br /&gt;
&lt;br /&gt;
'' Autor: hackgreti ''&lt;br /&gt;
[[Kategorie:Microcontroller]]&lt;/div&gt;</summary>
		<author><name>Hackgreti</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=DTMF&amp;diff=12503</id>
		<title>DTMF</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=DTMF&amp;diff=12503"/>
				<updated>2007-07-28T06:37:56Z</updated>
		
		<summary type="html">&lt;p&gt;Hackgreti: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Ausbauwunsch|Mehr Grundlagen und vor allem C-Programmbeispiele/ Algorithmen etc.}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
DTMF - (Dual Tone Multiple Frequency: „Doppeltonmehrfrequenz“) ist die bei der analogen Telefontechnik gebräuchliche Wähltechnik und ist das heute überwiegend in der Telefonvermittlungstechnik genutzte Verfahren zur Übermittlung der Rufnummer an das Telefonnetz oder einer Telefonanlage. &lt;br /&gt;
&lt;br /&gt;
=== Grundlagen ===&lt;br /&gt;
&lt;br /&gt;
Je nach Telefonziffer werden 2 Frequenzen üblagert. &lt;br /&gt;
&lt;br /&gt;
{| {{Blauetabelle}}&lt;br /&gt;
 |&lt;br /&gt;
 |1209 Hz&lt;br /&gt;
 |1336 Hz&lt;br /&gt;
 |1477 Hz&lt;br /&gt;
 |1633 Hz&lt;br /&gt;
 |-&lt;br /&gt;
 |697 Hz&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;1&amp;lt;/div&amp;gt;&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;2&amp;lt;/div&amp;gt;&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;3&amp;lt;/div&amp;gt;&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;A&amp;lt;/div&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 |770 Hz&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;4&amp;lt;/div&amp;gt;&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;5&amp;lt;/div&amp;gt;&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;6&amp;lt;/div&amp;gt;&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;B&amp;lt;/div&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 |852 Hz&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;7&amp;lt;/div&amp;gt;&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;8&amp;lt;/div&amp;gt;&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;9&amp;lt;/div&amp;gt;&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;C&amp;lt;/div&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 |941 Hz&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;*&amp;lt;/div&amp;gt;&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;0&amp;lt;/div&amp;gt;&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;#&amp;lt;/div&amp;gt;&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;A&amp;lt;/div&amp;gt;&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
Diese Töne werden von der Telefonvermittlung erkannt und der Teilnehmer mit der entsprechenden Nummer verbunden. Wobei die Buchstaben A-D nur bei speziellen Anwendungen verwendet werden.&lt;br /&gt;
&lt;br /&gt;
=== AVR &amp;amp; DTMF ===&lt;br /&gt;
&lt;br /&gt;
==== Bascom ====&lt;br /&gt;
&lt;br /&gt;
Mit [[Bascom]] kann man leicht einen solchen Ton generieren:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Dtmfout&lt;br /&gt;
&lt;br /&gt;
Syntax:&lt;br /&gt;
Dtmfout String, Dtmftime&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Dabei ist Dtmftime die Dauer des Tones´. Damit ein Telefon den Ton als einen DTMF-Ton erkennt, sollte die Dauer min. 70ms betragen.&lt;br /&gt;
&lt;br /&gt;
Hier ein Programmbeispiel:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$regfile = &amp;quot;2313def.dat&amp;quot;&lt;br /&gt;
$crystal = 4000000&lt;br /&gt;
&lt;br /&gt;
Dim Counter As Byte&lt;br /&gt;
&lt;br /&gt;
Enable Interrupts&lt;br /&gt;
&lt;br /&gt;
Do&lt;br /&gt;
  For Counter = 0 To 15&lt;br /&gt;
    Dtmfout Counter , 200&lt;br /&gt;
    Waitms 250&lt;br /&gt;
  Next Counter&lt;br /&gt;
  Wait 1&lt;br /&gt;
Loop&lt;br /&gt;
&lt;br /&gt;
End&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das obrige Programm erzeugt alle 16 DTMF-Töne nacheinander auf dem OC1 Port eines AVRs. Bascom benützt Timer1 für die DTMF Generierung.&lt;br /&gt;
----&lt;br /&gt;
Folgendes sollte beim Programmieren beachtet werden:&lt;br /&gt;
Die Reihenfolge ist: '' 0,1,2,3,4,5,6,7,8,9,A,B,C,D,*,#. &amp;lt;br/&amp;gt; ''&lt;br /&gt;
Das bedeutet der DTMF-Wert für die Raute, ist 15. Für die Zahl 3 ist er 4...usw&lt;br /&gt;
&lt;br /&gt;
-- Autor: hackgreti --&lt;br /&gt;
[[Kategorie:Microcontroller]]&lt;/div&gt;</summary>
		<author><name>Hackgreti</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=DTMF&amp;diff=12502</id>
		<title>DTMF</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=DTMF&amp;diff=12502"/>
				<updated>2007-07-28T06:35:17Z</updated>
		
		<summary type="html">&lt;p&gt;Hackgreti: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Ausbauwunsch|Mehr Grundlagen und vor allem C-Programmbeispiele/ Algorithmen etc.}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
DTMF - (Dual Tone Multiple Frequency: „Doppeltonmehrfrequenz“) ist die bei der analogen Telefontechnik gebräuchliche Wähltechnik und ist das heute überwiegend in der Telefonvermittlungstechnik genutzte Verfahren zur Übermittlung der Rufnummer an das Telefonnetz oder einer Telefonanlage. &lt;br /&gt;
&lt;br /&gt;
=== Grundlagen ===&lt;br /&gt;
&lt;br /&gt;
Je nach Telefonziffer werden 2 Frequenzen üblagert. &lt;br /&gt;
&lt;br /&gt;
{| {{Blauetabelle}}&lt;br /&gt;
 |&lt;br /&gt;
 |1209 Hz&lt;br /&gt;
 |1336 Hz&lt;br /&gt;
 |1477 Hz&lt;br /&gt;
 |1633 Hz&lt;br /&gt;
 |-&lt;br /&gt;
 |697 Hz&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;1&amp;lt;/div&amp;gt;&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;2&amp;lt;/div&amp;gt;&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;3&amp;lt;/div&amp;gt;&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;A&amp;lt;/div&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 |770 Hz&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;4&amp;lt;/div&amp;gt;&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;5&amp;lt;/div&amp;gt;&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;6&amp;lt;/div&amp;gt;&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;B&amp;lt;/div&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 |852 Hz&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;7&amp;lt;/div&amp;gt;&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;8&amp;lt;/div&amp;gt;&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;9&amp;lt;/div&amp;gt;&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;C&amp;lt;/div&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 |941 Hz&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;*&amp;lt;/div&amp;gt;&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;0&amp;lt;/div&amp;gt;&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;#&amp;lt;/div&amp;gt;&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;A&amp;lt;/div&amp;gt;&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
Diese Töne werden von der Telefonvermittlung erkannt und der Teilnehmer mit der entsprechenden Nummer verbunden. Wobei die Buchstaben A-D nur bei speziellen Anwendungen verwendet werden.&lt;br /&gt;
&lt;br /&gt;
=== AVR &amp;amp; DTMF ===&lt;br /&gt;
&lt;br /&gt;
==== Bascom ====&lt;br /&gt;
&lt;br /&gt;
Mit [[Bascom]] kann man leicht einen solchen Ton generieren:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Dtmfout&lt;br /&gt;
&lt;br /&gt;
Syntax:&lt;br /&gt;
Dtmfout String, Dtmftime&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Dabei ist Dtmftime die Dauer des Tones´. Damit ein Telefon den Ton als einen DTMF-Ton erkennt, sollte die Dauer min. 70ms betragen.&lt;br /&gt;
&lt;br /&gt;
Hier ein Programmbeispiel:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$regfile = &amp;quot;2313def.dat&amp;quot;&lt;br /&gt;
$crystal = 4000000&lt;br /&gt;
&lt;br /&gt;
Dim Counter As Byte&lt;br /&gt;
&lt;br /&gt;
Enable Interrupts&lt;br /&gt;
&lt;br /&gt;
Do&lt;br /&gt;
  For Counter = 0 To 15&lt;br /&gt;
    Dtmfout Counter , 200&lt;br /&gt;
    Waitms 250&lt;br /&gt;
  Next Counter&lt;br /&gt;
  Wait 1&lt;br /&gt;
Loop&lt;br /&gt;
&lt;br /&gt;
End&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das obrige Programm erzeugt alle 16 DTMF-Töne nacheinander auf dem OC1 Port eines AVRs. Bascom benützt Timer1 für die DTMF Generierung.&lt;br /&gt;
----&lt;br /&gt;
Folgendes sollte beim Programmieren beachtet werden:&lt;br /&gt;
Die Reihenfolge ist: '' 0,1,2,3,4,5,6,7,8,9,A,B,C,D,*,#. &amp;lt;br/&amp;gt; ''&lt;br /&gt;
Das bedeutet der DTMF-Wert für die Raute, ist 15. Für die Zahl 3 ist er 4...usw&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Microcontroller]]&lt;/div&gt;</summary>
		<author><name>Hackgreti</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=DTMF&amp;diff=12501</id>
		<title>DTMF</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=DTMF&amp;diff=12501"/>
				<updated>2007-07-28T06:31:23Z</updated>
		
		<summary type="html">&lt;p&gt;Hackgreti: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Ausbauwunsch|Mehr Grundlagen und vor allem C-Programmbeispiele/ Algorithmen etc.}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
DTMF - (Dual Tone Multiple Frequency: „Doppeltonmehrfrequenz“) ist die bei der analogen Telefontechnik gebräuchliche Wähltechnik und ist das heute überwiegend in der Telefonvermittlungstechnik genutzte Verfahren zur Übermittlung der Rufnummer an das Telefonnetz oder einer Telefonanlage. &lt;br /&gt;
&lt;br /&gt;
=== Grundlagen ===&lt;br /&gt;
&lt;br /&gt;
Je nach Telefonziffer werden 2 Frequenzen üblagert. &lt;br /&gt;
&lt;br /&gt;
{| {{Blauetabelle}}&lt;br /&gt;
 |&lt;br /&gt;
 |1209 Hz&lt;br /&gt;
 |1336 Hz&lt;br /&gt;
 |1477 Hz&lt;br /&gt;
 |1633 Hz&lt;br /&gt;
 |-&lt;br /&gt;
 |697 Hz&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;1&amp;lt;/div&amp;gt;&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;2&amp;lt;/div&amp;gt;&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;3&amp;lt;/div&amp;gt;&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;A&amp;lt;/div&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 |770 Hz&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;4&amp;lt;/div&amp;gt;&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;5&amp;lt;/div&amp;gt;&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;6&amp;lt;/div&amp;gt;&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;B&amp;lt;/div&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 |852 Hz&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;7&amp;lt;/div&amp;gt;&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;8&amp;lt;/div&amp;gt;&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;9&amp;lt;/div&amp;gt;&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;C&amp;lt;/div&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 |941 Hz&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;*&amp;lt;/div&amp;gt;&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;0&amp;lt;/div&amp;gt;&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;#&amp;lt;/div&amp;gt;&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;A&amp;lt;/div&amp;gt;&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
Diese Töne werden von der Telefonvermittlung erkannt und der Teilnehmer mit der entsprechenden Nummer verbunden. Wobei die Buchstaben A-D nur bei speziellen Anwendungen verwendet werden.&lt;br /&gt;
&lt;br /&gt;
=== AVR &amp;amp; DTMF ===&lt;br /&gt;
&lt;br /&gt;
==== Bascom ====&lt;br /&gt;
&lt;br /&gt;
Mit [[Bascom]] kann man leicht einen solchen Ton generieren:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Dtmfout&lt;br /&gt;
&lt;br /&gt;
Syntax:&lt;br /&gt;
Dtmfout String, Dtmftime&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier ein Programmbeispiel:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$regfile = &amp;quot;2313def.dat&amp;quot;&lt;br /&gt;
$crystal = 4000000&lt;br /&gt;
&lt;br /&gt;
Dim Counter As Byte&lt;br /&gt;
&lt;br /&gt;
Enable Interrupts&lt;br /&gt;
&lt;br /&gt;
Do&lt;br /&gt;
  For Counter = 0 To 15&lt;br /&gt;
    Dtmfout Counter , 500&lt;br /&gt;
    Waitms 250&lt;br /&gt;
  Next Counter&lt;br /&gt;
  Wait 1&lt;br /&gt;
Loop&lt;br /&gt;
&lt;br /&gt;
End&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das obrige Programm erzeugt alle 16 DTMF-Töne nacheinander auf dem OC1 Port eines AVRs. Bascom benützt Timer1 für die DTMF Generierung.&lt;br /&gt;
----&lt;br /&gt;
Folgendes sollte beim Programmieren beachtet werden:&lt;br /&gt;
Die Reihenfolge ist: '' 0,1,2,3,4,5,6,7,8,9,A,B,C,D,*,#. &amp;lt;br/&amp;gt; ''&lt;br /&gt;
Das bedeutet der DTMF-Wert für die Raute, ist 15. Für die Zahl 3 ist er 4...usw&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Microcontroller]]&lt;/div&gt;</summary>
		<author><name>Hackgreti</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=DTMF&amp;diff=12499</id>
		<title>DTMF</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=DTMF&amp;diff=12499"/>
				<updated>2007-07-28T06:29:37Z</updated>
		
		<summary type="html">&lt;p&gt;Hackgreti: Dtmf wurde nach DTMF verschoben&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Ausbauwunsch|Mehr Grundlagen und vor allem C-Programmbeispiele/ Algorithmen etc.}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
DTMF - (Dual Tone Multiple Frequency: „Doppeltonmehrfrequenz“) ist die bei der analogen Telefontechnik gebräuchliche Wähltechnik und ist das heute überwiegend in der Telefonvermittlungstechnik genutzte Verfahren zur Übermittlung der Rufnummer an das Telefonnetz oder einer Telefonanlage. &lt;br /&gt;
&lt;br /&gt;
=== Grundlagen ===&lt;br /&gt;
&lt;br /&gt;
Je nach Telefonziffer werden 2 Frequenzen üblagert. &lt;br /&gt;
&lt;br /&gt;
{| {{Blauetabelle}}&lt;br /&gt;
 |&lt;br /&gt;
 |1209 Hz&lt;br /&gt;
 |1336 Hz&lt;br /&gt;
 |1477 Hz&lt;br /&gt;
 |1633 Hz&lt;br /&gt;
 |-&lt;br /&gt;
 |697 Hz&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;1&amp;lt;/div&amp;gt;&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;2&amp;lt;/div&amp;gt;&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;3&amp;lt;/div&amp;gt;&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;A&amp;lt;/div&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 |770 Hz&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;4&amp;lt;/div&amp;gt;&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;5&amp;lt;/div&amp;gt;&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;6&amp;lt;/div&amp;gt;&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;B&amp;lt;/div&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 |852 Hz&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;7&amp;lt;/div&amp;gt;&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;8&amp;lt;/div&amp;gt;&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;9&amp;lt;/div&amp;gt;&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;C&amp;lt;/div&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 |941 Hz&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;*&amp;lt;/div&amp;gt;&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;0&amp;lt;/div&amp;gt;&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;#&amp;lt;/div&amp;gt;&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;A&amp;lt;/div&amp;gt;&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
Diese Töne werden von der Telefonvermittlung erkannt und der Teilnehmer mit der entsprechenden Nummer verbunden. Wobei die Buchstaben A-D nur bei speziellen Anwendungen verwendet werden.&lt;br /&gt;
&lt;br /&gt;
=== AVR &amp;amp; DTMF ===&lt;br /&gt;
&lt;br /&gt;
==== Bascom ====&lt;br /&gt;
&lt;br /&gt;
Mit [[Bascom]] kann man leicht einen solchen Ton generieren:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Dtmfout&lt;br /&gt;
&lt;br /&gt;
Syntax:&lt;br /&gt;
Dtmfout String, Dtmftime&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier ein Programmbeispiel:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$regfile = &amp;quot;2313def.dat&amp;quot;&lt;br /&gt;
$crystal = 4000000&lt;br /&gt;
&lt;br /&gt;
Dim Counter As Byte&lt;br /&gt;
&lt;br /&gt;
Enable Interrupts&lt;br /&gt;
&lt;br /&gt;
Do&lt;br /&gt;
  For Counter = 0 To 15&lt;br /&gt;
    Dtmfout Counter , 500&lt;br /&gt;
    Waitms 250&lt;br /&gt;
  Next Counter&lt;br /&gt;
  Wait 1&lt;br /&gt;
Loop&lt;br /&gt;
&lt;br /&gt;
End&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das obrige Programm erzeugt alle 16 DTMF-Töne nacheinander auf dem OC1 Port eines AVRs. Bascom benützt Timer1 für die DTMF generierung.&lt;br /&gt;
----&lt;br /&gt;
Folgendes sollte beim Programmieren beachtet werden:&lt;br /&gt;
Die Reihenfolge ist: '' 0,1,2,3,4,5,6,7,8,9,A,B,C,D,*,#. &amp;lt;br/&amp;gt; ''&lt;br /&gt;
Das bedeutet der DTMF-Wert für die Raute, ist 15. Für die Zahl 3 ist er 4...usw&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Microcontroller]]&lt;/div&gt;</summary>
		<author><name>Hackgreti</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Dtmf&amp;diff=12500</id>
		<title>Dtmf</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Dtmf&amp;diff=12500"/>
				<updated>2007-07-28T06:29:37Z</updated>
		
		<summary type="html">&lt;p&gt;Hackgreti: Dtmf wurde nach DTMF verschoben&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#redirect [[DTMF]]&lt;/div&gt;</summary>
		<author><name>Hackgreti</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=DTMF&amp;diff=12498</id>
		<title>DTMF</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=DTMF&amp;diff=12498"/>
				<updated>2007-07-28T06:29:10Z</updated>
		
		<summary type="html">&lt;p&gt;Hackgreti: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Ausbauwunsch|Mehr Grundlagen und vor allem C-Programmbeispiele/ Algorithmen etc.}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
DTMF - (Dual Tone Multiple Frequency: „Doppeltonmehrfrequenz“) ist die bei der analogen Telefontechnik gebräuchliche Wähltechnik und ist das heute überwiegend in der Telefonvermittlungstechnik genutzte Verfahren zur Übermittlung der Rufnummer an das Telefonnetz oder einer Telefonanlage. &lt;br /&gt;
&lt;br /&gt;
=== Grundlagen ===&lt;br /&gt;
&lt;br /&gt;
Je nach Telefonziffer werden 2 Frequenzen üblagert. &lt;br /&gt;
&lt;br /&gt;
{| {{Blauetabelle}}&lt;br /&gt;
 |&lt;br /&gt;
 |1209 Hz&lt;br /&gt;
 |1336 Hz&lt;br /&gt;
 |1477 Hz&lt;br /&gt;
 |1633 Hz&lt;br /&gt;
 |-&lt;br /&gt;
 |697 Hz&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;1&amp;lt;/div&amp;gt;&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;2&amp;lt;/div&amp;gt;&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;3&amp;lt;/div&amp;gt;&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;A&amp;lt;/div&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 |770 Hz&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;4&amp;lt;/div&amp;gt;&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;5&amp;lt;/div&amp;gt;&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;6&amp;lt;/div&amp;gt;&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;B&amp;lt;/div&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 |852 Hz&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;7&amp;lt;/div&amp;gt;&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;8&amp;lt;/div&amp;gt;&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;9&amp;lt;/div&amp;gt;&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;C&amp;lt;/div&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 |941 Hz&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;*&amp;lt;/div&amp;gt;&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;0&amp;lt;/div&amp;gt;&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;#&amp;lt;/div&amp;gt;&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;A&amp;lt;/div&amp;gt;&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
Diese Töne werden von der Telefonvermittlung erkannt und der Teilnehmer mit der entsprechenden Nummer verbunden. Wobei die Buchstaben A-D nur bei speziellen Anwendungen verwendet werden.&lt;br /&gt;
&lt;br /&gt;
=== AVR &amp;amp; DTMF ===&lt;br /&gt;
&lt;br /&gt;
==== Bascom ====&lt;br /&gt;
&lt;br /&gt;
Mit [[Bascom]] kann man leicht einen solchen Ton generieren:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Dtmfout&lt;br /&gt;
&lt;br /&gt;
Syntax:&lt;br /&gt;
Dtmfout String, Dtmftime&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier ein Programmbeispiel:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$regfile = &amp;quot;2313def.dat&amp;quot;&lt;br /&gt;
$crystal = 4000000&lt;br /&gt;
&lt;br /&gt;
Dim Counter As Byte&lt;br /&gt;
&lt;br /&gt;
Enable Interrupts&lt;br /&gt;
&lt;br /&gt;
Do&lt;br /&gt;
  For Counter = 0 To 15&lt;br /&gt;
    Dtmfout Counter , 500&lt;br /&gt;
    Waitms 250&lt;br /&gt;
  Next Counter&lt;br /&gt;
  Wait 1&lt;br /&gt;
Loop&lt;br /&gt;
&lt;br /&gt;
End&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das obrige Programm erzeugt alle 16 DTMF-Töne nacheinander auf dem OC1 Port eines AVRs. Bascom benützt Timer1 für die DTMF generierung.&lt;br /&gt;
----&lt;br /&gt;
Folgendes sollte beim Programmieren beachtet werden:&lt;br /&gt;
Die Reihenfolge ist: '' 0,1,2,3,4,5,6,7,8,9,A,B,C,D,*,#. &amp;lt;br/&amp;gt; ''&lt;br /&gt;
Das bedeutet der DTMF-Wert für die Raute, ist 15. Für die Zahl 3 ist er 4...usw&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Microcontroller]]&lt;/div&gt;</summary>
		<author><name>Hackgreti</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=DTMF&amp;diff=12497</id>
		<title>DTMF</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=DTMF&amp;diff=12497"/>
				<updated>2007-07-28T06:27:10Z</updated>
		
		<summary type="html">&lt;p&gt;Hackgreti: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Ausbauwunsch|Mehr Grundlagen und vor allem C-Programmbeispiele/ Algorithmen etc.}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dtmf - (Dual Tone Multiple Frequency: „Doppeltonmehrfrequenz“) ist die bei der analogen Telefontechnik gebräuchliche Wähltechnik und ist das heute überwiegend in der Telefonvermittlungstechnik genutzte Verfahren zur Übermittlung der Rufnummer an das Telefonnetz oder einer Telefonanlage. &lt;br /&gt;
&lt;br /&gt;
=== Grundlagen ===&lt;br /&gt;
&lt;br /&gt;
Je nach Telefonziffer werden 2 Frequenzen üblagert. &lt;br /&gt;
&lt;br /&gt;
{| {{Blauetabelle}}&lt;br /&gt;
 |&lt;br /&gt;
 |1209 Hz&lt;br /&gt;
 |1336 Hz&lt;br /&gt;
 |1477 Hz&lt;br /&gt;
 |1633 Hz&lt;br /&gt;
 |-&lt;br /&gt;
 |697 Hz&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;1&amp;lt;/div&amp;gt;&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;2&amp;lt;/div&amp;gt;&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;3&amp;lt;/div&amp;gt;&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;A&amp;lt;/div&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 |770 Hz&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;4&amp;lt;/div&amp;gt;&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;5&amp;lt;/div&amp;gt;&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;6&amp;lt;/div&amp;gt;&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;B&amp;lt;/div&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 |852 Hz&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;7&amp;lt;/div&amp;gt;&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;8&amp;lt;/div&amp;gt;&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;9&amp;lt;/div&amp;gt;&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;C&amp;lt;/div&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 |941 Hz&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;*&amp;lt;/div&amp;gt;&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;0&amp;lt;/div&amp;gt;&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;#&amp;lt;/div&amp;gt;&lt;br /&gt;
 |&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;A&amp;lt;/div&amp;gt;&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
Diese Töne werden von der Telefonvermittlung erkannt und der Teilnehmer mit der entsprechenden Nummer verbunden. Wobei die Buchstaben A-D nur bei speziellen Anwendungen verwendet werden.&lt;br /&gt;
&lt;br /&gt;
=== AVR &amp;amp; Dtmf ===&lt;br /&gt;
&lt;br /&gt;
==== Bascom ====&lt;br /&gt;
&lt;br /&gt;
Mit [[Bascom]] kann man leicht einen solchen Ton generieren:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Dtmfout&lt;br /&gt;
&lt;br /&gt;
Syntax:&lt;br /&gt;
Dtmfout String, Dtmftime&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier ein Programmbeispiel:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$regfile = &amp;quot;2313def.dat&amp;quot;&lt;br /&gt;
$crystal = 4000000&lt;br /&gt;
&lt;br /&gt;
Dim Counter As Byte&lt;br /&gt;
&lt;br /&gt;
Enable Interrupts&lt;br /&gt;
&lt;br /&gt;
Do&lt;br /&gt;
  For Counter = 0 To 15&lt;br /&gt;
    Dtmfout Counter , 500&lt;br /&gt;
    Waitms 250&lt;br /&gt;
  Next Counter&lt;br /&gt;
  Wait 1&lt;br /&gt;
Loop&lt;br /&gt;
&lt;br /&gt;
End&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das obrige Programm erzeugt alle 16 Dtmf-Töne nacheinander auf dem OC1 Port eines AVRs. Bascom benützt Timer1 für die Dtmf generierung.&lt;br /&gt;
----&lt;br /&gt;
Folgendes sollte beim Programmieren beachtet werden:&lt;br /&gt;
Die Reihenfolge ist: '' 0,1,2,3,4,5,6,7,8,9,A,B,C,D,*,#. &amp;lt;br/&amp;gt; ''&lt;br /&gt;
Das bedeutet der Dtmf-Wert für die Raute, ist 15. Für die Zahl 3 ist er 4...usw&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Microcontroller]]&lt;/div&gt;</summary>
		<author><name>Hackgreti</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=DTMF&amp;diff=12496</id>
		<title>DTMF</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=DTMF&amp;diff=12496"/>
				<updated>2007-07-28T05:53:38Z</updated>
		
		<summary type="html">&lt;p&gt;Hackgreti: /* AVR &amp;amp; Dtmf */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Ausbauwunsch|Mehr Grundlagen und vor allem C-Programmbeispiele/ Algorithmen etc.}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dtmf - (Dual Tone Multiple Frequency: „Doppeltonmehrfrequenz“) ist die bei der analogen Telefontechnik gebräuchliche Wähltechnik und ist das heute überwiegend in der Telefonvermittlungstechnik genutzte Verfahren zur Übermittlung der Rufnummer an das Telefonnetz oder einer Telefonanlage. &lt;br /&gt;
&lt;br /&gt;
=== Grundlagen ===&lt;br /&gt;
&lt;br /&gt;
Je nach Telefonziffer werden 2 Frequenzen üblagert. &lt;br /&gt;
&lt;br /&gt;
{| border=1&lt;br /&gt;
 |&lt;br /&gt;
 |1209 Hz&lt;br /&gt;
 |1336 Hz&lt;br /&gt;
 |1477 Hz&lt;br /&gt;
 |-&lt;br /&gt;
 |697 Hz&lt;br /&gt;
 |1&lt;br /&gt;
 |2&lt;br /&gt;
 |3&lt;br /&gt;
 |-&lt;br /&gt;
 |770 Hz&lt;br /&gt;
 |4&lt;br /&gt;
 |5&lt;br /&gt;
 |6&lt;br /&gt;
 |-&lt;br /&gt;
 |852 Hz&lt;br /&gt;
 |7&lt;br /&gt;
 |8&lt;br /&gt;
 |9&lt;br /&gt;
 |-&lt;br /&gt;
 |941 Hz&lt;br /&gt;
 |*&lt;br /&gt;
 |0&lt;br /&gt;
 |#&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
Diese Töne werden von der Telefonvermittlung erkannt und der Teilnehmer mit der entsprechenden Nummer verbunden.&lt;br /&gt;
&lt;br /&gt;
=== AVR &amp;amp; Dtmf ===&lt;br /&gt;
&lt;br /&gt;
==== Bascom ====&lt;br /&gt;
&lt;br /&gt;
Mit Bascom AVR kann man leicht einen solchen Ton generieren:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$regfile = &amp;quot;2313def.dat&amp;quot;&lt;br /&gt;
$crystal = 4000000&lt;br /&gt;
&lt;br /&gt;
Dim Counter As Byte&lt;br /&gt;
&lt;br /&gt;
Enable Interrupts&lt;br /&gt;
&lt;br /&gt;
Do&lt;br /&gt;
  For Counter = 0 To 15&lt;br /&gt;
    Dtmfout Counter , 500&lt;br /&gt;
    Waitms 250&lt;br /&gt;
  Next Counter&lt;br /&gt;
  Wait 1&lt;br /&gt;
Loop&lt;br /&gt;
&lt;br /&gt;
End&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Hackgreti</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=DTMF&amp;diff=12495</id>
		<title>DTMF</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=DTMF&amp;diff=12495"/>
				<updated>2007-07-27T09:49:56Z</updated>
		
		<summary type="html">&lt;p&gt;Hackgreti: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Ausbauwunsch|Mehr Grundlagen und vor allem C-Programmbeispiele/ Algorithmen etc.}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dtmf - (Dual Tone Multiple Frequency: „Doppeltonmehrfrequenz“) ist die bei der analogen Telefontechnik gebräuchliche Wähltechnik und ist das heute überwiegend in der Telefonvermittlungstechnik genutzte Verfahren zur Übermittlung der Rufnummer an das Telefonnetz oder einer Telefonanlage. &lt;br /&gt;
&lt;br /&gt;
=== Grundlagen ===&lt;br /&gt;
&lt;br /&gt;
Je nach Telefonziffer werden 2 Frequenzen üblagert. &lt;br /&gt;
&lt;br /&gt;
{| border=1&lt;br /&gt;
 |&lt;br /&gt;
 |1209 Hz&lt;br /&gt;
 |1336 Hz&lt;br /&gt;
 |1477 Hz&lt;br /&gt;
 |-&lt;br /&gt;
 |697 Hz&lt;br /&gt;
 |1&lt;br /&gt;
 |2&lt;br /&gt;
 |3&lt;br /&gt;
 |-&lt;br /&gt;
 |770 Hz&lt;br /&gt;
 |4&lt;br /&gt;
 |5&lt;br /&gt;
 |6&lt;br /&gt;
 |-&lt;br /&gt;
 |852 Hz&lt;br /&gt;
 |7&lt;br /&gt;
 |8&lt;br /&gt;
 |9&lt;br /&gt;
 |-&lt;br /&gt;
 |941 Hz&lt;br /&gt;
 |*&lt;br /&gt;
 |0&lt;br /&gt;
 |#&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
Diese Töne werden von der Telefonvermittlung erkannt und der Teilnehmer mit der entsprechenden Nummer verbunden.&lt;br /&gt;
&lt;br /&gt;
== AVR &amp;amp; Dtmf ==&lt;br /&gt;
&lt;br /&gt;
=== Bascom ===&lt;br /&gt;
&lt;br /&gt;
Mit Bascom AVR kann man leicht einen solchen Ton generieren:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$regfile = &amp;quot;2313def.dat&amp;quot;&lt;br /&gt;
$crystal = 4000000&lt;br /&gt;
&lt;br /&gt;
Dim Counter As Byte&lt;br /&gt;
&lt;br /&gt;
Enable Interrupts&lt;br /&gt;
&lt;br /&gt;
Do&lt;br /&gt;
  For Counter = 0 To 15&lt;br /&gt;
    Dtmfout Counter , 500&lt;br /&gt;
    Waitms 250&lt;br /&gt;
  Next Counter&lt;br /&gt;
  Wait 1&lt;br /&gt;
Loop&lt;br /&gt;
&lt;br /&gt;
End&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Hackgreti</name></author>	</entry>

	</feed>