mirror of
https://github.com/caperren/school_archives.git
synced 2025-11-09 21:51:15 +00:00
Added missing classes from final year at OSU
This commit is contained in:
@@ -0,0 +1,136 @@
|
||||
#define F_CPU 16000000
|
||||
#include <avr/io.h>
|
||||
#include <util/delay.h>
|
||||
#include <stdio.h>
|
||||
|
||||
// Generic register bitwise operators
|
||||
#define REG_SET(reg, pin) (reg |= _BV(pin))
|
||||
#define REG_CLR(reg, pin) (reg &= ~(_BV(pin)))
|
||||
#define REG_WRITE(reg, pin, value) ((value == 1) ? REG_SET(reg, pin) : REG_CLR(reg, pin))
|
||||
#define REG_CHECK(reg, pin) ((reg &= (_BV(pin))) > 0)
|
||||
|
||||
// Right motor enable
|
||||
#define RME_DDR DDRB
|
||||
#define RME_OUT PORTB
|
||||
#define RME_IN PINB
|
||||
#define RME_PIN 4
|
||||
#define RME_IO_OUT() (REG_SET(RME_DDR, RME_PIN))
|
||||
#define RME_IO_IN() (REG_CLR(RME_DDR, RME_PIN))
|
||||
#define RME_SET() (REG_SET(RME_OUT, RME_PIN))
|
||||
#define RME_CLR() (REG_CLR(RME_OUT, RME_PIN))
|
||||
#define RME_WRITE(value) (REG_WRITE(RME_OUT, RME_PIN, value))
|
||||
#define RME_STATE() (REG_CHECK(RME_IN, RME_PIN))
|
||||
|
||||
// Right motor drive
|
||||
#define RMD_DDR DDRB
|
||||
#define RMD_OUT PORTB
|
||||
#define RMD_IN PINB
|
||||
#define RMD_PIN 5
|
||||
#define RMD_IO_OUT() (REG_SET(RMD_DDR, RMD_PIN))
|
||||
#define RMD_IO_IN() (REG_CLR(RMD_DDR, RMD_PIN))
|
||||
#define RMD_SET() (REG_SET(RMD_OUT, RMD_PIN))
|
||||
#define RMD_CLR() (REG_CLR(RMD_OUT, RMD_PIN))
|
||||
#define RMD_WRITE(value) (REG_WRITE(RMD_OUT, RMD_PIN, value))
|
||||
#define RMD_STATE() (REG_CHECK(RMD_IN, RMD_PIN))
|
||||
|
||||
// Left motor enable
|
||||
#define LME_DDR DDRB
|
||||
#define LME_OUT PORTB
|
||||
#define LME_IN PINB
|
||||
#define LME_PIN 7
|
||||
#define LME_IO_OUT() (REG_SET(LME_DDR, LME_PIN))
|
||||
#define LME_IO_IN() (REG_CLR(LME_DDR, LME_PIN))
|
||||
#define LME_SET() (REG_SET(LME_OUT, LME_PIN))
|
||||
#define LME_CLR() (REG_CLR(LME_OUT, LME_PIN))
|
||||
#define LME_WRITE(value) (REG_WRITE(LME_OUT, LME_PIN, value))
|
||||
#define LME_STATE() (REG_CHECK(LME_IN, LME_PIN))
|
||||
|
||||
// Left motor drive
|
||||
#define LMD_DDR DDRB
|
||||
#define LMD_OUT PORTB
|
||||
#define LMD_IN PINB
|
||||
#define LMD_PIN 6
|
||||
#define LMD_IO_OUT() (REG_SET(LMD_DDR, LMD_PIN))
|
||||
#define LMD_IO_IN() (REG_CLR(LMD_DDR, LMD_PIN))
|
||||
#define LMD_SET() (REG_SET(LMD_OUT, LMD_PIN))
|
||||
#define LMD_CLR() (REG_CLR(LMD_OUT, LMD_PIN))
|
||||
#define LMD_WRITE(value) (REG_WRITE(LMD_OUT, LMD_PIN, value))
|
||||
#define LMD_STATE() (REG_CHECK(LMD_IN, LMD_PIN))
|
||||
|
||||
// Left whisker
|
||||
#define LW_DDR DDRD
|
||||
#define LW_OUT PORTD
|
||||
#define LW_IN PIND
|
||||
#define LW_PIN 1
|
||||
#define LW_IO_OUT() (REG_SET(LW_DDR, LW_PIN))
|
||||
#define LW_IO_IN() (REG_CLR(LW_DDR, LW_PIN))
|
||||
#define LW_SET() (REG_SET(LW_OUT, LW_PIN))
|
||||
#define LW_CLR() (REG_CLR(LW_OUT, LW_PIN))
|
||||
#define LW_WRITE(value) (REG_WRITE(LW_OUT, LW_PIN, value))
|
||||
#define LW_STATE() (REG_CHECK(LW_IN, LW_PIN))
|
||||
|
||||
// Right whisker
|
||||
#define RW_DDR DDRD
|
||||
#define RW_OUT PORTD
|
||||
#define RW_IN PIND
|
||||
#define RW_PIN 0
|
||||
#define RW_IO_OUT() (REG_SET(RW_DDR, RW_PIN))
|
||||
#define RW_IO_IN() (REG_CLR(RW_DDR, RW_PIN))
|
||||
#define RW_SET() (REG_SET(RW_OUT, RW_PIN))
|
||||
#define RW_CLR() (REG_CLR(RW_OUT, RW_PIN))
|
||||
#define RW_WRITE(value) (REG_WRITE(RW_OUT, RW_PIN, value))
|
||||
#define RW_STATE() (REG_CHECK(RW_IN, RW_PIN))
|
||||
|
||||
const unsigned int backup_time = 1000; //ms
|
||||
const unsigned int debounce_time = 200; //ms
|
||||
|
||||
int main(void){
|
||||
// Set motor enable and direction to outputs
|
||||
RME_IO_OUT();
|
||||
RMD_IO_OUT();
|
||||
LME_IO_OUT();
|
||||
LMD_IO_OUT();
|
||||
|
||||
// Set whiskers to inputs and enable pullup resistors
|
||||
LW_IO_IN();
|
||||
LW_SET();
|
||||
|
||||
RW_IO_IN();
|
||||
RW_SET();
|
||||
|
||||
// Enables motors and sets bot to move forward
|
||||
RMD_SET();
|
||||
LMD_SET();
|
||||
RME_CLR(); // Setting to zero enables motors
|
||||
LME_CLR(); // Setting to zero enables motors
|
||||
|
||||
|
||||
// Main program loop
|
||||
while (1){
|
||||
// Get states of whiskers
|
||||
unsigned char lw_pressed = !LW_STATE();
|
||||
unsigned char rw_pressed = !RW_STATE();
|
||||
|
||||
// Handle noise from button press
|
||||
_delay_ms(debounce_time);
|
||||
|
||||
// Logic if the right whisker is pressed
|
||||
if(rw_pressed){
|
||||
RMD_CLR();
|
||||
LMD_CLR();
|
||||
_delay_ms(backup_time);
|
||||
RMD_SET();
|
||||
_delay_ms(backup_time);
|
||||
LMD_SET();
|
||||
|
||||
// Logic if the right whisker is pressed
|
||||
}else if(lw_pressed){
|
||||
RMD_CLR();
|
||||
LMD_CLR();
|
||||
_delay_ms(backup_time);
|
||||
LMD_SET();
|
||||
_delay_ms(backup_time);
|
||||
RMD_SET();
|
||||
}
|
||||
}
|
||||
}
|
||||
Binary file not shown.
@@ -0,0 +1,24 @@
|
||||
:100000000C9446000C945D000C945D000C945D0013
|
||||
:100010000C945D000C945D000C945D000C945D00EC
|
||||
:100020000C945D000C945D000C945D000C945D00DC
|
||||
:100030000C945D000C945D000C945D000C945D00CC
|
||||
:100040000C945D000C945D000C945D000C945D00BC
|
||||
:100050000C945D000C945D000C945D000C945D00AC
|
||||
:100060000C945D000C945D000C945D000C945D009C
|
||||
:100070000C945D000C945D000C945D000C945D008C
|
||||
:100080000C945D000C945D000C945D0011241FBE67
|
||||
:10009000CFEFD0E1DEBFCDBF11E0A0E0B1E0ECE5F5
|
||||
:1000A000F1E000E00BBF02C007900D92A430B10751
|
||||
:1000B000D9F70E945F000C94AC000C940000BC9A2D
|
||||
:1000C000BD9ABF9ABE9A8998919A8898909AC59A33
|
||||
:1000D000C69AC498C79880B3827080BB90B3917061
|
||||
:1000E00090BB2FEF33EC49E0215030404040E1F726
|
||||
:1000F00000C00000911117C0C598C6988FEF93ED0E
|
||||
:1001000020E3815090402040E1F700C00000C59AF4
|
||||
:100110003FEF43ED80E3315040408040E1F700C0C5
|
||||
:100120000000C69AD8CF8111D6CFC598C6989FEF48
|
||||
:1001300023ED30E3915020403040E1F700C0000053
|
||||
:10014000C69A4FEF83ED90E3415080409040E1F735
|
||||
:0C01500000C00000C59ABFCFF894FFCF9C
|
||||
:04015C00C800E803EC
|
||||
:00000001FF
|
||||
@@ -0,0 +1,16 @@
|
||||
MCU=atmega128
|
||||
CC=avr-gcc
|
||||
OBJCOPY=avr-objcopy
|
||||
CFLAGS=-std=c99 -Wall -g -Os -mmcu=${MCU} -DF_CPU=${F_CPU} -I.
|
||||
TARGET=main
|
||||
SRCS=Corwin_Perren_Lab2_sourcecode.c
|
||||
|
||||
all:
|
||||
${CC} ${CFLAGS} -o ${TARGET}.bin ${SRCS}
|
||||
${OBJCOPY} -j .text -j .data -O ihex ${TARGET}.bin ${TARGET}.hex
|
||||
|
||||
flash:
|
||||
avrdude -p ${MCU} -c usbasp -U flash:w:${TARGET}.hex:i -F -P usb
|
||||
|
||||
clean:
|
||||
rm -f *.bin *.hex
|
||||
Reference in New Issue
Block a user