diff options
Diffstat (limited to 'ferment.c')
-rw-r--r-- | ferment.c | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/ferment.c b/ferment.c new file mode 100644 index 0000000..aba1916 --- /dev/null +++ b/ferment.c @@ -0,0 +1,69 @@ +#define F_CPU 1000000UL +#include <stdint.h> +#include <string.h> +#include <avr/io.h> +#include <avr/interrupt.h> +#include <avr/sleep.h> +#include <avr/pgmspace.h> +#include <avr/eeprom.h> +#include <util/delay.h> + +/* port D + * + * 4 1- (NMOS, inverted) + * 5 1+ (PMOS) + * 6 2- (NMOS, inverted) + * 7 2+ (PMOS) + * + */ + +#define D_1_MINUS (1 << 4) +#define D_1_PLUS (1 << 5) +#define D_2_MINUS (1 << 6) +#define D_2_PLUS (1 << 7) + +/* Turns the H-bridge off, putting the output + * into high impedance mode. */ +static void bridge_off(void) +{ + PORTD |= D_1_MINUS | D_2_MINUS; + PORTD &= ~(D_1_PLUS | D_2_PLUS); +} + +/* Turns the H-bridge on, setting 1+ 2- */ +static void bridge_on_a(void) +{ + bridge_off(); + _delay_ms(100); + PORTD |= D_1_PLUS; + PORTD &= ~D_2_MINUS; +} + +/* Turns the H-bridge on, setting 1- 2+ */ +static void bridge_on_b(void) +{ + bridge_off(); + _delay_ms(100); + PORTD |= D_2_PLUS; + PORTD &= ~D_1_MINUS; +} + +/* Initializes the output port needed for the H-bridge */ +static void bridge_init(void) +{ + bridge_off(); + DDRD |= D_1_PLUS | D_1_MINUS | D_2_PLUS | D_2_MINUS; +} + +int main() +{ + bridge_init(); + /* simple demo, just flips polarity every now and then */ + while (1) { + bridge_on_a(); + _delay_ms(200); + bridge_on_b(); + _delay_ms(200); + } +} + |