Auf den folgenden Seiten findet Ihr ein kleines Xmega Tutorial – SRF02 zu den Microcontrollern der Familie AVR Xmega in der Programmiersprache “C”. Mit Hilfe des I2C/ TWI Moduls des Xmegas kann den Ultraschall Entfernungsmesser SRF02 auslesen. Dieser ist eine Entwicklung der Firma Devantech Ltd. Großbritannien und eignet sich zum Messen von Entfernungen zwischen 15cm und 6 Metern. Der Sensor ist speziell für den Robotik-Bereich entwickelt, kann jedoch auch für zahlreiche andere Anwendungen verwendet werden.
Durch die Verwendung von nur einer Ultraschall-Kapsel reduziert sich die Größe auf ca. die Hälfte der vergleichbaren Module. Allerdings vergrößert sich dadurch prinzipbedingt die Mindestreichweite. Als Interface kommt ein I2C Interface zum Einsatz, alternativ ist aber auch eine Ansteuerung über ein serielles Protokoll (hier nicht weiter ausgeführt) möglich. Sowohl bei I2C als auch bei der seriellen Ansteuerung stehen 16 Geräteadressen zur Verfügung.
Features
- Betriebsspannung: 5V
- Stromaufnahme: 4mA typ. 20mA max.
- Frequenz: 40KHz
- Max. Reichweite: 6 m
- Min. Reichweite: 15 cm
- Messwerterfassung: intern, Automatische Verstärkungsregelung (64 Stufen), automatische Kalibrierung
- Interface: Standard – I²C, 16 Adressen einstellbar
- Ausgabeformat: µs, mm oder Zoll
- Abmessungen: 24mm x 20mm x 17mm
Das folgende Beispiel zeigt Ausschnitte zum Auslesen des Sensors, weiterhin gibt es den Quelcode für die I2C/ TWI Kommunikation mit dem Ultraschall Sensor SRF02 inklusive der I2C/TWI Bibliothek für den Xmega Controller im Anhang unter Downloads.Xmega SRF02 Example
//########################################## SRF02 Firmware //Decimal Hex //80 0x50 Startet Messvorgang (gemessen wird in inches) //81 0x51 Startet Messvorgang (gemessen wird in Zentimeter) //82 0x52 Startet Messvorgang (gemessen wird in Microsekunden) //86 0x56 Synchron Messvorgang (gemessen wird in inches) //87 0x57 Synchron Messvorgang (gemessen wird in Zentimeter) //88 0x58 Synchron Messvorgang (gemessen wird in Microsekunden) //92 0x5C Erzeugt einen 8 zyklischen 40khz Impuls/Ton //96 0x60 // //Startet automatische Kalibrierung – Befehl kann ignoriert werden da dies //bereits beim einschalten (Power on) automatisch erfolgt //160 0xA0 Erste Sequence zum ändern der I2C-Bus Slave ID //165 0xA5 Dritte Sequence zum ändern der I2C-Bus Slave ID //170 0xAA Zweite Sequence zum ändern der I2C-Bus Slave ID //########################################## SRF02 Firmware auslesen unsigned char SRF02_firmware( unsigned int slaveid ) { unsigned char swr; uint8_t sendBuffer[8] = {}; sendBuffer[0]=0; TWI_MasterWriteRead( &twiMasterE, slaveid, &sendBuffer[0] , 1,1); while (twiMasterE.status != TWIM_STATUS_READY) {} swr = twiMasterE.readData[0]; // read byte return swr; } //########################################## SRF02 Entfernung auslesen unsigned int SRF02_entfernung( unsigned int slaveid ) { uint8_t temp_msb = 0; uint8_t temp_lsb = 0; uint8_t sendBuffer[8]={}; sendBuffer[0] = 0; // Command sendBuffer[1] = 81; // Messung in Zentimeter sendBuffer[2] = 2; //Leseregister festlegen TWI_MasterWriteRead( &twiMasterE, slaveid, &sendBuffer[0] , 3,2); while (twiMasterE.status != TWIM_STATUS_READY) {} temp_msb = twiMasterE.readData[0]; // read byte (msb) temp_lsb = twiMasterE.readData[1]; // read byte (lsb) return (uint8_t)uniq(temp_lsb,temp_msb); }
Ein ausführliches und funktionsfähiges Xmega Tutorial – SRF02 Beispiel zum Auslesen des Sensors per I2C/ TWI durch einen Xmega findet ihr unter Downloads. Viel Spass beim Testen.
Hinweis:
Das Tutorial wird nach und nach von mir
ergänzt. Wenn ihr Fehler in dem Tutorial findet, würde ich mich freuen
wenn ihr mir diese mitteilt, damit ich diese korrigieren kann. Wenn
jemand eigene Tips, Informationen oder Code-Schnipsel hat, kann er mir
diese gern zusenden damit ich sie anschließend in das Tutorial einbinden
kann.
Links | |
Atmel Appnote Xmega I2C/ TWI Datenblatt | AVR1308: Using the XMEGA TWI (pdf) AVR1308: Using the XMEGA TWI (Software) Ultraschall Entfernungsmesser SRF02 |