Accelerometer

From Electriki
Revision as of 01:24, 11 March 2010 by Spark (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigationJump to search


Schematic

Schematic of this device.

Movie

<youtube width="330" height="220" align="left">ddvZwZbhlhU</youtube>












Source

<enscript lang=c> // PORTC pin0 pin1 pin2 pin3 pin4 pin5 // AD0 AD1 AD2 RS R/W E // // PORTB DB0 - DB7 // PORTD Ledky


  1. define F_CPU 1000000UL
  2. define outpt PORTB
  3. define INST PORTC
  4. define LCD_WIDTH 16
  1. include <util/delay.h>
  2. include <avr/io.h>
  3. include <ctype.h>
  4. include <avr/interrupt.h>


void bf(void);

void in_b(void) { DDRB = 0x00; }

void out_b(void) { DDRB = 0xff; }

void write_i(void) { INST = (4<<3); INST = 0; }

void read_bf(void) { // PORTC = 4; INST = (6<<3); }

void write_d(void) { INST = (5<<3); INST = (1<<3); }

void read_d(void) { // PORTC = 4; INST = (7<<3); }

void clear(void) { outpt = 0b00000001; // clear display write_i(); bf(); /* outpt = 0b00000110; // entry mode write_i(); bf(); */ }


void init(void) { out_b();


_delay_ms(31); outpt = 0b00110000; // function set ( DL, N, F ) write_i(); bf();

_delay_us(41); outpt = 0b00001100; // display on write_i(); bf();

_delay_us(41); outpt = 0b00000001; // clear display write_i(); bf();

_delay_ms(1.6); outpt = 0b00000110; // entry mode write_i(); bf(); }

void bf(void) { unsigned int bf;

in_b(); read_bf(); // INST = 6; _delay_us(800); bf = outpt; bf &= 0b10000000; while(bf) { read_bf(); bf = outpt; bf &= 0b10000000; } out_b(); }


void write(int i) // write value { int j; int k = 100;

while(i>0) { j = i / k; i -= k*j; j += 48; _delay_ms(10); outpt = j; bf(); write_d(); PORTD = j; k /= 10; } }

int main(void) { DDRD = 0xff; DDRC = 0xf8;


       ADCSRA |= (1<<ADPS2);
       ADCSRA |= (0<<ADPS1);
       ADCSRA |= (0<<ADPS0);
       ADMUX |= (0<<MUX3);
       ADMUX |= (0<<MUX2);
       ADMUX |= (0<<MUX1);
       ADMUX |= (0<<MUX0);
       ADMUX |= (1<<ADLAR);
       ADCSRA |= (0<<ADFR);
       ADCSRA |= (0<<ADIE);

sei();

       ADCSRA |= (1<<ADEN);

unsigned int i,x,y; char c;

init(); clear(); _delay_ms(11); while(1) {

    //   ADMUX |= (0<<MUX0);
       ADMUX &= 0b11110000;

// _delay_us(100);

ADCSRA |= (1<<ADSC); x = 0; x |= ADCSRA; x &= 0b00010000; while(!x) { x = 0; x |= ADCSRA; x &= 0b00010000; } ADCSRA &= 0b11101111;

x = 0; x |= ADCH; clear();

bf(); c = 'x'; outpt = c; write_d();

bf(); c = ':'; outpt = c; write_d();

write(x); // _delay_ms(100);

bf(); c = ' '; outpt = c; write_d();

        ADMUX |= 0b00000001;

// _delay_us(100);

ADCSRA |= (1<<ADSC); y = 0; y |= ADCSRA; y &= 0b00010000; while(!y) { y = 0; y |= ADCSRA; y &= 0b00010000; }

y = 0; y |= ADCH;

bf(); c = 'y'; outpt = c; write_d();

bf(); c = ':'; outpt = c; write_d();


write(y); _delay_ms(125);

}

return 0; }

</enscript>