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

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Interrupt&amp;diff=13965</id>
		<title>Interrupt</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Interrupt&amp;diff=13965"/>
				<updated>2008-09-04T18:30:43Z</updated>
		
		<summary type="html">&lt;p&gt;Xyt0nite: /* Unterschiede zum Polling */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===Interrupt Request===&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Ein Interrupt ist ein Signal, meist von einem externen Gerät, mit dem der Prozessor aufgefordert wird, den aktuellen Programmablauf anzuhalten (zu unterbrechen) und eine sog. Unterbrechungsroutine ([[ISR]]) aufzurufen.&amp;quot; (Zitat aus der Wikipedia [http://de.wikipedia.org/wiki/Interrupt_Request Interrupt Request])&lt;br /&gt;
&lt;br /&gt;
Man unterscheidet zwischen maskierbaren (d.h. Interrupts, die man unterdrücken kann) und nicht maskierbaren Interrupts.&lt;br /&gt;
&lt;br /&gt;
Sind die Interrupts nicht unterdrückt, wird der normale Programmfluss unterbrochen, sobald ein externes Signal an einer von mehreren Interrupt-Eingängen anliegt. Es wird eine spezielle Unterroutine abgearbeitet ([[ISR]]), die auf das externe Signal reagieren und es ggf. abschalten muss (um erneute Interrupt Requests und damit Endlosschleifen zu vermeiden).&lt;br /&gt;
&lt;br /&gt;
Nicht maskierbare Interrupts werden vor allem für besonders schwerwiegende Ereignisse (z.B. zu hohe Umgebungstemperatur) verwendet, da hier das Steuerprogramm immer unmittelbar reagieren muss, um Schaden vom System abwenden zu können (z.B. indem es eine Kühlung aktiviert).&lt;br /&gt;
&lt;br /&gt;
Da die Anzahl der Interrupt-Leitungen bei Microprozessoren meist begrenzt sind, werden oft Interrupt-Controller vorgeschaltet, die auch kaskadiert (in Serie geschaltet) werden können. Um in solch einem System die Interrupt-Quelle eindeutig identifizieren zu können, muss diese dem Microcontroller über den normalen Datenbus z.B. eine Kennung übermitteln können. Die dazu nötige Kommunikation zwischen Microcontroller und Interrupt-Quelle findet in der Interrupt Service Routine statt. &lt;br /&gt;
&lt;br /&gt;
===Unterschiede zum Polling===&lt;br /&gt;
&lt;br /&gt;
Alternativ zur Verwendung von Interrupts lässt sich das Auftreten eines externes Ereignisses auch durch das regelmäßige Abfragen des externen Gerätes erkennen. Diese Technik nennt sich Polling (der Prozessor ''frägt'' das externe Gerät).&lt;br /&gt;
&lt;br /&gt;
'''Vorteile des Pollings gegenüber der Verwendung von Interrupts:'''&lt;br /&gt;
* Es ist einfacher zu implementieren, da die Abfrage des Geräts im Hauptprogramm erfolgen kann.&lt;br /&gt;
* Es reagiert meist schneller auf das externe Ereignis. Bei Interrupts wird der aktuelle Befehl des Hauptprogramms noch fertig ausgeführt, dann wird die Rücksprungadresse gesichert und in die [[ISR]] verzweigt. Diese wiederrum muss die zu benutzenden Register auf dem Stack sichern, bevor sie mit der eigentlichen Reaktion auf das externe Ereignis beginnen kann. Beim Polling kann nach Erkennung des Ereignisses sofort reagiert werden.&lt;br /&gt;
* Es ist weniger Hardwareaufwand bei den Geräten notwendig, da diese nicht in der Lage sein müssen, auf das Auftreten eines Ereignisses mit einer Interrupt-Anfrage zu reagieren. So braucht z.B. ein Temperatursensor für Polling im einfachsten Fall nur einen [[ADC|A/D-Wandler]]. Bei der Verwendung von Interrupts muss er jedoch neben der Möglichkeit, die Temperatur zu messen, zusätzlich auf die Änderung der Temperatur mit einer Interruptanfrage reagieren können.&lt;br /&gt;
&lt;br /&gt;
'''Vorteile von Interrupts gegenüber Polling:'''&lt;br /&gt;
* Das Hauptprogramm wird u.U deutlich einfacher und besser verständlich, weil es sich auf das Wesentliche konzentriert, ohne ständig oder von unterschiedlichen Codestellen aus Ereignisse abzufragen zu müssen.&lt;br /&gt;
* Das Auftreten des externen Ereignisses wird immer überwacht. Beim Polling geschieht dies nur zu den Zeiten, zu denen das Hauptprogramm danach frägt.&lt;br /&gt;
* Das Hauptprogramm kann andere Aufgaben übernehmen als das externe Gerät zu überwachen. Beim Polling wird häufig sämtliche Rechenleistung für die Abfrage der Geräte aufgewendet.&lt;br /&gt;
* Die Kommunikationsleitungen, Datenbusse und externen Geräte werden entlastet. Im Gegensatz zum Polling wird nur mit dem Gerät kommuniziert, wenn tatsächlich ein externes Ereigniss stattfindet.&lt;br /&gt;
* Es ist oft stromsparender. Hat das Hauptprogramm keine Aufgaben mehr zu erledigen, so kann es Teile der CPU bis zum nächsten Auftreten eines Interrupts in einen stromsparenden Sleep-Mode versetzen. In diesem Modus wird die CPU angehalten und beim nächsten Interrupt wieder aktiviert. Fast alle modernen, interruptfähigen Prozessoren unterstützen einen solchen Modus.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border:2px solid #ffd700; margin-left:auto; margin-right:auto; padding:0.3em; text-align:left; &amp;quot;&amp;gt;&lt;br /&gt;
In den allermeisten Fällen überwiegen die Vorteile der Verwendung von Interrupts deutlich!&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Interrupt-Sharing===&lt;br /&gt;
Stehen auf dem Controller weniger Interruptleitungen zur Verfügung, als interruptfähige Geräte angeschlossen werden sollen, so ist es notwendig, dass sich mehrere Geräte eine Interruptleitung teilen (Interrupt-Sharing). Bei einfachen Controllern kann es sogar vorkommen, dass nur eine einzige [[ISR]] definiert werden kann, die bei '''jeder Art''' von Ereignis aufgerufen wird.&lt;br /&gt;
In diesem Fall muss die durch den Interrupt aufgerufene [[ISR|Interrupt Service Routine]] prüfen, bei welchem Gerät das Ereignis aufgetreten ist. Das geschieht wiederrum durch Abfrage jedes in Frage kommenden Geräts (also Polling).&lt;br /&gt;
==Siehe auch==&lt;br /&gt;
* [[ISR]] &lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Microcontroller]]&lt;/div&gt;</summary>
		<author><name>Xyt0nite</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Maussensor&amp;diff=13604</id>
		<title>Maussensor</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Maussensor&amp;diff=13604"/>
				<updated>2008-06-10T22:05:43Z</updated>
		
		<summary type="html">&lt;p&gt;Xyt0nite: /* Weblinks */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Grundsätzliches ==&lt;br /&gt;
Computermäuse bieten sich als Entfernungs- und Geschwindigkeitsmesser in autonomen Robotern geradezu an. Die Entwicklung weg von den &amp;quot;Kugelmäusen&amp;quot; hin zu optischen Sensoren hat viele Probleme beseitigt, welche diese Bausteine jetzt hochinterressant erscheinen lassen:&lt;br /&gt;
* berührungslos &lt;br /&gt;
* billig&lt;br /&gt;
* hochintegriert und einfach zu beschalten&lt;br /&gt;
&lt;br /&gt;
Die optischen Mäuse verfügen über eine kleine CCD-&amp;quot;Kamera&amp;quot; von 16x16 bis 30x30 Pixeln. Damit wird ein mikroskopisches Bild des Untergrundes aufgenommen. Über den Vergleich zweier aufeinander folgender Bilder mittels eines integrierten DSPs wird eine Bewegungs-Information errechnet, welche die Bewegungsrichtung (2 Achsen) und Entfernung beinhaltet. Viele dieser Sensorchips haben noch einen &amp;quot;Kompatibilitätsmodus&amp;quot;, welcher Quadratur-Signale wie eine Kugelmaus zur Verfügung stellt. Die neueren Chips verzichten darauf immer häufiger. &lt;br /&gt;
&lt;br /&gt;
In einer Maus findet man in aller Regel den Sensorchip selber und einen Controller, der das Sensorsignal auswertet und in ein PS/2 oder USB-Signal umwandelt.&lt;br /&gt;
&lt;br /&gt;
Sehr verbreitet in der Anfangszeit der optischen Mäuse waren die Sensoren von Agilent ADNS2051. Die Chips in vielen Billigmäusen sind dazu kompatibel, auch wenn die Bezeichnungen abweichen.&lt;br /&gt;
In den meisten Billigmäusen (&amp;lt; 7€) finden sich der PAN101 oder der kleine Bruder PAN3101 von Pixart.&lt;br /&gt;
&lt;br /&gt;
Häufig kann über den SDIO-Anschluss auch das Sensorbild ausgelesen werden, was praktisch zur Anpassung einer geänderten Optik ist.&lt;br /&gt;
&lt;br /&gt;
== Datenblätter ==&lt;br /&gt;
Hilfreich und informativ ist auf jeden Fall das Studium von entsprechenden Datenblättern. Es finden sich sowohl Beispiele für die elektrischen Beschaltung (die häufig sogar 1:1 von den Mausherstellern übernommen wurden) als auch eine exacte Beschreibung der Protokolle. Dabei ist häufig die genaue Taktung wichtig. Auch wenn man &amp;quot;seinen&amp;quot; Maussensor nicht findet, kann einem das Studium vergleichbarer Typen wichtige Hinweise geben, taiwanische und chinesische Chips sind häufig kompatibel zu den &amp;quot;großen&amp;quot; Markenherstellern.&lt;br /&gt;
&lt;br /&gt;
* [[http://www.roboternetz.de/phpBB2/dload.php?action=file&amp;amp;file_id=349 ADNS 2610]]&lt;br /&gt;
* [[http://www.roboternetz.de/phpBB2/dload.php?action=file&amp;amp;file_id=348 ADNS 2051]]&lt;br /&gt;
* [[http://www.roboternetz.de/phpBB2/dload.php?action=file&amp;amp;file_id=347 PAN 301]]&lt;br /&gt;
&lt;br /&gt;
== Anschluss (elektrisch) ==&lt;br /&gt;
&lt;br /&gt;
Der Anschluss über SDIO ist relativ simpel. Man muss zwei PINS dazu identifizieren, Clock und SDIO. &lt;br /&gt;
Der Takt wird vom Controller vorgegeben, damit kann dann Bitweise gelesen oder geschrieben werden. &lt;br /&gt;
Die Sensorchips haben in aller Regel auch ein paar Konfigurations-Register, in denen Betriebsmodus und Auflösung eingestellt werden können.&lt;br /&gt;
&lt;br /&gt;
Für die Quadratur-Ausgänge muss man 4 Leitungen am Chip identifizieren.&lt;br /&gt;
&lt;br /&gt;
=== seriell über SDIO ===&lt;br /&gt;
&lt;br /&gt;
Um einen Maussensor an einen Mikrocontroller anzuschliesen braucht man eigentlich nur 2 Leitungen.&lt;br /&gt;
* Der SCLK Eingang vom Maussensor wird an einen Output-Pin des Controller angeschlossen.&lt;br /&gt;
* Der SDIO oder SDA Aus/Eingang des Maussensors wird an an einen IO Pin des Controllers angeschlossen.&lt;br /&gt;
Falls man den Chip aus einer optischen Maus verwenden möchte und sich keinen neuen Chip gekauft hat, muss man die Verbindung der zwei Pins SCLK und SDIO/SDA am Maussensor Chip noch mit einem Teppichmesser oder einer Trennscheibe abtrennen von den Pins des anderen ICs, der die Daten eigentlich an den PC schicken sollte, nun aber überflüssig ist.&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Ansonsten muss man halt noch für die 5V Spannungsversorgung des Maussensors sorgen. Dazu kann man gleich die Anschlüsse (normalerweise Schwarz=GND Rot=+5V) für das Kabel zum PC verwenden. Und wenn man grad dabei ist, kann man auch noch die anderen zwei Leitungen(andersfarbig z.B. Grün und Weiß) die eigentlich mal die Daten zum Pc gebracht haben, rauslöten und an unsere zwei Pins (SCLK und SDIO/SDA) am Maussensorchip löten. So hat man gleich noch das Mauskabel wiederverwertet ;) und hat zum testen erst mal eine schöne Reichweite mit der Maus. Manchmal ist es auch noch hilfreich, den PD-Pin (Power Down) herauszuführen, da man damit den Seriellen Anschluss wieder zurücksetzen kann, wenn man mal aus dem Takt gekommen ist.&lt;br /&gt;
&lt;br /&gt;
=== Über Quadratur-Ausgänge ===&lt;br /&gt;
&lt;br /&gt;
Für die Quadratur-Ausgänge muss man 4 Pins (XA, XB, YA, YB) identifizieren. Wenn man kein Datenblatt des Sensorchips zur Verfügung hat, kann man sie meistens daran erkennen das 4 Leitungen direkt nebeneinander vom Sensorchip zum Controller-Chip laufen.&lt;br /&gt;
&lt;br /&gt;
== Auswertung (Software) ==&lt;br /&gt;
Hier bitte Codebeispiele einfügen, anhand derer man einen Einstieg finden kann.&lt;br /&gt;
=== seriell über SDIO ===&lt;br /&gt;
&lt;br /&gt;
Der hier vorgestellte Code ist in C geschrieben. Er ermöglicht es einen PAN3101 oder,&lt;br /&gt;
nach kleinen Änderungen bei den Registern, einen PAN101 (großer Bruder des PAN3101)&lt;br /&gt;
zu beschreiben und auszulesen.&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Das Main Programm liest immer wieder die DeltaXund DeltaY Register ein, wobei auch &lt;br /&gt;
eventuelle Überläufe überprüft werden und addiert diese zu den Positionsvariablen&lt;br /&gt;
posx und posy. Diese können dann ausgegeben werden.&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#define DDR_SCK 	DDRB			/*!&amp;lt; DDR fuer Maus-SCLK */&lt;br /&gt;
#define DDR_SDA 	DDRA			/*!&amp;lt; DDR fuer Maus-SDA  */&lt;br /&gt;
&lt;br /&gt;
#define PORT_SCK	PORTB			/*!&amp;lt; PORT fuer Maus-SCK  */&lt;br /&gt;
#define PORT_SDA	PORTA			/*!&amp;lt; PORT fuer Maus-SDA  */&lt;br /&gt;
#define PIN_SDA		PINA			/*!&amp;lt; PIN fuer Maus-SDA  */&lt;br /&gt;
&lt;br /&gt;
#define SCK_PIN		(1&amp;lt;&amp;lt;PB0)		/*!&amp;lt; PIN nummer fuer Maus-SCK  */&lt;br /&gt;
#define SDA_PIN		(1&amp;lt;&amp;lt;PA0)		/*!&amp;lt; PIN nummer fuer Maus-SDA  */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/*!&lt;br /&gt;
 * Uebertraegt ein Byte an den Sensor&lt;br /&gt;
 * @param data das Byte&lt;br /&gt;
 */&lt;br /&gt;
void pan_writeByte(unsigned char data){&lt;br /&gt;
	signed char i;&lt;br /&gt;
	&lt;br /&gt;
	DDR_SDA|= SDA_PIN; 		        // SDA auf Output&lt;br /&gt;
	&lt;br /&gt;
	for (i=7; i&amp;gt;=0; i--){&lt;br /&gt;
	&lt;br /&gt;
		PORT_SCK &amp;amp;= ~SCK_PIN;		//SCK auf Low, Daten vorbereiten&lt;br /&gt;
		&lt;br /&gt;
		if(data&amp;amp;(1&amp;lt;&amp;lt;i)){		//Bit rausschieben&lt;br /&gt;
			PORT_SDA|=SDA_PIN;&lt;br /&gt;
		}else{&lt;br /&gt;
			PORT_SDA&amp;amp;=~SDA_PIN;		&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		PORT_SCK |= SCK_PIN;		// SCK =1 Sensor uebernimmt auf steigender Flanke&lt;br /&gt;
		&lt;br /&gt;
		_delay_us(1);			//Sensor Zeit lassen um Bit zu holen&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	DDR_SDA &amp;amp;=~ SDA_PIN;			//HI-Z state&lt;br /&gt;
	PORT_SDA &amp;amp;=~ SDA_PIN;&lt;br /&gt;
		&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/*!&lt;br /&gt;
 * Liest ein Byte vom Sensor&lt;br /&gt;
 * @return das Byte&lt;br /&gt;
 */&lt;br /&gt;
unsigned char pan_readByte(void){&lt;br /&gt;
signed char i;&lt;br /&gt;
unsigned char data=0;&lt;br /&gt;
	&lt;br /&gt;
	_delay_us(3);				//Sensor Zeit lassen um die Daten aus dem Register zu holen&lt;br /&gt;
&lt;br /&gt;
	for (i=7; i&amp;gt;-1; i--){&lt;br /&gt;
		PORT_SCK &amp;amp;= ~SCK_PIN;		// SCK =0 Sensor bereitet Daten auf fallender Flanke vor !&lt;br /&gt;
			&lt;br /&gt;
		_delay_us(1);			//Sensor kurz zeit lassen&lt;br /&gt;
		&lt;br /&gt;
		&lt;br /&gt;
		PORT_SCK |= SCK_PIN;		// SCK =1 Daten lesen  auf steigender Flanke		&lt;br /&gt;
		&lt;br /&gt;
		if(PIN_SDA&amp;amp;SDA_PIN){ 		//BIT einlesen&lt;br /&gt;
			data |= (1&amp;lt;&amp;lt;i);			&lt;br /&gt;
		}else{&lt;br /&gt;
			data &amp;amp;=~ (1&amp;lt;&amp;lt;i);			&lt;br /&gt;
		}			&lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
	return data;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/*!&lt;br /&gt;
 * Uebertraegt ein write-Kommando an den Sensor&lt;br /&gt;
 * @param adr Adresse&lt;br /&gt;
 * @param data zu schreibendes byte&lt;br /&gt;
 */&lt;br /&gt;
void pan_write(unsigned char adr, unsigned char data){&lt;br /&gt;
	adr|=(1&amp;lt;&amp;lt;7);&lt;br /&gt;
	pan_writeByte(adr);  //rl MSB muss 1 sein für Write Operation&lt;br /&gt;
	pan_writeByte(data);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/*!&lt;br /&gt;
 * Schickt ein Lesekommando an den Sensor&lt;br /&gt;
 * und liest ein Byte zurueck&lt;br /&gt;
 * @param adr die Adresse&lt;br /&gt;
 * @return der registerwert&lt;br /&gt;
 */&lt;br /&gt;
unsigned char pan_read(unsigned char adr){&lt;br /&gt;
&lt;br /&gt;
	pan_writeByte(adr);&lt;br /&gt;
	return pan_readByte();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/*! &lt;br /&gt;
 * Initialisiere PAN3101&lt;br /&gt;
 &lt;br /&gt;
 !! Muss unbedingt ganz am ANFANG von main stehen, sonst gibts FEHLER !!&lt;br /&gt;
 (wenn der PAN3101 sich initialisiert hat, bevor der Controler SCK und &lt;br /&gt;
 SDA auf Output gestellt hat)&lt;br /&gt;
 Deshalb kann es auch sinnvoll sein die Powerup Zeit in den Config Bits &lt;br /&gt;
 auf 4ms zu stellen oder noch besser mit Boden zu arbeiten.&lt;br /&gt;
 &lt;br /&gt;
 */ &lt;br /&gt;
void pan_init(void){&lt;br /&gt;
&lt;br /&gt;
	DDR_SCK  |= SCK_PIN; 	// SCK auf Output&lt;br /&gt;
	DDR_SDA |= SDA_PIN;		//SDA auf Output&lt;br /&gt;
&lt;br /&gt;
	PORT_SCK |= SCK_PIN;	// SCK auf high	&lt;br /&gt;
	PORT_SDA|= SDA_PIN;		//SDA auf high&lt;br /&gt;
&lt;br /&gt;
// hier müssen bei Umstellung auf PAN101 die entsprechenden Register gesetzt werden&lt;br /&gt;
//Reset PAN3101&lt;br /&gt;
	pan_write(0x00,0x80);&lt;br /&gt;
// kein Sleep modus&lt;br /&gt;
	pan_write(0x00,0x01);	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
int main(void){&lt;br /&gt;
&lt;br /&gt;
unsigned char ino;&lt;br /&gt;
signed char x,y;&lt;br /&gt;
signed short posx=0,posy=0;&lt;br /&gt;
&lt;br /&gt;
//ganz an den Anfang damit der Controller schneller asl der PAN ist um Fehler zu vermeiden&lt;br /&gt;
pan_init();&lt;br /&gt;
//Individuelle Port Configuration und Initialisierung&lt;br /&gt;
initialisierung();&lt;br /&gt;
&lt;br /&gt;
lcd_init(LCD_DISP_ON);&lt;br /&gt;
lcd_clrscr();&lt;br /&gt;
&lt;br /&gt;
while(1){&lt;br /&gt;
&lt;br /&gt;
        //Endlosschleife&lt;br /&gt;
&lt;br /&gt;
	ino=pan_read(0x16);&lt;br /&gt;
&lt;br /&gt;
	//wenn 7tes bit vom Register 0x16 gesetzt ist wurde die Maus bewegt =&amp;gt; Bewegungsdaten abfragen&lt;br /&gt;
	if(ino&amp;amp;(1&amp;lt;&amp;lt;7)){		&lt;br /&gt;
		//Deltax Register auslesen&lt;br /&gt;
		x=pan_read(0x17);&lt;br /&gt;
                //und zu der Positionvariable addieren&lt;br /&gt;
		posx=posx+x;&lt;br /&gt;
	        &lt;br /&gt;
                /* Nachschaun ob das Überlauf-Bit im Register 0x16 gesetzt ist &lt;br /&gt;
                   wenn das der Fall ist muss je nach Vorzeichen der Deltax Variable x&lt;br /&gt;
                   noch 128 (überlauf nach oben) dazugezählt oder eben 128 abgezogen werden&lt;br /&gt;
                */&lt;br /&gt;
		if(ino&amp;amp;(1&amp;lt;&amp;lt;3)){&lt;br /&gt;
			if(x&amp;lt;0){&lt;br /&gt;
				posx-=128;&lt;br /&gt;
			}else{&lt;br /&gt;
				posx+=128;&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
                //ab hier nochmal das Gleiche für die yRichtung&lt;br /&gt;
&lt;br /&gt;
		y=pan_read(0x18);&lt;br /&gt;
		posy=posy+y;&lt;br /&gt;
		&lt;br /&gt;
		if(ino&amp;amp;(1&amp;lt;&amp;lt;4)){&lt;br /&gt;
			if(y&amp;lt;0){&lt;br /&gt;
				posy-=128;&lt;br /&gt;
			}else{&lt;br /&gt;
				posy+=128;&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
                //hier kann jeder seine Ausgabevariante selber wählen ;) &lt;br /&gt;
                &lt;br /&gt;
		lcd_ausgabe_int(0,3,posx);&lt;br /&gt;
		lcd_ausgabe_int(7,3,posy);&lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Das Programm wurde mit einem PAN3101 auf einem ATMega32 mit 14,7456 Mhz getestet und lief problemlos.&lt;br /&gt;
&lt;br /&gt;
=== über Quadratur-Ausgänge ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Autor/en==&lt;br /&gt;
* Reinald&lt;br /&gt;
* Javik&lt;br /&gt;
&lt;br /&gt;
==Siehe auch==&lt;br /&gt;
*[[Sensorarten]]&lt;br /&gt;
&lt;br /&gt;
==Weblinks==&lt;br /&gt;
*[http://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=6782 Thread im RN-Forum]  6782 Fragen zum optischen Maussensor von Agilent&lt;br /&gt;
*[http://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=6894 Thread im RN-Forum]  6894  Optische Maus: geänderte Fokus-Distanz&lt;br /&gt;
*[http://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=11548 Thread im RN-Forum] 11548 GeneralKeys Lasermaus als Sensor für die Odometrie&lt;br /&gt;
*[http://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=12579 Thread im RN-Forum] 12579 Sensor einer Optischen Maus zur Streckenmessung &lt;br /&gt;
*[http://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=13271 Thread im RN-Forum] 13271 Programmierung des ADNS 3060&lt;br /&gt;
*[http://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=22353 Thread im RN-Forum] 22353 Schnittstelle für PAN101(Sensor einer optischen Maus)&lt;br /&gt;
&lt;br /&gt;
*[http://www.pixart.com.tw/ Pixart] Hersteller diverser Maussensoren hat u.a. Datenblätter zum PAN3101&lt;br /&gt;
&lt;br /&gt;
*[http://www.mstarmetro.net/~rlowens/OpticalMouse/ guter Internetseite über diverse Maussensoren]&lt;br /&gt;
[[Kategorie:Sensoren]]&lt;/div&gt;</summary>
		<author><name>Xyt0nite</name></author>	</entry>

	</feed>