Vielleicht weil das Beschleunigungssensor- Modul von ELV so ein Verkaufsschlager war, hat

Ähnliche Dokumente
Geschrieben von: Malte Freitag, den 16. Juli 2010 um 21:28 Uhr - Aktualisiert Montag, den 05. Dezember 2011 um 18:09 Uhr

Der Magnetfeldsensor HMC5883L

Die Software zum Unser kleiner Computer

Daten loggen mit der STI100-Platine

'

AVR-Mikrocontroller in BASCOM programmieren

3 Achsen Accelerometer

Für schnelle und bequeme Entwicklungen wird gern Basic eingesetzt.

Miniatur Motortreiber TB6612FNG

Stefan Hoffmann. Leichter Start mit BASCOM und myavr

Puls Weiten Modulation (PWM)

AVR-Mikrocontroller in BASCOM programmieren, Teil 2

SIOSLAB. Technische Daten:

Rauschgenerator mit AVR

Forth-Vokabular. Vokabular für Attiny2313-Forth Stand: A: Assembler-Wort F: Forth-Wort C: Compiler-Wort

USB > I2C- Bus Modul. Startet den I2C-Bus. Daten einlesen NACK senden

Nachtaktiver Blinker. Ralf Pongratz. 11. November 2012

T3 EC / EE ATTPRO. 6 Mess/SlaveStation. 6.1 Schaltung. Abb. 29. Schaltplan (Slavestation). Man Chun Ling -37-

Arduino für FunkAmateure

Deutsche Dokumentation von ihrem Elektronik-Lieferanten: Inteligentes Motorboard (12V/6A) mit I2C-Bus

Der I²C-Bus. Vorstellung des Inter-Integrated Circuit -Bus. Aufbau und Funktionsweise. Beispiel PortExpander am Arduino

Remote-Objekt-Überwachung. von Jan Schäfer und Matthias Merk

Übungen zu Systemnahe Programmierung in C (SPiC)

Lösungen der Aufgaben

Parallel-IO. Ports am ATmega128

Arduino Kurs Das LC-Display. Stephan Laage-Witt FES Lörrach

Ruecklicht-V1 von Peter Krueger /

U5-2 Register beim AVR-µC

Der Anschluss eines seriellen 16kb EEProms an die I²C Schnittstelle ist denkbar einfach: Hier als Beispiel mit einem ST24C16:

Lösung 8051er. Bussysteme IIC - Bus. Klasse:... Datum:...

PROFE1: SEISMOGRAF. Name: PAQUET Charel 1/42

Aufbau eines Assembler-Programms

Makros sind Textersetzungen, welche vom Präprozessor aufgelöst werden. Dies Passiert bevor der Compiler die Datein verarbeitet.

Die Temperaturmessung mit dem Sensor LM75. Andreas Heller & Eduard Auer

Mikrocontroller-Einstieg

Config Lcdpin = Pin, Db4 = Portc.0, Db5 = Portc.1, Db6 = Portc.2, Db7 = Portc.3, E = Portc.5, Rs = Portc.4 Config Lcd = 20 * 4

Berechnungen am rechtwinkligen Dreieck Der Einheitskreis. VI Trigonometrie. Propädeutikum Holger Wuschke. 21. September 2018

LCD-Ansteuerung mit MikroForth

GdI2 - Systemnahe Programmierung in C Übungen Jürgen Kleinöder Universität Erlangen-Nürnberg Informatik 4, 2006 U4.fm

RalfPongratz. Grundversion. Reaktivlichtmit7SegmentAnzeige

Einführung Microcontroller

LEGO MINDSTORMS NXT MIT LABVIEW 2009 PROGRAMMIEREN

RN-LCD-Adapter - STD. Doku vom (stets aktuelle Dokumentation verwenden)

TM1638-Anzeige-Taster-Modul

PROFE 2. Lycée Technique des Arts et Métiers Projet de fin d' études 2014/2015. FELTES Jean Claude Messstation im Musée Nationale des Mines

150 ma (bei eingeschalteter Hintergrundbeleuchtung)

Übungen zu Systemnahe Programmierung in C (SPiC)

Inhalt. Übungen zu Systemnahe Programmierung in C (SPiC) Schnittstellenbeschreibung. Inhalt

4-Kanal-Analoglogger für die Regelungstechnik

Starten Sie die Arduino IDE und geben Sie den folgenden Programmcode ein:

High-Power Motortreiber 18V15

Ansteuerung eines LCD-Screens

Wer möchte, kann sein Programm auch auf echter Hardware testen

AVR-Mikrocontroller in BASCOM programmieren, Teil 3

Die Temperaturmessung

Beschreibung Modell Motorspindel

Jan Monsch. Donnerstag, 2. Mai 13

Mikrocontroller Einstieg ATmega 8

Station Trigonometrie Teil 1. Hilfeheft

Schreiben Sie für die folgenden Aufgaben Programme; Sie können sie anschließend den Kollegen vorstellen und testen.

TTL-GPS-Modul an Attiny2313-Platine

11. Die PC-Schnittstelle

Zusatzanleitung. MPR-1 I²C-Protokoll. Version 1.01

Ampelsteuerung Merkblatt 2 Wie wird der Arduino programmiert?

AVR Ein/Ausgabe. Inhaltsverzeichnis

1. Kontinuierliche Datenerfassung Aufgabenstellung Voraussetzungen. Datei: AN046.DOC (5 Seiten)

Physical Computing. Ralf Nolte. Bielefeld, 13. Dezember 2011

BOOTLOADER für AVR-Entwicklungsmodule

Die Schnittstelle arbeitet mit einer Baudrate von 2400 baud, acht Datenbits und zwei Stopbits.

LED Skalenbeleuchtung mit einem Arduino

PC-Anbindung des HMG Lactate Scout

Modbus TCP/IP Gateway für bis zu vier SDM120 Modbus

Sinus, Cosinus und Tangens. Sinus, Cosinus und Tangens. Gruppenmitglieder: Gruppenmitglieder: Station Aufgabenstellung Kontrolle

Einführung in die Welt der Microcontroller

Trigonometrie. Mag. DI Rainer Sickinger HTL. v 1 Mag. DI Rainer Sickinger Trigonometrie 1 / 1

I2C-002 DATASHEET I2C-002 V1.00: I2C PORTEXPANDER MIT PCA8574. Dokument NR.: I2C-002_Datasheet

Das Attiny-Projekt Der I 2 C-Bus 1. Der I 2 C-Bus

Arduino für FunkAmateure

2. Musterklausur in K1

'

Sebastian Maier (Lehrstuhl Informatik 4) Übung 4. Sommersemester 2017

Arduino Kurs Bits und Bytes. Stephan Laage-Witt FES Lörrach

' 'PD5 = PIN11 (T1) mit Uhrentakt (10) versorgt

Atmel AVR für Dummies

WDV MOLLINÉ Messtechnik die zählt

Unified-E Modbus Adapter

EINFÜHRUNG LEGO MINDSTORMS

B. Kainka, C-Control Hardware-Erweiterungen. 7 Temperatursensor DS1820

Temperaturmessung mit dem ATmega8

Liniensensor. Sensor 0 Sensor 8

Excel + VBA. Ergänzungen. Kapitel 1 Einführung in VBA Sequentielle Textdateien HARALD NAHRSTEDT. Erstellt am

A Channel-Charge-Integrator

Umbau eines Saug- und Wisch Roboters auf ARDUINO Steuerung

Modbus. Modbus. für Rio-Eco N, Rio-EcoZN, Rio-Eco Therm N. Betriebsanleitung /01-DE

C++ mit dem Arduino (Uno und Mega2560)

Inhalt. Aufgabe 4: LED-Modul Hinweise Testen des Moduls Sommersemester 2015

MODBUS RTU Übertragungsprotokoll für Digitale Elektronische Vorschaltgeräte mit RS-485 Schnittstelle

Transkript:

Vielleicht weil das Beschleunigungssensor- Modul von ELV so ein Verkaufsschlager war, hat Pollin seit kurzem ein günstiges Magnetsensor-Modul namens HDMM01 im Angebot, das sich als elektronischer Kompass verwenden lässt. Auf dem Modul befindet sich ein MMC2120 von MEMSIC. Der Sensor misst in zwei Achsen mit einer Auflösung von 12 Bit zwischen ±2 Gauss und verfügt über eine I²C Schnittstelle, so dass er sich leicht an einen Microcontroller anbinden lässt. Natürlich hab ich mir gleich eins von den Modulen geordert und ein wenig damit rumgespielt. Anschluss Der Anschluss des Moduls an einen AVR ist - I²C sei Dank - kaum der Rede wert: zwei Pins des Moduls dienen der Stromversorgung (der Sensor mag lt. Datenblatt alles zwischen 2.7 und 5.25 V), die anderen beiden Pins sind SDA und SCL und werden dementsprechend direkt mit dem µc verbunden, I²C Pull-ups nicht vergessen. I²C Kommunikation Der Sensor hat fest eingestellt die Adresse &h60. Das LSB der Adresse gibt bei I²C bekanntlich an, ob geschrieben oder gelesen werden soll, dementsprechen ist die Schreibadresse &h60, die Leseadresse ist &h61. Das Initiieren einer Messung und das Auslesen des Ergebnisses geschieht folgendermaßen: man erzeugt eine Startbedingung (SDA geht auf low während SCL high ist) und adressiert den Sensor zum Schreiben (&h60). Der Sensor hat nur ein Register, das an der Adresse &h00 liegt, man schreibt also diese Adresse auf den Bus, um im nächsten Schritt das Register manipulieren zu können. Das Setzen des LSB in diesem Register löst eine Messung aus, man überträgt dementsprechend &h01 und erzeugt eine Stopp-Bedingung (SDA geht auf high während SCL high ist). Nun genehmigt man dem Sensor einige Millisekunden Pause um die eigentliche Messung durchzuführen. Um die Daten abzuholen, wird zunächst wieder eine Start-Bedingung auf dem Bus erzeugt, dann teilt man dem Sensor mit, welches Datenbyte man lesen will. Dazu wird die Schreibadresse übertragen (&h60) und dann der Index des Datenbytes. Hier sollen alle fünf Bytes (Kontrollregister und Daten), also von Index 0 gelesen werden, man schreibt somit &h00 auf den Bus. Nach einer erneuten Startbedingung legt man die Leseadresse (&h61) auf den Bus und kann sich dann in Folge fünf Bytes abholen, deren ersten vier mit einen Acknowledge quittiert werden. Nach dem fünften Byte erzeugt man eine Stopp-Bedingung. Datenauswertung Der Sensor löst die Messung für die x- und y-dimension jeweils mit zwölf Bit auf. Dementsprechend ist ein Messwert auf zwei Bytes verteilt. Das erste gelesene Byte ist das Kontrollregister, also beginnen die Messdaten ab dem zweiten Byte. Das zweite gelesene 1 / 6

Byte ist high-byte des x-wertes, das dritte gelesene Byte dessen low-byte. Das vierte Byte ist high-byte des y-wertes und das fünfte Byte low-byte des y-wertes. Das ungenutzte obere Nibble der high-bytes soll man laut Datenblatt maskieren (soweit ich sehe, ist es aber sowieso immer 0). Man braucht jetzt nur noch jeweils high- und low-byte verrechnen, um an den entsprechenden Datenpunkt zu kommen. Code Folgend ein kleines Stückchen BASCOM-Code, der kontinuierlich das Messen initiiert, die Messwerte ausliest und per UART versendet - allerdings nicht in physikalsichen Einheiten, sondern so, wie der Sensor die Daten codiert. {codecitation class="brush: plain; gutter: true;toolbar: false" width="509px"} beispielprogramm zum auslesen des MMC2120MG malte ahlers 2011 weitere infos auf malteahlers.de compiler steuerung $regfile = "m8def.dat" $crystal = 8000000 $framesize = 64 $swstack = 64 $hwstack = 64 $baud = 9600 $lib "i2c_twi.lbx" hardware konfigurieren - taster Config Pinb.6 = Input Portb.6 = 1 Config Pinb.7 = Input Portb.7 = 1 Config Pind.5 = Input Portd.5 = 1 Taster1 Alias Pinb.6 Taster2 Alias Pinb.7 Taster3 Alias Pind.5 - leds Config Portd.7 = Output Config Portd.6 = Output Config Portb.0 = Output Led_gl Alias Portd.7 2 / 6

Led_rt Alias Portd.6 Led_gr Alias Portb.0 - i2c Config Twi = 400000 Config Scl = Portc.5 Config Sda = Portc.4 konstanten Const Cmp_w = &H60 Const Cmp_r = &H61 variablen Dim I As Byte Dim Dat(5) As Byte Dim X As Word Dim Y As Word hauptprog I2cinit Do * set/ reset coil * sensor adressieren (schreiben) register adressieren register manipulieren -> set coil I2cwbyte &B00000010 Waitms 1 sensor adressieren (schreiben) register adressieren register manipulieren -> reset coil 3 / 6

I2cwbyte &B00000100 Waitms 5 * messung * sensor adressieren (schreiben) register adressieren register manipulieren -> messung I2cwbyte &H01 Waitms 5 leseindex setzen sensor adressieren (lesen) I2cwbyte Cmp_r For I = 1 To 4 bytes 1-4 holen mit ack I2crbyte Dat(i), Ack Next byte 5 holen mit nack I2crbyte Dat(5), Nack oberes nibble im high bytes löschen Dat(2) = Dat(2) And &B0000_1111 4 / 6

Dat(4) = Dat(4) And &B0000_1111 x-wert aus high- und lowbyte berechnen X = Dat(2) * 256 X = X + Dat(3) y-wert aus high- und lowbyte berechnen Y = Dat(4) * 256 Y = Y + Dat(5) Print X ; " " ; Y Waitms 40 Toggle Led_rt Loop End{/codecitation} Hier das BASCOM-File zum Download: mmc2120mg.bas Messung Hier ein Beispiel für die Rohdaten einer solchen Messnung auf Basis des obigen Codebeispiels. Ich habe meinen Testaufbau einfach auf meinen Schreibttischdrehstuhl gelegt und zwei Runden in eine Richtung gedreht, nach kurzer Pause dann drei Runden in Gegenrichtung. Dabei wurde bei ca. 20 Hz kontinuierlich gemessen und die Messdaten per serieller Schnittstelle vom AVR auf meinen PC überragen. Trägt man nun den x- und y-wert gegen den Sampleindex (also im Prinzip die Zeit) auf, erhält man folgendes Diagramm: 5 / 6

Man Zeit erkennbaren beiden Koordinate kreisförmige gegen die Mitte sich ändern, erkennt, Sampleindex Drehrichtungen hier dar, einmal Bewegung Pause man dass der plottet den Abbildung sich läuft (beide geplottet. man Stillstand meines deutlich. die Werte gemessenen für x-dimension ergibt, Der die Schreibtischstuhls. und Im bleiben Sampleindex gleichen linken beschreibt die Umkehrung Felder konstant) Teil Daten y-dimesnion der also entpsrechend stellt So folgenden kehrt meine des ja x- sich gegen Drehsinns. Wertepaar mit Prinzip gesamte Abbildung das 90 der den Drehung um die voraus, Dreherei. y-wert, stellt - Zeit das habe eine dar, nach "sinusartig" entspricht wird Ungefähr die kartesische der die x Schraube, gegen den mit in yder Kollabiert Daran Außerdem Kompassnadel Verbindungslinie Kreismittelpunkt Bezugspunkt des umgekehrt einen vier-quadranten-arkustangens natürlich also, einfließt, eben Erdmagnetfeldes Hier {jcomments rechtwinkeliges Winkels dass auch eindeutigen erkennt Video unabhängig ist man nur wird von ergibt der on} zwischen bzw. das von man, die einem angibt. daran ermittelte zu von eines sich informiert). Winkel Sample-Dimension, Kreismittelpunkt Verhältnis meinem berechnen. Dreieck, dass aktuellem von der Kompass klar, diesen Im beliebigen Winkel über der Prinzip wie Versuchsaufbau dessen Messwerte Hypotenuse, zwischen beiden 360 man (atan2). Kreismittelpunkt, Messpunkt verlangt, unabhängig somit geht Bezugspunktes und Seiten erhält einem aus Ankathete erhalten, Die aktuellem auch dass dabei die (x- dem Berechnung ist im man von Kompass bei dem das und Betrieb: ja Arkustangens Bezugspunkt verwendet zwar der nur das Datenpunkt mehrmaliger (dem und y-wert) Verhältnis Radius gemessenen darum, rechte Gegenkathete über kommt, Nordpol des des zum Richtung man Winkels Diagramm den der definiert und des Drehung Kreises der z. den Seitenlängen Winkel von B.) aktueller Feldstärke Seitenverhältnisses. den aber und Kreismittelpunkt werden. entspricht. dem die Drehwinkel der recht zwischen nicht dem Berechnung Datenpunkt oberen o. stabil (so g. Der zueinander, Stärke und Dreieck wie Dadurch Abbildung. Tangens sind. man des und Um bilden ist 6 / 6