diff --git a/ADC/main.c b/ADC/main.c index 488e69e..5bd2ad8 100644 --- a/ADC/main.c +++ b/ADC/main.c @@ -7,13 +7,16 @@ int main(void) { DDRL = 0xff;//port L direction: output //pins- 49:42 DDRC = 0xff;//port C direction: output //pins- 37:30 - DDRA = 0x00;//port A direction: input //pins- 22:29 + //DDRA = 0x00;//port A direction: input //pins- 22:29 ADCSRA = 0x87;// ADC enabled and prescaler=128 - ADMUX = 0xC0;// input at ADC0// data is right-justified + ADMUX = 0x61;// Ref= Vcc// data is left-justified //ADC0 is source pin while(1) { - ADCSRA |= (1< -#define F_CPU 16000000//16MHz -#include - -int main(void) -{ - //pin 37-port C0 ; C7- pin 30 - DDRC = 0xff;//port C direction: output - DDRA = 0xff;//port A direction: output - DDRB = 0x00;//pin 10-13: Port B4 to B7 //direction: input - //PINB = 0x00;//clearing PINB register - //PORTA = PINB; - //while(1); - - //enabling pull-up resistors//use=?//default output when pull-up enabled=high - PORTB = 0xff; - //PORTC = 0xff; - //PORTB=0x00;//disabling pull-up resistors?//does it help or not? - while(1) - { - PORTA = PINB;//PortA= pin 22-29 - if(PINB==0xFF) - { - PORTC = 0x01; - _delay_ms(5); - PORTC = 0x00; - _delay_ms(5); - }//f=100Hz - else if(PINB==0x00) - { - PORTC = 0x01; - _delay_ms(10); - PORTC = 0x00; - _delay_ms(10); - }//f=50Hz - /*else if(PINB==0x10) - { - PORTC = 0x01; - _delay_ms(7); - PORTC = 0x00; - _delay_ms(7); - }//f=approx 75Hz - else if(PINB==0x20) - { - PORTC = 0x01; - _delay_ms(20); - PORTC = 0x00; - _delay_ms(20); - }//f=25Hz - */ - } - - -} \ No newline at end of file diff --git a/GPIO_Input_2/main.o b/GPIO_Input_2/main.o deleted file mode 100644 index bae07be..0000000 Binary files a/GPIO_Input_2/main.o and /dev/null differ diff --git a/GPIO_Input_2/Makefile b/GPIO_check_Input/Makefile similarity index 100% rename from GPIO_Input_2/Makefile rename to GPIO_check_Input/Makefile diff --git a/GPIO_check_Input/main.c b/GPIO_check_Input/main.c new file mode 100644 index 0000000..c90b7de --- /dev/null +++ b/GPIO_check_Input/main.c @@ -0,0 +1,14 @@ +#include +#define F_CPU 16000000//16MHz +#include + +int main(void) +{ + DDRL &= 0xfe;//port L direction: input; pin 49 + PORTL |= 0x01;//L01 PU resistor activated + DDRC |= 0x01;//pin 37: pin C7 //direction: output + while(1) + { + PORTC = (PINL &= 0x01); + } + } \ No newline at end of file diff --git a/GPIO_Input_2/main.elf b/GPIO_check_Input/main.elf similarity index 88% rename from GPIO_Input_2/main.elf rename to GPIO_check_Input/main.elf index 521ac81..80a68d8 100755 Binary files a/GPIO_Input_2/main.elf and b/GPIO_check_Input/main.elf differ diff --git a/GPIO_Input_2/main.hex b/GPIO_check_Input/main.hex similarity index 68% rename from GPIO_Input_2/main.hex rename to GPIO_check_Input/main.hex index 0601b4e..abf1db3 100644 --- a/GPIO_Input_2/main.hex +++ b/GPIO_check_Input/main.hex @@ -13,11 +13,8 @@ :1000C0000C947E000C947E000C947E000C947E00B8 :1000D0000C947E000C947E000C947E000C947E00A8 :1000E0000C947E0011241FBECFEFD1E2DEBFCDBF46 -:1000F00000E00CBF0E9480000C94AA000C94000049 -:100100008FEF87B981B914B885B981E093B192B9FD -:1001100093B19F3F69F488B9EFE1FEE43197F1F7BD -:1001200000C0000018B8EFE1FEE43197F1F70FC00E -:1001300093B19111EBCF88B9EFE3FCE93197F1F777 -:1001400000C0000018B8EFE3FCE93197F1F700C0F8 -:080150000000DCCFF894FFCFA2 +:1000F00000E00CBF0E9480000C9492000C94000061 +:1001000080910A018E7F80930A0180910B018160AA +:1001100080930B01389A80910901817080930901C5 +:0801200088B9F9CFF894FFCF74 :00000001FF diff --git a/GPIO_check_Input/main.o b/GPIO_check_Input/main.o new file mode 100644 index 0000000..9327e90 Binary files /dev/null and b/GPIO_check_Input/main.o differ diff --git a/Input_Capture_Unit/main.c b/Input_Capture_Unit/main.c index 99a6410..6efdb7c 100644 --- a/Input_Capture_Unit/main.c +++ b/Input_Capture_Unit/main.c @@ -4,18 +4,19 @@ int main(void) { DDRA=0xFF;//Port A Output - DDRB=0xFF;//Port B Output - PORTD=0xFF;//activate pull-up + DDRC=0xFF;//Port C Output + PORTD=0xFF;//activate pull-up//ICP1 in pin PD4= grey 47 while(1) { TCCR1A=0x00;//Normal mode - TCCR1B=0x41;//rising edge, no pre-scaler, no noise canceller + //TCCR1B=0x41;//rising edge, no pre-scaler, no noise canceller + TCCR1B=0x45;//rising edge, pre-scaler is max=1024, no noise canceller //while(TIFR1 && (1< +#include +int main(void) +{ + DDRB = 0xFF;//Port B set as output + //DDRB |= (1 <<3);//Port B(0:3) set as output + uint16_t testArray[360]={0x80, +0x82, +0x84, +0x86, +0x88, +0x8b, +0x8d, +0x8f, +0x91, +0x93, +0x96, +0x98, +0x9a, +0x9c, +0x9e, +0xa0, +0xa3, +0xa5, +0xa7, +0xa9, +0xab, +0xad, +0xaf, +0xb1, +0xb3, +0xb5, +0xb7, +0xb9, +0xbb, +0xbd, +0xbf, +0xc1, +0xc3, +0xc5, +0xc7, +0xc9, +0xca, +0xcc, +0xce, +0xd0, +0xd1, +0xd3, +0xd5, +0xd6, +0xd8, +0xda, +0xdb, +0xdd, +0xde, +0xe0, +0xe1, +0xe3, +0xe4, +0xe5, +0xe7, +0xe8, +0xe9, +0xea, +0xec, +0xed, +0xee, +0xef, +0xf0, +0xf1, +0xf2, +0xf3, +0xf4, +0xf5, +0xf6, +0xf7, +0xf7, +0xf8, +0xf9, +0xf9, +0xfa, +0xfb, +0xfb, +0xfc, +0xfc, +0xfd, +0xfd, +0xfd, +0xfe, +0xfe, +0xfe, +0xff, +0xff, +0xff, +0xff, +0xff, +0xff, +0xff, +0xff, +0xff, +0xff, +0xff, +0xfe, +0xfe, +0xfe, +0xfd, +0xfd, +0xfd, +0xfc, +0xfc, +0xfb, +0xfb, +0xfa, +0xf9, +0xf9, +0xf8, +0xf7, +0xf7, +0xf6, +0xf5, +0xf4, +0xf3, +0xf2, +0xf1, +0xf0, +0xef, +0xee, +0xed, +0xec, +0xea, +0xe9, +0xe8, +0xe7, +0xe5, +0xe4, +0xe3, +0xe1, +0xe0, +0xde, +0xdd, +0xdb, +0xda, +0xd8, +0xd6, +0xd5, +0xd3, +0xd1, +0xd0, +0xce, +0xcc, +0xca, +0xc9, +0xc7, +0xc5, +0xc3, +0xc1, +0xbf, +0xbd, +0xbb, +0xb9, +0xb7, +0xb5, +0xb3, +0xb1, +0xaf, +0xad, +0xab, +0xa9, +0xa7, +0xa5, +0xa3, +0xa0, +0x9e, +0x9c, +0x9a, +0x98, +0x96, +0x93, +0x91, +0x8f, +0x8d, +0x8b, +0x88, +0x86, +0x84, +0x82, +0x80, +0x7d, +0x7b, +0x79, +0x77, +0x74, +0x72, +0x70, +0x6e, +0x6c, +0x69, +0x67, +0x65, +0x63, +0x61, +0x5f, +0x5c, +0x5a, +0x58, +0x56, +0x54, +0x52, +0x50, +0x4e, +0x4c, +0x4a, +0x48, +0x46, +0x44, +0x42, +0x40, +0x3e, +0x3c, +0x3a, +0x38, +0x36, +0x35, +0x33, +0x31, +0x2f, +0x2e, +0x2c, +0x2a, +0x29, +0x27, +0x25, +0x24, +0x22, +0x21, +0x1f, +0x1e, +0x1c, +0x1b, +0x1a, +0x18, +0x17, +0x16, +0x15, +0x13, +0x12, +0x11, +0x10, +0xf, +0xe, +0xd, +0xc, +0xb, +0xa, +0x9, +0x8, +0x8, +0x7, +0x6, +0x6, +0x5, +0x4, +0x4, +0x3, +0x3, +0x2, +0x2, +0x2, +0x1, +0x1, +0x1, +0x0, +0x0, +0x0, +0x0, +0x0, +0x0, +0x0, +0x0, +0x0, +0x0, +0x0, +0x1, +0x1, +0x1, +0x2, +0x2, +0x2, +0x3, +0x3, +0x4, +0x4, +0x5, +0x6, +0x6, +0x7, +0x8, +0x8, +0x9, +0xa, +0xb, +0xc, +0xd, +0xe, +0xf, +0x10, +0x11, +0x12, +0x13, +0x15, +0x16, +0x17, +0x18, +0x1a, +0x1b, +0x1c, +0x1e, +0x1f, +0x21, +0x22, +0x24, +0x25, +0x27, +0x29, +0x2a, +0x2c, +0x2e, +0x2f, +0x31, +0x33, +0x35, +0x36, +0x38, +0x3a, +0x3c, +0x3e, +0x40, +0x42, +0x44, +0x46, +0x48, +0x4a, +0x4c, +0x4e, +0x50, +0x52, +0x54, +0x56, +0x58, +0x5a, +0x5c, +0x5f, +0x61, +0x63, +0x65, +0x67, +0x69, +0x6c, +0x6e, +0x70, +0x72, +0x74, +0x77, +0x79, +0x7b, +0x7d}; + while(1) + { + for(int i=0;i<360;i++) + { + OCR0A= testArray[i]; + TCCR0A = 0x83;//non-inverting pwm + TCCR0B = 0x03;//prescaler = 64 for frequency to be approx 1kHz + //output of pwm is at pin 13(OC0) + _delay_ms(50); + } + //OCR0A= testArray[0]; + /*OCR0A = 0x80; + TCCR0A = 0x83;//non-inverting pwm + TCCR0B = 0x03; + */ + } + + +} \ No newline at end of file diff --git a/PWM_Module/Sinusoidal_PWM_LuT/main.elf b/PWM_Module/Sinusoidal_PWM_LuT/main.elf new file mode 100755 index 0000000..2b5c70b Binary files /dev/null and b/PWM_Module/Sinusoidal_PWM_LuT/main.elf differ diff --git a/PWM_Module/Sinusoidal_PWM_LuT/main.hex b/PWM_Module/Sinusoidal_PWM_LuT/main.hex new file mode 100644 index 0000000..1e324ad --- /dev/null +++ b/PWM_Module/Sinusoidal_PWM_LuT/main.hex @@ -0,0 +1,70 @@ +:100000000C9472000C948B000C948B000C948B005D +:100010000C948B000C948B000C948B000C948B0034 +:100020000C948B000C948B000C948B000C948B0024 +:100030000C948B000C948B000C948B000C948B0014 +:100040000C948B000C948B000C948B000C948B0004 +:100050000C948B000C948B000C948B000C948B00F4 +:100060000C948B000C948B000C948B000C948B00E4 +:100070000C948B000C948B000C948B000C948B00D4 +:100080000C948B000C948B000C948B000C948B00C4 +:100090000C948B000C948B000C948B000C948B00B4 +:1000A0000C948B000C948B000C948B000C948B00A4 +:1000B0000C948B000C948B000C948B000C948B0094 +:1000C0000C948B000C948B000C948B000C948B0084 +:1000D0000C948B000C948B000C948B000C948B0074 +:1000E0000C948B0011241FBECFEFD1E2DEBFCDBF39 +:1000F00000E00CBF14E0A0E0B2E0EEE7F1E000E0C9 +:100100000BBF02C007900D92A03DB107D9F70E9426 +:100110008D000C94BD000C940000CF93DF93CDB7FD +:10012000DEB7C05DD2400FB6F894DEBF0FBECDBFC4 +:100130008FEF84B980ED92E0E0E0F2E0DE0111960D +:1001400001900D920197E1F7CE018F529D4F23E868 +:1001500033E0FE0131964081329647BD24BD35BD66 +:100160004FEF50E762E0415050406040E1F700C07F +:0E0170000000E817F90779F7ECCFF894FFCFFD +:10017E00800082008400860088008B008D008F0036 +:10018E0091009300960098009A009C009E00A0009B +:10019E00A300A500A700A900AB00AD00AF00B10001 +:1001AE00B300B500B700B900BB00BD00BF00C10071 +:1001BE00C300C500C700C900CA00CC00CE00D000E5 +:1001CE00D100D300D500D600D800DA00DB00DD0068 +:1001DE00DE00E000E100E300E400E500E700E800F7 +:1001EE00E900EA00EC00ED00EE00EF00F000F10097 +:1001FE00F200F300F400F500F600F700F700F80047 +:10020E00F900F900FA00FB00FB00FC00FC00FD0009 +:10021E00FD00FD00FE00FE00FE00FF00FF00FF00DF +:10022E00FF00FF00FF00FF00FF00FF00FF00FF00C8 +:10023E00FE00FE00FE00FD00FD00FD00FC00FC00C7 +:10024E00FB00FB00FA00F900F900F800F700F700D8 +:10025E00F600F500F400F300F200F100F000EF00FC +:10026E00EE00ED00EC00EA00E900E800E700E50032 +:10027E00E400E300E100E000DE00DD00DB00DA0078 +:10028E00D800D600D500D300D100D000CE00CC00CF +:10029E00CA00C900C700C500C300C100BF00BD0031 +:1002AE00BB00B900B700B500B300B100AF00AD00A0 +:1002BE00AB00A900A700A500A300A0009E009C0013 +:1002CE009A0098009600930091008F008D008B008D +:1002DE00880086008400820080007D007B0079000B +:1002EE0077007400720070006E006C006900670089 +:1002FE006500630061005F005C005A005800560004 +:10030E005400520050004E004C004A004800460077 +:10031E004400420040003E003C003A0038003600E7 +:10032E003500330031002F002E002C002A0029004A +:10033E00270025002400220021001F001E001C00A3 +:10034E001B001A00180017001600150013001200EB +:10035E00110010000F000E000D000C000B000A0023 +:10036E00090008000800070006000600050004004A +:10037E00040003000300020002000200010001005D +:10038E00010000000000000000000000000000005E +:10039E00000000000000000001000100010002004A +:1003AE000200020003000300040004000500060022 +:1003BE00060007000800080009000A000B000C00E8 +:1003CE000D000E000F00100011001200130015009A +:1003DE001600170018001A001B001C001E001F003C +:1003EE002100220024002500270029002A002C00CD +:1003FE002E002F00310033003500360038003A0051 +:10040E003C003E00400042004400460048004A00C6 +:10041E004C004E00500052005400560058005A0036 +:10042E005C005F00610063006500670069006C009E +:10043E006E00700072007400770079007B007D0002 +:00000001FF diff --git a/PWM_Module/Sinusoidal_PWM_LuT/main.o b/PWM_Module/Sinusoidal_PWM_LuT/main.o new file mode 100644 index 0000000..4263d12 Binary files /dev/null and b/PWM_Module/Sinusoidal_PWM_LuT/main.o differ diff --git a/PWM_Module/Triangular_PWM/Makefile b/PWM_Module/Triangular_PWM/Makefile new file mode 100644 index 0000000..5e7f4ab --- /dev/null +++ b/PWM_Module/Triangular_PWM/Makefile @@ -0,0 +1,106 @@ +# simple AVR Makefile +# +# written by michael cousins (http://github.com/mcous) +# released to the public domain + +# Makefile +# +# targets: +# all: compiles the source code +# test: tests the isp connection to the mcu +# flash: writes compiled hex file to the mcu's flash memory +# fuse: writes the fuse bytes to the MCU +# disasm: disassembles the code for debugging +# clean: removes all .hex, .elf, and .o files in the source code and library directories + +# parameters (change this stuff accordingly) +# project name +PRJ = main +# avr mcu +MCU = atmega2560 +# mcu clock frequency +CLK = 16000000 +# avr programmer (and port if necessary) +# e.g. PRG = usbtiny -or- PRG = arduino -P /dev/tty.usbmodem411 +PRG = wiring -P /dev/ttyACM0 +# fuse values for avr: low, high, and extended +# these values are from an Arduino Uno (ATMega328P) +# see http://www.engbedded.com/fusecalc/ for other MCUs and options +LFU = 0xFF +HFU = 0xD0 +EFU = 0xFD +# program source files (not including external libraries) +SRC = $(PRJ).c +# where to look for external libraries (consisting of .c/.cpp files and .h files) +# e.g. EXT = ../../EyeToSee ../../YouSART +EXT = + + +################################################################################################# +# \/ stuff nobody needs to worry about until such time that worrying about it is appropriate \/ # +################################################################################################# + +# include path +INCLUDE := $(foreach dir, $(EXT), -I$(dir)) +# c flags +CFLAGS = -Wall -Os -DF_CPU=$(CLK) -mmcu=$(MCU) $(INCLUDE) +# any aditional flags for c++ +CPPFLAGS = + +# executables +AVRDUDE = avrdude -C /usr/share/arduino/hardware/tools/avrdude.conf -c $(PRG) -p $(MCU) -b 115200 -D +OBJCOPY = avr-objcopy +OBJDUMP = avr-objdump +SIZE = avr-size --format=avr --mcu=$(MCU) +CC = avr-gcc + +# generate list of objects +CFILES = $(filter %.c, $(SRC)) +EXTC := $(foreach dir, $(EXT), $(wildcard $(dir)/*.c)) +CPPFILES = $(filter %.cpp, $(SRC)) +EXTCPP := $(foreach dir, $(EXT), $(wildcard $(dir)/*.cpp)) +OBJ = $(CFILES:.c=.o) $(EXTC:.c=.o) $(CPPFILES:.cpp=.o) $(EXTCPP:.cpp=.o) + +# user targets +# compile all files +all: $(PRJ).hex + +# test programmer connectivity +test: + $(AVRDUDE) -v + +# flash program to mcu +flash: all + $(AVRDUDE) -U flash:w:$(PRJ).hex:i + +# write fuses to mcu +fuse: + $(AVRDUDE) -U lfuse:w:$(LFU):m -U hfuse:w:$(HFU):m -U efuse:w:$(EFU):m + +# generate disassembly files for debugging +disasm: $(PRJ).elf + $(OBJDUMP) -d $(PRJ).elf + +# remove compiled files +clean: + rm -f *.hex *.elf *.o + $(foreach dir, $(EXT), rm -f $(dir)/*.o;) + +# other targets +# objects from c files +.c.o: + $(CC) $(CFLAGS) -c $< -o $@ + +# objects from c++ files +.cpp.o: + $(CC) $(CFLAGS) $(CPPFLAGS) -c $< -o $@ + +# elf file +$(PRJ).elf: $(OBJ) + $(CC) $(CFLAGS) -o $(PRJ).elf $(OBJ) + +# hex file +$(PRJ).hex: $(PRJ).elf + rm -f $(PRJ).hex + $(OBJCOPY) -j .text -j .data -O ihex $(PRJ).elf $(PRJ).hex + $(SIZE) $(PRJ).elf diff --git a/PWM_Module/Sinusoidal_PWM/main.c b/PWM_Module/Triangular_PWM/main.c similarity index 79% rename from PWM_Module/Sinusoidal_PWM/main.c rename to PWM_Module/Triangular_PWM/main.c index 602f3a7..e3f8e07 100644 --- a/PWM_Module/Sinusoidal_PWM/main.c +++ b/PWM_Module/Triangular_PWM/main.c @@ -1,4 +1,4 @@ -//sinusoidal PWM +//triangular PWM @@ -23,4 +23,6 @@ int main(void) } -} \ No newline at end of file +} + +//Problem with this code: The duty cycle here varies in triangular manner and isnt sinusoidal \ No newline at end of file diff --git a/PWM_Module/Sinusoidal_PWM/main.elf b/PWM_Module/Triangular_PWM/main.elf similarity index 100% rename from PWM_Module/Sinusoidal_PWM/main.elf rename to PWM_Module/Triangular_PWM/main.elf diff --git a/PWM_Module/Sinusoidal_PWM/main.hex b/PWM_Module/Triangular_PWM/main.hex similarity index 100% rename from PWM_Module/Sinusoidal_PWM/main.hex rename to PWM_Module/Triangular_PWM/main.hex diff --git a/PWM_Module/Sinusoidal_PWM/main.o b/PWM_Module/Triangular_PWM/main.o similarity index 100% rename from PWM_Module/Sinusoidal_PWM/main.o rename to PWM_Module/Triangular_PWM/main.o diff --git a/PWM_Module/Sinusoidal_PWM/readme.txt b/PWM_Module/Triangular_PWM/readme.txt similarity index 87% rename from PWM_Module/Sinusoidal_PWM/readme.txt rename to PWM_Module/Triangular_PWM/readme.txt index c29c6bd..dbb0fa2 100644 --- a/PWM_Module/Sinusoidal_PWM/readme.txt +++ b/PWM_Module/Triangular_PWM/readme.txt @@ -14,7 +14,7 @@ Bit [1:0]= WGM[1:0]- Waveform Generation Mode=11- for non-inverting fast PWM. TCCR0B: Timer/Counter 0 Control Register B = 0x03 Bit [2:0] – CS0[2:0]-Clock Select = 011- for prescaler=64 in order to obtain frequency of 1kHz -The PWM runs in a loop with duty-cycle varying(i.e. changing value of OCR0A) such that the mean value follows a sinusoidal pattern. This function maybe helpful in AC generators. +The PWM runs in a loop with duty-cycle varying(i.e. changing value of OCR0A) such that the mean value follows a linear pattern. This function maybe helpful in AC generators. inbuilt delay function used to induce a delay of 0.5 seconds before the duty cycle of the PWM changes diff --git a/Writing-C-Code-for-AVR-DS90003262B.pdf b/Writing-C-Code-for-AVR-DS90003262B.pdf new file mode 100644 index 0000000..e927270 Binary files /dev/null and b/Writing-C-Code-for-AVR-DS90003262B.pdf differ