summaryrefslogtreecommitdiff
path: root/n/avr/adc/adc.c
diff options
context:
space:
mode:
authorburg2005-03-22 08:43:24 +0000
committerburg2005-03-22 08:43:24 +0000
commita3e326954c6cc15003986e9c81d1a36e58d500e7 (patch)
tree9fae8b332ae8bb1f22643711b62605fe70ac3eec /n/avr/adc/adc.c
parent66c17635b2c83c68544211f572f75334c8e8358b (diff)
Ajout du Module ADC (non testé)
Diffstat (limited to 'n/avr/adc/adc.c')
-rw-r--r--n/avr/adc/adc.c98
1 files changed, 98 insertions, 0 deletions
diff --git a/n/avr/adc/adc.c b/n/avr/adc/adc.c
new file mode 100644
index 0000000..d7b3581
--- /dev/null
+++ b/n/avr/adc/adc.c
@@ -0,0 +1,98 @@
+/* adc.c */
+/* n.avr.adc - AVR ADC Module. {{{
+ *
+ * Copyright (C) 2005 Thomas Burg
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * Contact :
+ * Email: <burg@efrei.fr>
+ * }}} */
+#include "adc.h"
+
+#include <avr/io.h>
+#include <avr/signal.h>
+
+/* Tested AVR check. */
+#if defined (__AVR_ATmega8__)
+#elif defined (__AVR_ATmega8535__)
+#elif defined (__AVR_ATmega128__)
+#else
+# warning "adc: not tested on this chip."
+#endif
+
+
+/* +AutoDec */
+/* -AutoDec */
+
+/* CONF:
+ * 0x40 AVCC with external capacitor at AREF pin
+ * 0xC0 Internal 2.56V Voltage Reference with external capacitor at AREF
+ * pin
+ */
+
+#define CONF 0xC0
+
+/** Initialise adc. */
+void
+adc_init (void)
+{
+ ADMUX = CONF;
+#if defined (__AVR_ATmega8535__)
+ ADCSRA = ADEN | 0x7;
+#else
+ ADCSR = ADEN | 0x7;
+#endif
+}
+
+/** Choose and start mesure on adc line */
+void
+adc_start (uint8_t d)
+{
+ // Choose adc
+ ADMUX = CONF | ( d & 0x07);
+ /* ADEN active l'adc
+ * ADSC demarre la mesure */
+#if defined (__AVR_ATmega8535__)
+ ADCSRA |= ADSC;
+#else
+ ADCSR |= ADSC;
+#endif
+}
+
+/** check on finish mesure */
+uint8_t
+adc_checkf (void)
+{
+ // return != than zero when convertion is complete
+#if defined (__AVR_ATmega8535__)
+ return ADCSRA & ADIF;
+#else
+ return ADCSR & ADIF;
+#endif
+}
+
+/** Read mesure */
+uint16_t
+adc_read (void)
+{
+#if defined (__AVR_ATmega8535__)
+ ADCSRA &= ~ADIF;
+#else
+ ADCSR &= ~ADIF;
+#endif
+ return ADCW;
+}
+