mirror of https://github.com/ArduPilot/ardupilot
uncrustify libraries/AP_ADC/AP_ADC_ADS7844.cpp
This commit is contained in:
parent
7bfe32fd3d
commit
dcf4a9824d
|
@ -1,56 +1,56 @@
|
||||||
/// -*- tab-width: 4; Mode: C++; c-basic-offset: 4; indent-tabs-mode: nil -*-
|
/// -*- tab-width: 4; Mode: C++; c-basic-offset: 4; indent-tabs-mode: nil -*-
|
||||||
/*
|
/*
|
||||||
AP_ADC_ADS7844.cpp - ADC ADS7844 Library for Ardupilot Mega
|
* AP_ADC_ADS7844.cpp - ADC ADS7844 Library for Ardupilot Mega
|
||||||
Code by Jordi Mu<EFBFBD>oz and Jose Julio. DIYDrones.com
|
* Code by Jordi Mu<EFBFBD>oz and Jose Julio. DIYDrones.com
|
||||||
|
*
|
||||||
Modified by John Ihlein 6 / 19 / 2010 to:
|
* Modified by John Ihlein 6 / 19 / 2010 to:
|
||||||
1)Prevent overflow of adc_counter when more than 8 samples collected between reads. Probably
|
* 1)Prevent overflow of adc_counter when more than 8 samples collected between reads. Probably
|
||||||
only an issue on initial read of ADC at program start.
|
* only an issue on initial read of ADC at program start.
|
||||||
2)Reorder analog read order as follows:
|
* 2)Reorder analog read order as follows:
|
||||||
p, q, r, ax, ay, az
|
* p, q, r, ax, ay, az
|
||||||
|
*
|
||||||
This library is free software; you can redistribute it and / or
|
* This library is free software; you can redistribute it and / or
|
||||||
modify it under the terms of the GNU Lesser General Public
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
License as published by the Free Software Foundation; either
|
* License as published by the Free Software Foundation; either
|
||||||
version 2.1 of the License, or (at your option) any later version.
|
* version 2.1 of the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
External ADC ADS7844 is connected via Serial port 2 (in SPI mode)
|
* External ADC ADS7844 is connected via Serial port 2 (in SPI mode)
|
||||||
TXD2 = MOSI = pin PH1
|
* TXD2 = MOSI = pin PH1
|
||||||
RXD2 = MISO = pin PH0
|
* RXD2 = MISO = pin PH0
|
||||||
XCK2 = SCK = pin PH2
|
* XCK2 = SCK = pin PH2
|
||||||
Chip Select pin is PC4 (33) [PH6 (9)]
|
* Chip Select pin is PC4 (33) [PH6 (9)]
|
||||||
We are using the 16 clocks per conversion timming to increase efficiency (fast)
|
* We are using the 16 clocks per conversion timming to increase efficiency (fast)
|
||||||
|
*
|
||||||
The sampling frequency is 1kHz (Timer2 overflow interrupt)
|
* The sampling frequency is 1kHz (Timer2 overflow interrupt)
|
||||||
|
*
|
||||||
So if our loop is at 50Hz, our needed sampling freq should be 100Hz, so
|
* So if our loop is at 50Hz, our needed sampling freq should be 100Hz, so
|
||||||
we have an 10x oversampling and averaging.
|
* we have an 10x oversampling and averaging.
|
||||||
|
*
|
||||||
Methods:
|
* Methods:
|
||||||
Init() : Initialization of interrupts an Timers (Timer2 overflow interrupt)
|
* Init() : Initialization of interrupts an Timers (Timer2 overflow interrupt)
|
||||||
Ch(ch_num) : Return the ADC channel value
|
* Ch(ch_num) : Return the ADC channel value
|
||||||
|
*
|
||||||
// HJI - Input definitions. USB connector assumed to be on the left, Rx and servo
|
* // HJI - Input definitions. USB connector assumed to be on the left, Rx and servo
|
||||||
// connector pins to the rear. IMU shield components facing up. These are board
|
* // connector pins to the rear. IMU shield components facing up. These are board
|
||||||
// referenced sensor inputs, not device referenced.
|
* // referenced sensor inputs, not device referenced.
|
||||||
On Ardupilot Mega Hardware, oriented as described above:
|
* On Ardupilot Mega Hardware, oriented as described above:
|
||||||
Chennel 0 : yaw rate, r
|
* Chennel 0 : yaw rate, r
|
||||||
Channel 1 : roll rate, p
|
* Channel 1 : roll rate, p
|
||||||
Channel 2 : pitch rate, q
|
* Channel 2 : pitch rate, q
|
||||||
Channel 3 : x / y gyro temperature
|
* Channel 3 : x / y gyro temperature
|
||||||
Channel 4 : x acceleration, aX
|
* Channel 4 : x acceleration, aX
|
||||||
Channel 5 : y acceleration, aY
|
* Channel 5 : y acceleration, aY
|
||||||
Channel 6 : z acceleration, aZ
|
* Channel 6 : z acceleration, aZ
|
||||||
Channel 7 : Differential pressure sensor port
|
* Channel 7 : Differential pressure sensor port
|
||||||
|
*
|
||||||
*/
|
*/
|
||||||
#include "AP_ADC_ADS7844.h"
|
#include "AP_ADC_ADS7844.h"
|
||||||
|
|
||||||
extern "C" {
|
extern "C" {
|
||||||
// AVR LibC Includes
|
// AVR LibC Includes
|
||||||
#include <inttypes.h>
|
#include <inttypes.h>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <avr/interrupt.h>
|
#include <avr/interrupt.h>
|
||||||
}
|
}
|
||||||
#if defined(ARDUINO) && ARDUINO >= 100
|
#if defined(ARDUINO) && ARDUINO >= 100
|
||||||
#include "Arduino.h"
|
#include "Arduino.h"
|
||||||
|
@ -82,7 +82,7 @@ static inline unsigned char ADC_SPI_transfer(unsigned char data)
|
||||||
/* Put data into buffer, sends the data */
|
/* Put data into buffer, sends the data */
|
||||||
UDR2 = data;
|
UDR2 = data;
|
||||||
/* Wait for data to be received */
|
/* Wait for data to be received */
|
||||||
while ( !(UCSR2A & (1 << RXC2)) );
|
while ( !(UCSR2A & (1 << RXC2)) ) ;
|
||||||
/* Get and return received data from buffer */
|
/* Get and return received data from buffer */
|
||||||
return UDR2;
|
return UDR2;
|
||||||
}
|
}
|
||||||
|
@ -172,7 +172,7 @@ float AP_ADC_ADS7844::Ch(uint8_t ch_num)
|
||||||
uint32_t sum;
|
uint32_t sum;
|
||||||
|
|
||||||
// ensure we have at least one value
|
// ensure we have at least one value
|
||||||
while (_count[ch_num] == 0) /* noop */ ;
|
while (_count[ch_num] == 0) /* noop */;
|
||||||
|
|
||||||
// grab the value with interrupts disabled, and clear the count
|
// grab the value with interrupts disabled, and clear the count
|
||||||
cli();
|
cli();
|
||||||
|
|
Loading…
Reference in New Issue