Accelerometer
Schematic
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
- define F_CPU 1000000UL
- define outpt PORTB
- define INST PORTC
- define LCD_WIDTH 16
- include <util/delay.h>
- include <avr/io.h>
- include <ctype.h>
- 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>