From 88c02bb9dad7d955676fe44f6595f996bde3f07e Mon Sep 17 00:00:00 2001 From: siddhu8990 Date: Sat, 28 Nov 2015 11:01:40 +0530 Subject: Intermediate commit aith support added for AVR (GPIO,ADC). Does not support other targets. --- src/c/hardware/avr/adc/u8AVRReadADCs.c | 46 ++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 src/c/hardware/avr/adc/u8AVRReadADCs.c (limited to 'src/c/hardware/avr/adc/u8AVRReadADCs.c') diff --git a/src/c/hardware/avr/adc/u8AVRReadADCs.c b/src/c/hardware/avr/adc/u8AVRReadADCs.c new file mode 100644 index 00000000..71fe1363 --- /dev/null +++ b/src/c/hardware/avr/adc/u8AVRReadADCs.c @@ -0,0 +1,46 @@ +// Function to get voltage on analog pin on AVR +// +// Calling Sequence +// u8AVRReadADCs(channel) +// +// Parameters +// channel : Select which channel is to be read. Values from 0-7 select one +// of the pins ADC0-ADC7. For other possible channel values refer +// datasheet +// Returns-> +// result : Digital value for the voltage present on channel selected +// +// Description +// This function returns digital value for present on adc pins. 'channel' +// selects which of the ADC0-ADC7 is to be used for reading analog value. +// Apart from reading just ADC0-ADC7 other it can also read differential +// voltages between some pins. For channel values for those options, please +// refer datasheet. +// +// Examples +// adc_result = u8AVRReadADC(0) //Read ADC0 +// +// Authors +// Siddhesh Wani +// + + +#include "AVRPeripheralADC.h" + +uint16 u8AVRReadADCs(uint8 channel) +{ + /*Set ADC conversion channel*/ + ADMUX |= (channel & 0x1F); + + /*Start ADC conversion. Set 'ADSC' bit*/ + ADCSRA |= (1<<6); + + /*Wait for conversion to complete. Check 'ADIF' bit*/ + while(!(ADCSRA & (1<<4))); + + /*Clear ADIF flag*/ + ADCSRA |= (1<<4); + + /*ADC conversion result is stored in ADCH/L registers*/ + return (ADC); +} -- cgit From 9e506f48291533cba7b4c555b0d2e98f234bfbe3 Mon Sep 17 00:00:00 2001 From: siddhu8990 Date: Wed, 19 Apr 2017 14:28:34 +0530 Subject: Merged Ashish's work --- src/c/hardware/avr/adc/u8AVRReadADCs.c | 54 ++++++++++++++++++++++++++++------ 1 file changed, 45 insertions(+), 9 deletions(-) (limited to 'src/c/hardware/avr/adc/u8AVRReadADCs.c') diff --git a/src/c/hardware/avr/adc/u8AVRReadADCs.c b/src/c/hardware/avr/adc/u8AVRReadADCs.c index 71fe1363..302f8c82 100644 --- a/src/c/hardware/avr/adc/u8AVRReadADCs.c +++ b/src/c/hardware/avr/adc/u8AVRReadADCs.c @@ -1,3 +1,13 @@ +// Copyright (C) 2017 - IIT Bombay - FOSSEE +// +// This file must be used under the terms of the CeCILL. +// This source file is licensed as described in the file COPYING, which +// you should have received as part of this distribution. The terms +// are also available at +// http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt +// Organization: FOSSEE, IIT Bombay +// Email: toolbox@scilab.in + // Function to get voltage on analog pin on AVR // // Calling Sequence @@ -22,25 +32,51 @@ // // Authors // Siddhesh Wani -// +// Ashish Kamble #include "AVRPeripheralADC.h" -uint16 u8AVRReadADCs(uint8 channel) +uint8 u8AVRReadADCs(uint8 channel) { - /*Set ADC conversion channel*/ - ADMUX |= (channel & 0x1F); + +uint8 i; + + ADCH=0x00; + + i=channel&0x07; + ADMUX=i|0x60; //i|0x40 for 10 bits + ADCSRA|=1<