Adding the avr-rss2 platform based on AtMega256RFR2
This commit is contained in:
parent
d3980668ee
commit
ce8e87d60e
91 changed files with 9349 additions and 0 deletions
76
platform/avr-rss2/dev/adc.c
Normal file
76
platform/avr-rss2/dev/adc.c
Normal file
|
@ -0,0 +1,76 @@
|
|||
/* Copyright Robert Olsson */
|
||||
|
||||
#include <avr/pgmspace.h>
|
||||
#include <avr/fuse.h>
|
||||
#include <avr/eeprom.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <dev/watchdog.h>
|
||||
#include "params.h"
|
||||
#include "rss2.h"
|
||||
#include "contiki.h"
|
||||
#include "adc.h"
|
||||
#include "rss2.h"
|
||||
|
||||
uint16_t
|
||||
adc_read(uint8_t pin)
|
||||
{
|
||||
uint16_t volt = 0;
|
||||
int i;
|
||||
|
||||
ADMUX = pin; /* ADC pin PA0-PA7 -> 0-7 */
|
||||
ADCSRB &= ~(1 << MUX5); /* Needs to write before ADMUX pp 418 */
|
||||
ADMUX |= (1 << REFS1) | (1 << REFS0); /* 1.6 */
|
||||
|
||||
/* Maximal Track and Hold time */
|
||||
|
||||
ADCSRA = (1 << ADPS2) | (0 << ADPS1) | (1 << ADPS0); /* Prescaler /32 */
|
||||
ADCSRA |= (1 << ADEN); /* Enable the ADC */
|
||||
|
||||
while(!(ADCSRB & (1 << AVDDOK))) ; /* Wait for AVDD ok */
|
||||
while(!(ADCSRB & (1 << REFOK))) ; /* Wait for ref ok */
|
||||
|
||||
/* Ignore first result */
|
||||
|
||||
ADCSRA |= (1 << ADSC);
|
||||
while(ADCSRA & _BV(ADSC)) {
|
||||
}
|
||||
|
||||
ADCW = 0;
|
||||
#define RES 4
|
||||
|
||||
for(i = 0; i < RES; i++) {
|
||||
|
||||
/* Start the conversion */
|
||||
ADCSRA |= (1 << ADSC);
|
||||
|
||||
/* Wait for conversion */
|
||||
while(ADCSRA & (1 << ADSC)) {
|
||||
}
|
||||
|
||||
volt += ADCW;
|
||||
}
|
||||
ADMUX = 0; /* turn off internal vref */
|
||||
volt = volt / RES;
|
||||
|
||||
/* Disable the ADC to save power */
|
||||
ADCSRA &= ~_BV(ADEN);
|
||||
|
||||
return volt;
|
||||
}
|
||||
double
|
||||
adc_read_v_in(void)
|
||||
{
|
||||
/* Special treatment for v_in. Schottky voltage drop add */
|
||||
return ((double)adc_read(AV_IN)) * V_IN_FACTOR_SCHOTTKY + SCHOTTKY_DROP;
|
||||
}
|
||||
double
|
||||
adc_read_a1(void)
|
||||
{
|
||||
return ((double)adc_read(A1)) * V_IN_FACTOR;
|
||||
}
|
||||
double
|
||||
adc_read_a2(void)
|
||||
{
|
||||
return ((double)adc_read(A2)) * V_IN_FACTOR;
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue