changeset 12:6894e39cec87 draft

Add handling of the address jumpers
author Radomir Dopieralski <sheep-devel@sheep.art.pl>
date Fri, 20 Jan 2017 11:55:51 +0100
parents 740510238f32
children 846c874c742c
files firmware/main.c
diffstat 1 files changed, 22 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/firmware/main.c	Fri Jan 20 11:49:05 2017 +0100
+++ b/firmware/main.c	Fri Jan 20 11:55:51 2017 +0100
@@ -86,10 +86,31 @@
 }
 
 
+uint16_t adc(uint8_t pin) {
+    ADMUX = 0<<ADLAR | 0<<REFS1 | 0<<REFS0 | (0x03 & pin);
+    ADCSRA |= 1<<ADSC;
+    while (ADCSRA & (1<<ADSC)) {
+        // Pass.
+    }
+    return ADC;
+}
+
+
 int main() {
+    // Init ADC.
+    ADCSRA = 1<<ADEN | 1<<ADPS2 | 1<<ADPS1 | 0<<ADPS0; // Pre-scaler 64.
+    uint8_t i2c_address = I2C_ADDRESS;
+    if (adc(6) > 511) {
+        i2c_address += 1;
+    }
+    if (adc(7) > 511) {
+        i2c_address += 2;
+    }
+    ADCSRA = 0<<ADEN;
+
     // setup i2c slave
     PORTC |= 1<<PC4 | 1<<PC5; // enable pullups
-    TWAR = I2C_ADDRESS<<1;
+    TWAR = i2c_address<<1;
 
     // setup servos
     TCCR1A = 0x00;