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,36 @@
|
||||
|
||||
/*
|
||||
This code will cause a TekBot connected to a mega128 board to 'dance' in a cool
|
||||
pattern. No pins are used as input, and four Port B pins are used for output.
|
||||
|
||||
PORT MAP
|
||||
Port B, Pin 4 -> Output -> Right Motor Enable
|
||||
Port B, Pin 5 -> Output -> Right Motor Direction
|
||||
Port B, Pin 7 -> Output -> Left Motor Enable
|
||||
Port B, Pin 6 -> Output -> Left Motor Direction
|
||||
*/
|
||||
#define F_CPU 16000000
|
||||
#include <avr/io.h>
|
||||
#include <util/delay.h>
|
||||
#include <stdio.h>
|
||||
|
||||
int main(void)
|
||||
{
|
||||
DDRB = 0b11110000; // configure Port B pins for input/output
|
||||
PORTB = 0b11110000; // set initial value for Port B outputs
|
||||
// (initially, disable both motors)
|
||||
|
||||
while (1) { // loop forever
|
||||
|
||||
PORTB = 0b01100000; // make TekBot move forward
|
||||
_delay_ms(500); // wait for 500 ms
|
||||
PORTB = 0b00000000; // move backward
|
||||
_delay_ms(500); // wait for 500 ms
|
||||
PORTB = 0b00100000; // turn left
|
||||
_delay_ms(1000); // wait for 1 s
|
||||
PORTB = 0b01000000; // turn right
|
||||
_delay_ms(2000); // wait for 2 s
|
||||
PORTB = 0b00100000; // turn left
|
||||
_delay_ms(1000); // wait for 1 s
|
||||
}
|
||||
}
|
||||
Binary file not shown.
@@ -0,0 +1,19 @@
|
||||
:100000000C9446000C9450000C9450000C9450003A
|
||||
:100010000C9450000C9450000C9450000C94500020
|
||||
:100020000C9450000C9450000C9450000C94500010
|
||||
:100030000C9450000C9450000C9450000C94500000
|
||||
:100040000C9450000C9450000C9450000C945000F0
|
||||
:100050000C9450000C9450000C9450000C945000E0
|
||||
:100060000C9450000C9450000C9450000C945000D0
|
||||
:100070000C9450000C9450000C9450000C945000C0
|
||||
:100080000C9450000C9450000C94500011241FBE8E
|
||||
:10009000CFEFD0E1DEBFCDBF0E9452000C948B00A9
|
||||
:1000A0000C94000080EF87BB88BB20E680E290E4E0
|
||||
:1000B00028BB3FEF49E658E1315040405040E1F75E
|
||||
:1000C00000C0000018BA3FEF49E658E13150404007
|
||||
:1000D0005040E1F700C0000088BB3FEF43ED50E324
|
||||
:1000E000315040405040E1F700C0000098BB3FEF66
|
||||
:1000F00047EA51E6315040405040E1F700C000006F
|
||||
:1001000088BB3FEF43ED50E3315040405040E1F7B2
|
||||
:0A01100000C00000CDCFF894FFCF2F
|
||||
: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=DanceBot.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
|
||||
@@ -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
|
||||
@@ -0,0 +1,148 @@
|
||||
#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 drive_forward_time = 500;
|
||||
const unsigned int backup_time = 250; //ms
|
||||
const unsigned int debounce_time = 20; //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 both whiskers are pressed
|
||||
if(rw_pressed && lw_pressed){
|
||||
_delay_ms(drive_forward_time);
|
||||
RMD_CLR();
|
||||
LMD_CLR();
|
||||
_delay_ms(backup_time);
|
||||
LMD_SET();
|
||||
RMD_SET();
|
||||
|
||||
// Logic if the right whisker is pressed
|
||||
}else if(rw_pressed){
|
||||
_delay_ms(drive_forward_time);
|
||||
RMD_CLR();
|
||||
LMD_CLR();
|
||||
_delay_ms(backup_time);
|
||||
LMD_SET();
|
||||
_delay_ms(backup_time);
|
||||
RMD_SET();
|
||||
|
||||
// Logic if the left whisker is pressed
|
||||
}else if(lw_pressed){
|
||||
_delay_ms(drive_forward_time);
|
||||
RMD_CLR();
|
||||
LMD_CLR();
|
||||
_delay_ms(backup_time);
|
||||
RMD_SET();
|
||||
_delay_ms(backup_time);
|
||||
LMD_SET();
|
||||
}
|
||||
}
|
||||
}
|
||||
Binary file not shown.
@@ -0,0 +1,29 @@
|
||||
:100000000C9446000C945D000C945D000C945D0013
|
||||
:100010000C945D000C945D000C945D000C945D00EC
|
||||
:100020000C945D000C945D000C945D000C945D00DC
|
||||
:100030000C945D000C945D000C945D000C945D00CC
|
||||
:100040000C945D000C945D000C945D000C945D00BC
|
||||
:100050000C945D000C945D000C945D000C945D00AC
|
||||
:100060000C945D000C945D000C945D000C945D009C
|
||||
:100070000C945D000C945D000C945D000C945D008C
|
||||
:100080000C945D000C945D000C945D0011241FBE67
|
||||
:10009000CFEFD0E1DEBFCDBF11E0A0E0B1E0E0EBFB
|
||||
:1000A000F1E000E00BBF02C007900D92A630B1074F
|
||||
:1000B000D9F70E945F000C94D6000C940000BC9A03
|
||||
:1000C000BD9ABF9ABE9A8998919A8898909AC59A33
|
||||
:1000D000C69AC498C79880B3827080BB90B3917061
|
||||
:1000E00090BB2FEF39EF40E0215030404040E1F726
|
||||
:1000F00000C00000911138C0811116C08FEF99E641
|
||||
:1001000028E1815090402040E1F700C00000C598F0
|
||||
:10011000C6983FEF44E38CE0315040408040E1F727
|
||||
:1001200000C00000C69A1EC09FEF29E638E191503A
|
||||
:1001300020403040E1F700C00000C598C6984FEF5E
|
||||
:1001400084E39CE0415080409040E1F700C0000013
|
||||
:10015000C69A2FEF34E34CE0215030404040E1F7A5
|
||||
:1001600000C00000C59AB7CF8111B5CF8FEF99E6D7
|
||||
:1001700028E1815090402040E1F700C00000C59880
|
||||
:10018000C6983FEF44E38CE0315040408040E1F7B7
|
||||
:1001900000C00000C59A9FEF24E33CE0915020404E
|
||||
:1001A0003040E1F700C00000C69A95CFF894FFCF29
|
||||
:0601B0001400FA00F40146
|
||||
: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_challenge_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