<?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=T.r.Agent+D</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=T.r.Agent+D"/>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Spezial:Beitr%C3%A4ge/T.r.Agent_D"/>
		<updated>2026-04-11T20:44:37Z</updated>
		<subtitle>Benutzerbeiträge</subtitle>
		<generator>MediaWiki 1.25.1</generator>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Bascom&amp;diff=11975</id>
		<title>Bascom</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Bascom&amp;diff=11975"/>
				<updated>2007-05-13T09:19:58Z</updated>
		
		<summary type="html">&lt;p&gt;T.r.Agent D: /* I2C-Bus */&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>T.r.Agent D</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Bascom&amp;diff=11974</id>
		<title>Bascom</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Bascom&amp;diff=11974"/>
				<updated>2007-05-13T09:19:39Z</updated>
		
		<summary type="html">&lt;p&gt;T.r.Agent D: /* I2C-Bus */&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>T.r.Agent D</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Leiterplatten_herstellen_-_Toner-Transfer-Methode&amp;diff=8562</id>
		<title>Leiterplatten herstellen - Toner-Transfer-Methode</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Leiterplatten_herstellen_-_Toner-Transfer-Methode&amp;diff=8562"/>
				<updated>2006-08-24T16:04:40Z</updated>
		
		<summary type="html">&lt;p&gt;T.r.Agent D: /* Das Aufbügeln des Layouts */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{FarbigerRahmen|&lt;br /&gt;
Leider sind die Bilder für den Artikel verlorengegangen, wer welche nachtragen kann,  sollte dies tun.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Platinenmachen leicht gemacht - &amp;quot;Die Bügelmethode&amp;quot;==&lt;br /&gt;
&lt;br /&gt;
===Was ist die Bügelmethode?===&lt;br /&gt;
Die Bügelmethode ist eine Technik Platinen herzustellen, ohne sie belichten zu müssen. Das spart eine Menge Zeit und Geld und ist eine schnelle Methode, sich einen Prototyp zu erstellen.&lt;br /&gt;
Der Nachteil ist allerdings, dass man einen Laserdrucker/Kopierer benutzen muss. Das Ätzen bleibt einem leider nicht erspart.&lt;br /&gt;
&lt;br /&gt;
Das Herstellen einer Platine nach der Bügelmethode funktioniert in folgenden Schritten:&lt;br /&gt;
&lt;br /&gt;
# Erstellen eines Layouts&lt;br /&gt;
# Ausdrucken des Layouts auf einem Laserdrucker/Kopierer&lt;br /&gt;
# Aufbügeln des Layouts auf die gereinigte Platine&lt;br /&gt;
# Ätzen der Platine&lt;br /&gt;
&lt;br /&gt;
===Erstellen des Layouts===&lt;br /&gt;
Bei dieser Methode ist es wichtig, ein geeignetes Layout zu entwerfen. Man sollte auf die Leiterbahnbreite und die Abstände zwischen Leiterbahnen und Pads achten. Beim Aufbügeln des Layouts auf die Platine werden alle Konturen ein bisschen breiter.&lt;br /&gt;
&lt;br /&gt;
Das Layout erstellt man am besten per Computer, da es ausgedruckt werden muss. Beim Erstellen von doppelseitigen Platinen ist es unbedingt notwendig, unsymmetrische Passmarken ins Layout einzubauen, z.B. kleine Kreuze an verschiedenen Stellen im Layout platziert. Praktisch ist auch ein bisschen Text, da man so leicht erkennt, ob das Layout gespiegelt ist oder nicht.&lt;br /&gt;
&lt;br /&gt;
===Ausdrucken auf das Transfermaterial===&lt;br /&gt;
Wenn das Layout fertig ist, muss es auf das Transfermaterial gedruckt/kopiert werden. Als Trägermaterial bieten sich folgende Materialien an:&lt;br /&gt;
&lt;br /&gt;
*'''Backpapier'''&lt;br /&gt;
Viele berichten, dass Backpapier das Mittel ihrer Wahl ist und einwandfrei funktioniert. Bei mir war das leider nicht der Fall. Anscheinend ist der Erfolg von der Marke abängig.&lt;br /&gt;
&lt;br /&gt;
*'''Trägerpapier von Klebeetiketten'''&lt;br /&gt;
Soll sehr gut funktionieren&lt;br /&gt;
&lt;br /&gt;
*'''Seiten aus einem Hochglanzmagazin (Spiegel/Stern)'''&lt;br /&gt;
Mein persönlicher Favorit. Das Ausrichten der Passmarken auf dem bedruckten Papier ist zwar nicht so leicht, dafür lässt es sich sehr leicht nach dem Bügeln entfernen.&lt;br /&gt;
&lt;br /&gt;
*'''Spezielle Transferfolie (Pressn'Peel)'''&lt;br /&gt;
Diese ist sehr teuer und soll auch nicht besser funktionieren als andere Materialien&lt;br /&gt;
&lt;br /&gt;
* '''u.v.m'''&lt;br /&gt;
Vor dem Drucken sollte man den Drucker auf die höchste Farbdichte einstellen. Je mehr Toner auf den Träger gelangt, desto besser.&lt;br /&gt;
Natürlich muss das Layout spiegelverkehrt ausgedruckt werden.&lt;br /&gt;
&lt;br /&gt;
Für doppelseitige Layouts übernehme ich die fertigen Layouts zuerst in ein Grafikprogramm, ordne sie übereinander an, und mache eine dünne Linie in der Mitte zwischen den beiden Layouts. So kann man alles auf einmal ausdrucken. Danach faltet man das Papier entlang der Linie und richtet es mit Hilfe der Passmarken aus. So erhält man eine Tasche in die man die Platine zum Bügeln einlegen kann. Das Ausrichten funktioniert im Gegenlicht am besten.&lt;br /&gt;
&lt;br /&gt;
===Das Aufbügeln des Layouts===&lt;br /&gt;
Das ausgedruckte Layout sollte jetzt ungefähr so aussehen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:transfer.jpg|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ich habe dieses auf eine Seite aus einem Hochglanzmagazin gedruckt.&lt;br /&gt;
Vor dem Aufbügeln sollte man die Deckung des Toners überprüfen. Wenn größere dünnere Flächen vorhanden sind, sollte man es noch einmal neu drucken.&lt;br /&gt;
&lt;br /&gt;
Vor dem Aufbügeln muss die Platine (natürlich eine ohne Fotolack) gründlich gereinigt werden. Ich nehme dazu ein feines Schmirgelpapier und bearbeite die Platine damit. Dadurch wird sie auch aufgeraut, was den Toner besser haften lässt. Anschließend reibe ich sie noch mit Aceton, Waschbenzin, Nagellackentferner o.ä. ab, um die letzten Fettrückstände zu entfernen. Dies ist nicht unbedingt nötig, aber es erleichtert dem Toner das Haften. Achtung, die genannten Chemikalien sind mit Vorsicht zu benutzen. Aceton ist sogar ein Hautgift. Bitte Handschuhe benutzen.&lt;br /&gt;
&lt;br /&gt;
Für das eigentliche Aufbügeln empfehle ich eine feuerfeste Unterlage, da die Platine sehr heiss wird und lange auf der gleichen Stelle gebügelt wird.&lt;br /&gt;
Auf diese wird ein Handtuch o. ähnliches gelegt. Es sollte etwas altes sein, weil der Toner unter Umständen darauf gelangen könnte und dieser sich sehr schlecht aus Textilien entfernen lässt.&lt;br /&gt;
&lt;br /&gt;
Darauf kommt die Platine mit der zu beschichtenden Seite nach oben, und darüber das ausgedruckte Layout mit der Tonerseite nach unten. Darüber werden 2-3 Blatt Schreibmaschinenpapier gelegt, damit die Farbe der Hochglanzseite nicht das Bügeleisen verschmutzt. Außerdem werden so die Druckunterschiede ausgeglichen, die beim Bügeln entstehen und Leiterbahnen &amp;quot;zerquetschen&amp;quot; könnten.&lt;br /&gt;
&lt;br /&gt;
Das Bügeleisen wird nun auf ca. 3/4 seiner Leistung eingestellt. Wenn es heiss genug ist, fängt man zuerst mit leichtem Druck an über den &amp;quot;Sandwich&amp;quot; aus Platine, Layout und Schreibmaschinenpapier zu bügeln. Nach ca. 5 Minuten müsste eigentlich der Toner überall geschmolzen worden sein (laut Internet schmilzt dieser schon bei 70°C).&lt;br /&gt;
Wichtig ist, dass sichergestellt ist, dass wirklich jeder Bereich ausreichend erhitzt worden ist.&lt;br /&gt;
&lt;br /&gt;
Nach dem Bügeln sollte die Platine sich abkühlen dürfen. Ca. 5-6 Minuten.&lt;br /&gt;
Wenn sie handwarm ist, kann es weitergehen.&lt;br /&gt;
&lt;br /&gt;
===Abziehen des Trägermaterials von der Platine===&lt;br /&gt;
Das Abziehen des Trägermaterials ist das Heikelste an der ganzen Methode. Die feine Tonerschicht auf der Platine ist spröde und kann leicht zerstört werden. &lt;br /&gt;
&lt;br /&gt;
Bei Trägermaterialien aus Papier lege ich die '''abgekühlte''' Platine in eine Schüssel mit lauwarmem Wasser und Seife. Darin bleibt sie solange bis das Kupfer durch das Papier scheint und das Papier sich fast von alleine auflöst.&lt;br /&gt;
Wenn dies der Fall ist, beginne ich langsam, vom Rand ausgehend, das Papier von der Platine zu lösen. Wenn man das langsam macht, und die Platine dabei unter Wasser lässt, geht das relativ einfach.&lt;br /&gt;
&lt;br /&gt;
Danach sollte man kontrollieren, ob Leiterbahnen zu sehr verlaufen sind. Falls dies der Fall ist, kann man sie mit einer Nadel wieder freikratzen.&lt;br /&gt;
Generell sollte das Ganze übertragene Layout noch einmal kontrolliert werden.&lt;br /&gt;
Kleinere Fehler lassen sich einfach mit einem wasserfesten Stift beheben.&lt;br /&gt;
Sind die Fehler zu groß, sollte man das Layout erneut aufbügeln. Dazu befreit man die Platine mit den oben genannten Mitteln vom Toner oder schmirgelt mit Schleifpapier den Toner weg.&lt;br /&gt;
&lt;br /&gt;
Bei doppelseitigen Platinen legt man die Platine in die oben beschriebene Layouttasche und bügelt zuerst eine Seite, indem man zwischen die untere Platinenseite und dem unteren Layout ein weiteres Stück Stoff oder ähnliches legt. Durch das Bügeln klebt die eine Hälfte des Layouts fest und die andere kann dadurch einfach ausgerichtet werden.&lt;br /&gt;
&lt;br /&gt;
===Das Ätzen===&lt;br /&gt;
Das Ätzen der Platine erfolgt genau wie bei jeder anderen belichteten Platine auch. Allerdings sollte man darauf achten, dass das Ätzen möglichst schnell geht. Je länger es dauert, desto größer ist die Gefahr, daß sich an den Rändern die Tonerschicht löst.&lt;br /&gt;
Mit FE3Cl hatte ich die schlechteren Ergebnisse. Natriumsulfat brachte die schöneren Ergebnisse.&lt;br /&gt;
&lt;br /&gt;
===Das Ergebnis===&lt;br /&gt;
Das Ergebnis sollte ungefähr so aussehen.&lt;br /&gt;
&lt;br /&gt;
Oberseite meines AVR-Boards&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:AnsichtvonOben.jpg|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Unterseite (Die Drähte haben nichts mit dem Bügeln zu tun. Das passiert, wenn man beim Layouten Leiterbahnen vergisst;-))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:AnsichtvonUnten.jpg|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Diese Bild zeigt was passiert, wenn man beim Bügeln das Bügeleisen verkantet. Also einen zu großen Druck mit der Kante der Heizfläche ausübt. Die Leiterbahnen bekommen einen &amp;quot;Bauch&amp;quot;. Ich habe diesen Fehler hier mit der Nadel korrigiert. Die Funktion stört es nicht, es ist halt ein kleiner Schönheitsfehler&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:verkantet.jpg|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Das hier ist eine Nahaufnahme eines MAX232. Ich finde die Form und die Scharfkantigkeit der Pads ist mit einer belichteten Platine durchaus vergleichbar.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:Padform.jpg|center]]&lt;br /&gt;
&lt;br /&gt;
===Fazit===&lt;br /&gt;
Für mich ist die Bügelmethode die schnellste und einfachste Art einen Prototypen zu erstellen. Sie ist zwar nicht so genau wie eine belichtete Platine, aber für mich ist sie völlig ausreichend. Sie erspart einem eben den schwierigsten Teil der Platinenherstellung, das Belichten.&lt;br /&gt;
&lt;br /&gt;
Die oben gezeigte Platine war übrigens die 3., die ich nach dieser Methode hergestellt habe. Seitdem mach ich es nur noch so. Ausprobieren lohnt sich auf jeden Fall.&lt;br /&gt;
&lt;br /&gt;
==Siehe auch==&lt;br /&gt;
* [[Leiterplatten_herstellen]] mit der &amp;quot;Foto-TransferTechnik&amp;quot;&lt;br /&gt;
* [[Leiterbahnbreiten]]&lt;br /&gt;
&lt;br /&gt;
==Weblinks==&lt;br /&gt;
* http://home.arcor.de/dr.koenig/digital/platine.htm&lt;br /&gt;
* [http://thomaspfeifer.net/platinen_aetzen.htm Platinen ätzen mit der Direkt-Toner-Methode] (mit Video)&lt;br /&gt;
* http://diy.musikding.de/berichte/grund/platinen/platinen1.html&lt;br /&gt;
* http://www.die-wuestens.de/dindex.htm?/platine.htm&lt;br /&gt;
* http://www.fullnet.com/u/tomg/gooteepc.htm&lt;br /&gt;
* http://www.qsl.net/k5lxp/projects/PCBFab/PCBFab.html&lt;br /&gt;
* http://www.5bears.com/pcb.htm&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
'''''Artikel von Sonic'''  Wiki-Konvertiert Frank''&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Praxis]]&lt;br /&gt;
[[Kategorie:Elektronik]]&lt;/div&gt;</summary>
		<author><name>T.r.Agent D</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Leiterplatten_herstellen_-_Toner-Transfer-Methode&amp;diff=8561</id>
		<title>Leiterplatten herstellen - Toner-Transfer-Methode</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Leiterplatten_herstellen_-_Toner-Transfer-Methode&amp;diff=8561"/>
				<updated>2006-08-24T16:01:12Z</updated>
		
		<summary type="html">&lt;p&gt;T.r.Agent D: /* Ausdrucken auf das Transfermaterial */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{FarbigerRahmen|&lt;br /&gt;
Leider sind die Bilder für den Artikel verlorengegangen, wer welche nachtragen kann,  sollte dies tun.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Platinenmachen leicht gemacht - &amp;quot;Die Bügelmethode&amp;quot;==&lt;br /&gt;
&lt;br /&gt;
===Was ist die Bügelmethode?===&lt;br /&gt;
Die Bügelmethode ist eine Technik Platinen herzustellen, ohne sie belichten zu müssen. Das spart eine Menge Zeit und Geld und ist eine schnelle Methode, sich einen Prototyp zu erstellen.&lt;br /&gt;
Der Nachteil ist allerdings, dass man einen Laserdrucker/Kopierer benutzen muss. Das Ätzen bleibt einem leider nicht erspart.&lt;br /&gt;
&lt;br /&gt;
Das Herstellen einer Platine nach der Bügelmethode funktioniert in folgenden Schritten:&lt;br /&gt;
&lt;br /&gt;
# Erstellen eines Layouts&lt;br /&gt;
# Ausdrucken des Layouts auf einem Laserdrucker/Kopierer&lt;br /&gt;
# Aufbügeln des Layouts auf die gereinigte Platine&lt;br /&gt;
# Ätzen der Platine&lt;br /&gt;
&lt;br /&gt;
===Erstellen des Layouts===&lt;br /&gt;
Bei dieser Methode ist es wichtig, ein geeignetes Layout zu entwerfen. Man sollte auf die Leiterbahnbreite und die Abstände zwischen Leiterbahnen und Pads achten. Beim Aufbügeln des Layouts auf die Platine werden alle Konturen ein bisschen breiter.&lt;br /&gt;
&lt;br /&gt;
Das Layout erstellt man am besten per Computer, da es ausgedruckt werden muss. Beim Erstellen von doppelseitigen Platinen ist es unbedingt notwendig, unsymmetrische Passmarken ins Layout einzubauen, z.B. kleine Kreuze an verschiedenen Stellen im Layout platziert. Praktisch ist auch ein bisschen Text, da man so leicht erkennt, ob das Layout gespiegelt ist oder nicht.&lt;br /&gt;
&lt;br /&gt;
===Ausdrucken auf das Transfermaterial===&lt;br /&gt;
Wenn das Layout fertig ist, muss es auf das Transfermaterial gedruckt/kopiert werden. Als Trägermaterial bieten sich folgende Materialien an:&lt;br /&gt;
&lt;br /&gt;
*'''Backpapier'''&lt;br /&gt;
Viele berichten, dass Backpapier das Mittel ihrer Wahl ist und einwandfrei funktioniert. Bei mir war das leider nicht der Fall. Anscheinend ist der Erfolg von der Marke abängig.&lt;br /&gt;
&lt;br /&gt;
*'''Trägerpapier von Klebeetiketten'''&lt;br /&gt;
Soll sehr gut funktionieren&lt;br /&gt;
&lt;br /&gt;
*'''Seiten aus einem Hochglanzmagazin (Spiegel/Stern)'''&lt;br /&gt;
Mein persönlicher Favorit. Das Ausrichten der Passmarken auf dem bedruckten Papier ist zwar nicht so leicht, dafür lässt es sich sehr leicht nach dem Bügeln entfernen.&lt;br /&gt;
&lt;br /&gt;
*'''Spezielle Transferfolie (Pressn'Peel)'''&lt;br /&gt;
Diese ist sehr teuer und soll auch nicht besser funktionieren als andere Materialien&lt;br /&gt;
&lt;br /&gt;
* '''u.v.m'''&lt;br /&gt;
Vor dem Drucken sollte man den Drucker auf die höchste Farbdichte einstellen. Je mehr Toner auf den Träger gelangt, desto besser.&lt;br /&gt;
Natürlich muss das Layout spiegelverkehrt ausgedruckt werden.&lt;br /&gt;
&lt;br /&gt;
Für doppelseitige Layouts übernehme ich die fertigen Layouts zuerst in ein Grafikprogramm, ordne sie übereinander an, und mache eine dünne Linie in der Mitte zwischen den beiden Layouts. So kann man alles auf einmal ausdrucken. Danach faltet man das Papier entlang der Linie und richtet es mit Hilfe der Passmarken aus. So erhält man eine Tasche in die man die Platine zum Bügeln einlegen kann. Das Ausrichten funktioniert im Gegenlicht am besten.&lt;br /&gt;
&lt;br /&gt;
===Das Aufbügeln des Layouts===&lt;br /&gt;
Das ausgedruckte Layout sollte jetzt ungefähr so aussehen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:transfer.jpg|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ich habe dieses auf eine Seite aus einem Hochglanzmagazin gedruckt.&lt;br /&gt;
Vor dem Aufbügeln sollte man die Deckung des Toners überprüfen. Wenn größere dünnere Flächen vorhanden sind, sollte man es noch einmal neu drucken.&lt;br /&gt;
&lt;br /&gt;
Vor dem Aufbügeln muss die Platine (natürlich eine ohne Fotolack) gründlich gereinigt werden. Ich nehme dazu ein feines Schmirgelpapier und bearbeite die Platine damit. Dadurch wird sie auch aufgeraut, was den Toner besser haften lässt. Anschließend reibe ich sie noch mit Aceton, Waschbenzin, Nagellackentferner o.ä. ab, um die letzten Fettrückstände zu entfernen. Dies ist nicht unbedingt nötig, aber es erleichtert dem Toner das Haften. Achtung, die genannten Chemikalien sind mit Vorsicht zu benutzen. Aceton ist sogar ein Hautgift. Bitte Handschuhe benutzen.&lt;br /&gt;
&lt;br /&gt;
Für das eigentliche Aufbügeln empfehle ich eine feuerfeste Unterlage, da die Platine sehr heiss wird und lange auf der gleichen Stelle gebügelt wird.&lt;br /&gt;
Auf diese wird ein Handtuch o. ähnliches gelegt. Es sollte etwas altes sein, weil der Toner unter Umständen darauf gelangen könnte und dieser sich sehr schlecht aus Textilien entfernen lässt.&lt;br /&gt;
&lt;br /&gt;
Darauf kommt die Platine mit der zu beschichtenden Seite nach oben, und darüber das ausgedruckte Layout mit der Tonerseite nach unten. Darüber werden 2-3 Blatt Schreibmaschinenpapier gelegt, damit die Farbe der Hochglanzseite nicht das Bügeleisen verschmutzt. Außerdem werden so die Druckunterschiede ausgeglichen, die beim Bügeln entstehen und Leiterbahnen &amp;quot;zerquetschen&amp;quot; könnten.&lt;br /&gt;
&lt;br /&gt;
Das Bügeleisen wird nun auf ca. 3/4 seiner Leistung eingestellt. Wenn es heiss genug ist, fängt man zuerst mit leichtem Druck an über den &amp;quot;Sandwich&amp;quot; aus Platine, Layout und Schreibmaschinenpapier zu bügeln. Nach ca. 5 Minuten müsste eigentlich der Toner überall geschmolzen worden sein (laut Internet schmilzt dieser schon bei 70°).&lt;br /&gt;
Wichtig ist, dass sichergestellt ist, dass wirklich jeder Bereich ausreichend erhitzt worden ist.&lt;br /&gt;
&lt;br /&gt;
Nach dem Bügeln sollte die Platine sich abkühlen dürfen. Ca. 5-6 Minuten.&lt;br /&gt;
Wenn sie handwarm ist, kann es weitergehen.&lt;br /&gt;
&lt;br /&gt;
===Abziehen des Trägermaterials von der Platine===&lt;br /&gt;
Das Abziehen des Trägermaterials ist das Heikelste an der ganzen Methode. Die feine Tonerschicht auf der Platine ist spröde und kann leicht zerstört werden. &lt;br /&gt;
&lt;br /&gt;
Bei Trägermaterialien aus Papier lege ich die '''abgekühlte''' Platine in eine Schüssel mit lauwarmem Wasser und Seife. Darin bleibt sie solange bis das Kupfer durch das Papier scheint und das Papier sich fast von alleine auflöst.&lt;br /&gt;
Wenn dies der Fall ist, beginne ich langsam, vom Rand ausgehend, das Papier von der Platine zu lösen. Wenn man das langsam macht, und die Platine dabei unter Wasser lässt, geht das relativ einfach.&lt;br /&gt;
&lt;br /&gt;
Danach sollte man kontrollieren, ob Leiterbahnen zu sehr verlaufen sind. Falls dies der Fall ist, kann man sie mit einer Nadel wieder freikratzen.&lt;br /&gt;
Generell sollte das Ganze übertragene Layout noch einmal kontrolliert werden.&lt;br /&gt;
Kleinere Fehler lassen sich einfach mit einem wasserfesten Stift beheben.&lt;br /&gt;
Sind die Fehler zu groß, sollte man das Layout erneut aufbügeln. Dazu befreit man die Platine mit den oben genannten Mitteln vom Toner oder schmirgelt mit Schleifpapier den Toner weg.&lt;br /&gt;
&lt;br /&gt;
Bei doppelseitigen Platinen legt man die Platine in die oben beschriebene Layouttasche und bügelt zuerst eine Seite, indem man zwischen die untere Platinenseite und dem unteren Layout ein weiteres Stück Stoff oder ähnliches legt. Durch das Bügeln klebt die eine Hälfte des Layouts fest und die andere kann dadurch einfach ausgerichtet werden.&lt;br /&gt;
&lt;br /&gt;
===Das Ätzen===&lt;br /&gt;
Das Ätzen der Platine erfolgt genau wie bei jeder anderen belichteten Platine auch. Allerdings sollte man darauf achten, dass das Ätzen möglichst schnell geht. Je länger es dauert, desto größer ist die Gefahr, daß sich an den Rändern die Tonerschicht löst.&lt;br /&gt;
Mit FE3Cl hatte ich die schlechteren Ergebnisse. Natriumsulfat brachte die schöneren Ergebnisse.&lt;br /&gt;
&lt;br /&gt;
===Das Ergebnis===&lt;br /&gt;
Das Ergebnis sollte ungefähr so aussehen.&lt;br /&gt;
&lt;br /&gt;
Oberseite meines AVR-Boards&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:AnsichtvonOben.jpg|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Unterseite (Die Drähte haben nichts mit dem Bügeln zu tun. Das passiert, wenn man beim Layouten Leiterbahnen vergisst;-))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:AnsichtvonUnten.jpg|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Diese Bild zeigt was passiert, wenn man beim Bügeln das Bügeleisen verkantet. Also einen zu großen Druck mit der Kante der Heizfläche ausübt. Die Leiterbahnen bekommen einen &amp;quot;Bauch&amp;quot;. Ich habe diesen Fehler hier mit der Nadel korrigiert. Die Funktion stört es nicht, es ist halt ein kleiner Schönheitsfehler&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:verkantet.jpg|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Das hier ist eine Nahaufnahme eines MAX232. Ich finde die Form und die Scharfkantigkeit der Pads ist mit einer belichteten Platine durchaus vergleichbar.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:Padform.jpg|center]]&lt;br /&gt;
&lt;br /&gt;
===Fazit===&lt;br /&gt;
Für mich ist die Bügelmethode die schnellste und einfachste Art einen Prototypen zu erstellen. Sie ist zwar nicht so genau wie eine belichtete Platine, aber für mich ist sie völlig ausreichend. Sie erspart einem eben den schwierigsten Teil der Platinenherstellung, das Belichten.&lt;br /&gt;
&lt;br /&gt;
Die oben gezeigte Platine war übrigens die 3., die ich nach dieser Methode hergestellt habe. Seitdem mach ich es nur noch so. Ausprobieren lohnt sich auf jeden Fall.&lt;br /&gt;
&lt;br /&gt;
==Siehe auch==&lt;br /&gt;
* [[Leiterplatten_herstellen]] mit der &amp;quot;Foto-TransferTechnik&amp;quot;&lt;br /&gt;
* [[Leiterbahnbreiten]]&lt;br /&gt;
&lt;br /&gt;
==Weblinks==&lt;br /&gt;
* http://home.arcor.de/dr.koenig/digital/platine.htm&lt;br /&gt;
* [http://thomaspfeifer.net/platinen_aetzen.htm Platinen ätzen mit der Direkt-Toner-Methode] (mit Video)&lt;br /&gt;
* http://diy.musikding.de/berichte/grund/platinen/platinen1.html&lt;br /&gt;
* http://www.die-wuestens.de/dindex.htm?/platine.htm&lt;br /&gt;
* http://www.fullnet.com/u/tomg/gooteepc.htm&lt;br /&gt;
* http://www.qsl.net/k5lxp/projects/PCBFab/PCBFab.html&lt;br /&gt;
* http://www.5bears.com/pcb.htm&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
'''''Artikel von Sonic'''  Wiki-Konvertiert Frank''&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Praxis]]&lt;br /&gt;
[[Kategorie:Elektronik]]&lt;/div&gt;</summary>
		<author><name>T.r.Agent D</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Luftdruck_messen&amp;diff=7610</id>
		<title>Luftdruck messen</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Luftdruck_messen&amp;diff=7610"/>
				<updated>2006-05-30T13:05:31Z</updated>
		
		<summary type="html">&lt;p&gt;T.r.Agent D: /* Erforderliche Ausstattung */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Luftdruck messen mit RN-Control´er 1.4 ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Erforderliche Ausstattung===&lt;br /&gt;
&lt;br /&gt;
'''Board:'''            [[RN-Control]] 1.4&lt;br /&gt;
&lt;br /&gt;
'''Luftdrucksensor:'''  Eingang 5V Ausgang (Messspannung) 2,5V&lt;br /&gt;
&lt;br /&gt;
'''LCD Display:'''      an Port B (auf dem Board)&lt;br /&gt;
&lt;br /&gt;
'''LED's:'''            3 [[Leuchtdioden]] (auf dem Board)&lt;br /&gt;
&lt;br /&gt;
'''Terminalprogramm''' zum Auslesen der Werte&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
'''Ich habe eine Software geschrieben, die wie folgt funktioniert:'''&lt;br /&gt;
&lt;br /&gt;
Der Aktuelle Luftdruck wird über den Sensor gemessen und der gemessene Wert wird im EEProm ab&lt;br /&gt;
gelegt. Dann wird der vorhergehende Wert mit dem Aktuellen verglichen und das Ergebnis von 3 LED's&lt;br /&gt;
ausgegeben:&lt;br /&gt;
&lt;br /&gt;
# LED -&amp;gt; Luftdruck steigt&lt;br /&gt;
# LED -&amp;gt; Luftdruck gleichbleibend&lt;br /&gt;
# LED -&amp;gt; Luftdruck sinkt&lt;br /&gt;
&lt;br /&gt;
Dazu werden die Werte Ak. - Aktueller Luftdruck, Vor.- Vorhergehender Wert auf dem LCD ausgegben.&lt;br /&gt;
&lt;br /&gt;
===Der Programmablauf nach dem EInschalten:===&lt;br /&gt;
Auf dem LCD erscheinen 2 Mögliche Eingaben die über die Taster 1 und 2 gewählt werden können:&lt;br /&gt;
&lt;br /&gt;
1 -START startet das Programm und die Aufzeichnung des Luftdrucks beginnt&lt;br /&gt;
&lt;br /&gt;
2 -EEPROM liest die Ergebnisse einer Aufzeichnung aus dem EEprom aus (hier sollte ein [[Terminalprogramm]] über die [[RS232]] Schnittstelle angeschlossen sein, denn sonst sieht man nix !!&lt;br /&gt;
Die ausgelesenen Werte können dann in z.B.- Exel kopiert werden und schon kann man eine Grafik&lt;br /&gt;
anlegen !&lt;br /&gt;
&lt;br /&gt;
'''HINWEIS:''' Man kann auch während des Programmablaufes die Werte durch drücken des Tasters 1 auslesen !&lt;br /&gt;
&lt;br /&gt;
===Luftdrucksensor:===&lt;br /&gt;
Ich habe hier einen Sensoren verwendet den ich noch aus alten Projekten liegen hatte.Den genauen Typ kann ich leider nicht mehr angeben, da findet man sicherlich was zu den oben beschriebenen Werten im  Netz oder beim Elektronik-Höker! Viel Spaß beim forschen und auf das der Luftdruck steigt !!&lt;br /&gt;
&lt;br /&gt;
Ein bekannter und genauer Sensor wird von der Firma Motorola hergestellt. Der MPX4115A. Er sollte mit diesem Projekt kompatibel sein. Der Preis eines solchen Sensores liegt bei etwa 20 Euro.&lt;br /&gt;
&lt;br /&gt;
===Das Programm=== &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  $regfile = &amp;quot;m32def.dat&amp;quot; &lt;br /&gt;
  $hwstack = 32 &lt;br /&gt;
  $framesize = 32 &lt;br /&gt;
  $swstack = 32 &lt;br /&gt;
  $crystal = 16000000 &lt;br /&gt;
  $baud = 9600&amp;lt; &lt;br /&gt;
  Config Adc = Single , Prescaler = Auto &lt;br /&gt;
  Config Pinc.2 = Output &lt;br /&gt;
  Config Pinc.1 = Output &lt;br /&gt;
  Config Pinc.0 = Output &lt;br /&gt;
  Start Adc &lt;br /&gt;
  Portc.3 = 0 &lt;br /&gt;
  Dim W As Word &lt;br /&gt;
  Dim C As Byte &lt;br /&gt;
  Dim D As Byte &lt;br /&gt;
  Dim A As Byte &lt;br /&gt;
  Dim R As Word &lt;br /&gt;
  Dim L As Byte &lt;br /&gt;
  Dim K As Word &lt;br /&gt;
  Dim H As Word &lt;br /&gt;
  Dim T As Byte &lt;br /&gt;
  Dim U As Integer &lt;br /&gt;
  Config Pina.7 = Input         'Für Tastenabfrage &lt;br /&gt;
  Porta.7 = 1 &lt;br /&gt;
  '-----------------------------------------------Display &lt;br /&gt;
  Config Lcdpin = Pin , Db4 = Portb.4 , Db7 = Portb.7 , E = Portb.3 , Rs = Portb.2 &lt;br /&gt;
  '-----------------------------------------------Display &lt;br /&gt;
  Cc: &lt;br /&gt;
  Cls &lt;br /&gt;
  Cb: &lt;br /&gt;
  Lcd &amp;quot;1-START&amp;quot; &lt;br /&gt;
  Locate 2 , 1&lt;br /&gt;
  Lcd &amp;quot;2-EEPROM&amp;quot;&lt;br /&gt;
  T = Getadc(7) &lt;br /&gt;
  Select Case T &lt;br /&gt;
      Case 150 To 155            'Range für Tasteneingabe &lt;br /&gt;
      Sound Portd.7 , 400 , 500 &lt;br /&gt;
      Waitms 500 &lt;br /&gt;
      Goto Ax &lt;br /&gt;
      Case 80 To 90 &lt;br /&gt;
      Sound Portd.7 , 400 , 700 &lt;br /&gt;
      Goto Aa &lt;br /&gt;
      End Select &lt;br /&gt;
  Goto Cb &lt;br /&gt;
&lt;br /&gt;
  Ax: &lt;br /&gt;
  For D = 0 To 200 Step 2       'Menge der Zyklen &lt;br /&gt;
  W = Getadc(0) &lt;br /&gt;
  U = W + 670 &lt;br /&gt;
  Print &amp;quot;Channel   -&amp;gt;    &amp;quot; ; U &lt;br /&gt;
  Writeeeprom U , D &lt;br /&gt;
  'Sound Portd.7 , 400 , 500&lt;br /&gt;
  Readeeprom U , D              'EEProm auslesen &lt;br /&gt;
  Print &amp;quot; Aus EEPROM: &amp;quot; ; W ; &amp;quot;- - - - - - Wert aus FOR: &amp;quot; ; D &lt;br /&gt;
  H = D - 2&lt;br /&gt;
  Readeeprom K , H &lt;br /&gt;
  Print &amp;quot;vorheriger Wert: &amp;quot; ; K 'K ist der vorhergehende Wert ! &lt;br /&gt;
  Print &amp;quot; &amp;quot; &lt;br /&gt;
  Cls &lt;br /&gt;
  Cursor Off &lt;br /&gt;
  Lcd &amp;quot;Ak.&amp;quot; ; U &lt;br /&gt;
  Locate 2 , 1 &lt;br /&gt;
  Lcd &amp;quot;Vor.&amp;quot; ; K &lt;br /&gt;
  Select Case W &lt;br /&gt;
    Portc.2 = 1 &lt;br /&gt;
    Portc.1 = 1 &lt;br /&gt;
    Portc.0 = 1 &lt;br /&gt;
&lt;br /&gt;
   Case Is &amp;gt; K : Portc.2 = 0 &lt;br /&gt;
   Case Is = K : Portc.1 = 0 &lt;br /&gt;
   Case Is &amp;lt; K : Portc.0 = 0 &lt;br /&gt;
&lt;br /&gt;
  End Select&lt;br /&gt;
  For R = 0 To 1800             'Zeiteistellung ob jede Stunde oder &lt;br /&gt;
                                'halbe Stunde gelesen wird 3600= 1Std 1800= 1/2Std &lt;br /&gt;
  L = Getadc(7) &lt;br /&gt;
      Select Case L &lt;br /&gt;
      Case 170 To 185 &lt;br /&gt;
      Sound Portd.7 , 400 , 500&amp;lt; &lt;br /&gt;
      Goto Aa &lt;br /&gt;
  End Select &lt;br /&gt;
  If L = 152 Then Goto Aa &lt;br /&gt;
  Wait 1 &lt;br /&gt;
  Next R &lt;br /&gt;
  Next D &lt;br /&gt;
  Aa: &lt;br /&gt;
  Cls &lt;br /&gt;
  Lcd &amp;quot;EEPROM-&amp;quot; &lt;br /&gt;
  Locate 2 , 1 &lt;br /&gt;
  Lcd &amp;quot;auslesen&amp;quot; &lt;br /&gt;
  Portc.3 = 1 &lt;br /&gt;
  For D = 0 To 100 Step 2 &lt;br /&gt;
  Readeeprom U , D &lt;br /&gt;
  Print U &lt;br /&gt;
  Waitms 20 &lt;br /&gt;
  Next D &lt;br /&gt;
  Goto Cc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Autor==&lt;br /&gt;
* [[GIESBERT]]&lt;br /&gt;
&lt;br /&gt;
==Siehe auch==&lt;br /&gt;
* [[RN-Control]]&lt;br /&gt;
* [[Bascom]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Quellcode_Bascom]]&lt;br /&gt;
[[Kategorie:Software]]&lt;br /&gt;
[[Kategorie:Praxis]]&lt;/div&gt;</summary>
		<author><name>T.r.Agent D</name></author>	</entry>

	</feed>