Browse Source

Adding files

master
Tanish25 2 years ago
parent
commit
759597d8f9
  1. 11
      ADC/main.c
  2. BIN
      ADC/main.elf
  3. 10
      ADC/main.hex
  4. BIN
      ADC/main.o
  5. 4
      ADC/readme.txt
  6. BIN
      ATmega640-1280-1281-2560-2561-Datasheet-DS40002211A.pdf
  7. 2
      GPIO_Input/main.c
  8. 57
      GPIO_Input_2/main.c
  9. BIN
      GPIO_Input_2/main.o
  10. 0
      GPIO_check_Input/Makefile
  11. 14
      GPIO_check_Input/main.c
  12. BIN
      GPIO_check_Input/main.elf
  13. 11
      GPIO_check_Input/main.hex
  14. BIN
      GPIO_check_Input/main.o
  15. 11
      Input_Capture_Unit/main.c
  16. BIN
      Input_Capture_Unit/main.elf
  17. 4
      Input_Capture_Unit/main.hex
  18. BIN
      Input_Capture_Unit/main.o
  19. 2
      Input_Capture_Unit/readme.txt
  20. 1
      Led_Analysis.txt
  21. BIN
      Muhammad Ali Mazidi, Sarmad Naimi, Sepehr Naimi - AVR Microcontroller and Embedded Systems_ Using Assembly and C (Pearson Custom Electronics Technology)-Prentice Hall (2010).pdf
  22. 11
      PWM_Module/PWM_deadtime/main.c
  23. BIN
      PWM_Module/PWM_deadtime/main.elf
  24. 8
      PWM_Module/PWM_deadtime/main.hex
  25. BIN
      PWM_Module/PWM_deadtime/main.o
  26. 4
      PWM_Module/PWM_deadtime/readme.txt
  27. 0
      PWM_Module/Sinusoidal_PWM_ADC/Makefile
  28. 106
      PWM_Module/Sinusoidal_PWM_LuT/Makefile
  29. 387
      PWM_Module/Sinusoidal_PWM_LuT/main.c
  30. BIN
      PWM_Module/Sinusoidal_PWM_LuT/main.elf
  31. 70
      PWM_Module/Sinusoidal_PWM_LuT/main.hex
  32. BIN
      PWM_Module/Sinusoidal_PWM_LuT/main.o
  33. 106
      PWM_Module/Triangular_PWM/Makefile
  34. 6
      PWM_Module/Triangular_PWM/main.c
  35. 0
      PWM_Module/Triangular_PWM/main.elf
  36. 0
      PWM_Module/Triangular_PWM/main.hex
  37. 0
      PWM_Module/Triangular_PWM/main.o
  38. 2
      PWM_Module/Triangular_PWM/readme.txt
  39. BIN
      Writing-C-Code-for-AVR-DS90003262B.pdf

11
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<<ADSC); //to start conversion
while(ADCSRA && (1<<ADIF)==0);// waiting for conversion to finish
//ADIF=0 ifu wanna reset, otherwise you keep it as 1 so that conversion doesnt start again
//ADCSRA |= (1<<ADSC); //to start conversion, we set ADSC bit to 1
ADCSRA |= 0x40; //ADSC=1
//while(ADCSRA && (1<<ADIF)==0);// waiting for conversion to finish
while(ADIF==0);
PORTL = ADCL;
PORTC = ADCH;
}

BIN
ADC/main.elf

Binary file not shown.

10
ADC/main.hex

@ -13,9 +13,9 @@
:1000C0000C947E000C947E000C947E000C947E00B8
:1000D0000C947E000C947E000C947E000C947E00A8
:1000E0000C947E0011241FBECFEFD1E2DEBFCDBF46
:1000F00000E00CBF0E9480000C949A000C94000059
:100100008FEF80930A0187B911B887E880937A004E
:1001100080EC80937C0080917A00806480937A00E8
:1001200080917A008091780080930B018091790012
:0801300088B9F1CFF894FFCF6C
:1000F00000E00CBF0E9480000C9497000C9400005C
:100100008FEF80930A0187B987E880937A0081E6B0
:1001100080937C0080917A00806480937A00809143
:10012000780080930B018091790088B9F3CFF8941F
:02013000FFCFFF
:00000001FF

BIN
ADC/main.o

Binary file not shown.

4
ADC/readme.txt

@ -12,8 +12,8 @@ Bit 4= ADIF: ADC Interrupt Flag- This bit is set when an ADC conversion complete
Bit [2:0] = 111 = Prescaler-128
ADMUX: ADC Multiplexer = 0xC0
Bit [7:6] = 11 = Vref= 2.56V
Bit 5 = 0 = Result(10-bits-wide) is right-justified
Bit [7:6] = 01 = Vref= AVcc = 5V
Bit 5 = 1 = Result(10-bits-wide) is left-justified
Bit [4:0] = 00000 = Input at ADC0
ADCL: ADC Data Register Lower= stores the lower 8 bits of result of conversion

BIN
ATmega640-1280-1281-2560-2561-Datasheet-DS40002211A.pdf

Binary file not shown.

2
GPIO_Input/main.c

@ -10,7 +10,7 @@ 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
DDRB = 0x00;//pin 10-13: Port B4 to B7 //direction: input; pin 53-50: Port B0 to B3
//PINB = 0x00;//clearing PINB register
//PORTA = PINB;
//while(1);

57
GPIO_Input_2/main.c

@ -1,57 +0,0 @@
//GPIO- Input Configuration
#include <avr/io.h>
#define F_CPU 16000000//16MHz
#include <util/delay.h>
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
*/
}
}

BIN
GPIO_Input_2/main.o

Binary file not shown.

0
GPIO_Input_2/Makefile → GPIO_check_Input/Makefile

14
GPIO_check_Input/main.c

@ -0,0 +1,14 @@
#include <avr/io.h>
#define F_CPU 16000000//16MHz
#include <util/delay.h>
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);
}
}

BIN
GPIO_Input_2/main.elf → GPIO_check_Input/main.elf

Binary file not shown.

11
GPIO_Input_2/main.hex → GPIO_check_Input/main.hex

@ -13,11 +13,8 @@
:1000C0000C947E000C947E000C947E000C947E00B8
:1000D0000C947E000C947E000C947E000C947E00A8
:1000E0000C947E0011241FBECFEFD1E2DEBFCDBF46
:1000F00000E00CBF0E9480000C94AA000C94000049
:100100008FEF87B981B914B885B981E093B192B9FD
:1001100093B19F3F69F488B9EFE1FEE43197F1F7BD
:1001200000C0000018B8EFE1FEE43197F1F70FC00E
:1001300093B19111EBCF88B9EFE3FCE93197F1F777
:1001400000C0000018B8EFE3FCE93197F1F700C0F8
:080150000000DCCFF894FFCFA2
:1000F00000E00CBF0E9480000C9492000C94000061
:1001000080910A018E7F80930A0180910B018160AA
:1001100080930B01389A80910901817080930901C5
:0801200088B9F9CFF894FFCF74
:00000001FF

BIN
GPIO_check_Input/main.o

Binary file not shown.

11
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<<ICF1)==0);//
//TIFR1=(1<<ICF1);//clear ICF1
while(TIFR1 && 0x20 == 0x00);//waiting for ICF1 Flag to be set
//ICF1=0;//why not this command?
TIFR1=(1<<ICF1);
PORTA=ICR1L;//
PORTB=ICR1H;//
PORTA=ICR1L;//check output in pins 22-29(A7=29)
PORTC=ICR1H;//check output in pins 37-30(C0=30)
}
}

BIN
Input_Capture_Unit/main.elf

Binary file not shown.

4
Input_Capture_Unit/main.hex

@ -14,7 +14,7 @@
:1000D0000C947E000C947E000C947E000C947E00A8
:1000E0000C947E0011241FBECFEFD1E2DEBFCDBF46
:1000F00000E00CBF0E9480000C9493000C94000060
:100100008FEF81B984B98BB921E490E2109280001D
:100100008FEF81B987B98BB925E490E21092800016
:100110002093810086B396BB8091860082B980913E
:0A012000870085B9F3CFF894FFCFF4
:0A012000870088B9F3CFF894FFCFF1
:00000001FF

BIN
Input_Capture_Unit/main.o

Binary file not shown.

2
Input_Capture_Unit/readme.txt

@ -2,7 +2,7 @@ Registers involved:
GPIO:
DDRA: Data Direction Register for Port A= 0xFF for output
DDRB: Data Direction Register for Port B= 0xFF for output
DDRC: Data Direction Register for Port C= 0xFF for output
PORTD: Port D Data Register= set as 0xFF to activate pull up registers
Input Capture Unit(ICU):

1
Led_Analysis.txt

@ -13,4 +13,3 @@ max current LED can tolerate:
Resistance offered within the board(if any):
Hi- change made

BIN
Muhammad Ali Mazidi, Sarmad Naimi, Sepehr Naimi - AVR Microcontroller and Embedded Systems_ Using Assembly and C (Pearson Custom Electronics Technology)-Prentice Hall (2010).pdf

Binary file not shown.

11
PWM_Module/PWM_deadtime/main.c

@ -6,14 +6,17 @@ int main(void)
{
DDRB = 0xFF;//Port B set as output
OCR0A= 0x7F;//50 percent of 255=duty cycle
OCR0A= 0x7F;//50 percent of 255=duty cycle//decimal=127
TCCR0A = 0x83;
TCCR0B = 0x03;//prescaler = 64 for 1kHz
//TCCR0B = 0x03;//prescaler = 64 for 1kHz
TCCR0B = 0x02;//prescaler = 8 for 8kHz
//output at OC0A=pin 13
OCR2A= 0x87;//duty cycle= 47 percent, value= 0.53*255=135
//OCR2A= 0x87;//duty cycle= 47 percent, value= 0.53*255=135
OCR2A= 0x83;//duty cycle= 48 percent, value= 0.52*255=131
TCCR2A = 0xC3;//inverting PWM
TCCR2B = 0x04;//prescaler = 64 for 1 kHz
//TCCR2B = 0x04;//prescaler = 64 for 1 kHz
TCCR2B = 0x02;//prescaler = 8 for 8kHz
//output at OC2A=pin 10
while(1);

BIN
PWM_Module/PWM_deadtime/main.elf

Binary file not shown.

8
PWM_Module/PWM_deadtime/main.hex

@ -13,8 +13,8 @@
:1000C0000C947E000C947E000C947E000C947E00B8
:1000D0000C947E000C947E000C947E000C947E00A8
:1000E0000C947E0011241FBECFEFD1E2DEBFCDBF46
:1000F00000E00CBF0E9480000C9492000C94000061
:100100008FEF84B98FE787BD83E884BD83E085BD29
:1001100087E88093B30083EC8093B00084E0809301
:08012000B100FFCFF894FFCFFE
:1000F00000E00CBF0E9480000C9490000C94000063
:100100008FEF84B98FE787BD93E894BD82E085BD0A
:100110009093B30093EC9093B0008093B100FFCF25
:04012000F894FFCF81
:00000001FF

BIN
PWM_Module/PWM_deadtime/main.o

Binary file not shown.

4
PWM_Module/PWM_deadtime/readme.txt

@ -31,4 +31,6 @@ The most important nonlinearity is caused by the necessary
blanking time between top and bottom switch to avoid inverter
leg shoot-through of the DC bus circuit. The type of the switch
and pre-driver characteristics determine amount of the
necessary blank time.
necessary blank time.
for a difference of 2 decimal numbers in binary, and frequency of 8kHz, we obtain a deadtime of 1.5 microseconds

0
PWM_Module/Sinusoidal_PWM/Makefile → PWM_Module/Sinusoidal_PWM_ADC/Makefile

106
PWM_Module/Sinusoidal_PWM_LuT/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

387
PWM_Module/Sinusoidal_PWM_LuT/main.c

@ -0,0 +1,387 @@
#define F_CPU 16000000//16Mhz
#define MS_DELAY 1000
#include <avr/io.h>
#include <util/delay.h>
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;
*/
}
}

BIN
PWM_Module/Sinusoidal_PWM_LuT/main.elf

Binary file not shown.

70
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

BIN
PWM_Module/Sinusoidal_PWM_LuT/main.o

Binary file not shown.

106
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

6
PWM_Module/Sinusoidal_PWM/main.c → PWM_Module/Triangular_PWM/main.c

@ -1,4 +1,4 @@
//sinusoidal PWM
//triangular PWM
@ -23,4 +23,6 @@ int main(void)
}
}
}
//Problem with this code: The duty cycle here varies in triangular manner and isnt sinusoidal

0
PWM_Module/Sinusoidal_PWM/main.elf → PWM_Module/Triangular_PWM/main.elf

0
PWM_Module/Sinusoidal_PWM/main.hex → PWM_Module/Triangular_PWM/main.hex

0
PWM_Module/Sinusoidal_PWM/main.o → PWM_Module/Triangular_PWM/main.o

2
PWM_Module/Sinusoidal_PWM/readme.txt → 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

BIN
Writing-C-Code-for-AVR-DS90003262B.pdf

Binary file not shown.
Loading…
Cancel
Save