129 lines
2.6 KiB
C
129 lines
2.6 KiB
C
#include <stdint.h>
|
|
#include <avr/io.h>
|
|
#include <util/delay.h>
|
|
#include <avr/interrupt.h>
|
|
|
|
#define AINpin ((1<<PD6) | (1<<PD7))
|
|
|
|
volatile uint8_t led[3] = {(1<<PB3)|(1<<PB0),(1<<PB4)|(1<<PB0),(1<<PB5)|(1<<PB0)};
|
|
volatile uint8_t motor[6] = {
|
|
(1<<PD4)|(1<<PD1), //C+ A-
|
|
(1<<PD2)|(1<<PD1), //B+ A-
|
|
(1<<PD2)|(1<<PD5), //B+ C-
|
|
(1<<PD0)|(1<<PD5), //A+ C-
|
|
(1<<PD0)|(1<<PD3), //A+ B-
|
|
(1<<PD4)|(1<<PD3) //C+ B-
|
|
};
|
|
volatile uint8_t mux[6] = {
|
|
(0<<MUX2)|(1<<MUX1)|(0<<MUX0), //B
|
|
(0<<MUX2)|(0<<MUX1)|(1<<MUX0), //C
|
|
(0<<MUX2)|(1<<MUX1)|(1<<MUX0), //A
|
|
(0<<MUX2)|(1<<MUX1)|(0<<MUX0), //B
|
|
(0<<MUX2)|(0<<MUX1)|(1<<MUX0), //C
|
|
(0<<MUX2)|(1<<MUX1)|(1<<MUX0) //A
|
|
};
|
|
|
|
volatile uint8_t ind = 0;
|
|
|
|
void step() {
|
|
uint8_t i = ind;
|
|
PORTB = led[i];
|
|
PORTD = motor[i];
|
|
ADMUX = mux[i];
|
|
}
|
|
|
|
void runon() {
|
|
/*for(uint8_t j=0;j<2;j++) {
|
|
for(uint8_t i=0;i<6;i++) {
|
|
PORTB = led[i%3];
|
|
PORTD = motor[i];
|
|
_delay_ms(100);
|
|
}
|
|
}
|
|
/*for(uint8_t j=0;j<4;j++) {
|
|
for(uint8_t i=0;i<6;i++) {
|
|
PORTB = led[i%3];
|
|
PORTD = motor[i];
|
|
_delay_ms(50);
|
|
}
|
|
}
|
|
for(uint8_t j=0;j<8;j++) {
|
|
for(uint8_t i=0;i<6;i++) {
|
|
PORTB = led[i%3];
|
|
PORTD = motor[i];
|
|
_delay_ms(20);
|
|
}
|
|
}
|
|
for(uint8_t j=0;j<16;j++) {
|
|
for(uint8_t i=0;i<6;i++) {
|
|
PORTB = led[i%3];
|
|
PORTD = motor[i];
|
|
_delay_ms(10);
|
|
}
|
|
}
|
|
for(uint8_t j=0;j<32;j++) {
|
|
for(uint8_t i=0;i<6;i++) {
|
|
PORTB = led[i%3];
|
|
PORTD = motor[i];
|
|
_delay_ms(5);
|
|
}
|
|
}
|
|
for(uint8_t j=0;j<64;j++) {
|
|
for(uint8_t i=0;i<6;i++) {
|
|
PORTB = led[i%3];
|
|
PORTD = motor[i];
|
|
_delay_ms(3);
|
|
}
|
|
}*/
|
|
/*for(uint8_t k=0;k<120;k++) {
|
|
ind = k%6;
|
|
step();
|
|
_delay_ms(10);
|
|
}*/
|
|
}
|
|
|
|
ISR(ANA_COMP_vect) {
|
|
ind = ind+1%6;
|
|
step();
|
|
//_delay_ms(10);
|
|
}
|
|
|
|
int main(void) {
|
|
DDRB |= (1<<PB3) | (1<<PB4) | (1<<PB5) | (1<<PB0);
|
|
DDRD = 0b00111111;
|
|
DDRD &=~ AINpin;//as input
|
|
PORTD &=~ AINpin;//no Pull-up
|
|
|
|
runon();
|
|
|
|
cli();
|
|
ADCSRB |=(1<<ACME);//enable multiplexer
|
|
ADCSRA &=~(1<<ADEN);//make sure ADC is OFF
|
|
//ADMUX|=(0<<MUX2)|(1<<MUX1)|(1<<MUX0); //select ADC3 as negative AIN
|
|
|
|
ACSR |= (1<<ACIS1)|(0<<ACIS0);
|
|
ACSR |= (1<<ACIE); // Comparator Interrupt Enable setzen damit Interrupt aktiv
|
|
/*ACSR|=
|
|
(0<<ACD)| //Comparator ON
|
|
(0<<ACBG)| //Connect AIN0
|
|
(1<<ACIE)| //Comparator Interrupt enable
|
|
(0<<ACIC)| //input capture disabled
|
|
(0<<ACIS1)| //set interrupt on output toggle
|
|
(0<<ACIS0); */
|
|
|
|
|
|
PORTB = led[1];
|
|
PORTD = motor[1];
|
|
ADMUX = mux[1];
|
|
sei();
|
|
|
|
while(1) {
|
|
//PORTB = (1<<PB0);
|
|
/*for(uint8_t i=0;i<6;i++) {
|
|
PORTB = led[i%3];
|
|
PORTD = motor[i];
|
|
_delay_ms(10);
|
|
}*/
|
|
}
|
|
}
|