Compare commits

..

2 Commits

Author SHA1 Message Date
Tanish25 42bae683e1 Adding files 2022-10-05 23:04:27 +05:30
Tanish25 759597d8f9 Adding files 2022-10-05 20:05:08 +05:30
41 changed files with 783 additions and 97 deletions

View File

@ -7,13 +7,16 @@ int main(void)
{ {
DDRL = 0xff;//port L direction: output //pins- 49:42 DDRL = 0xff;//port L direction: output //pins- 49:42
DDRC = 0xff;//port C direction: output //pins- 37:30 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 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) while(1)
{ {
ADCSRA |= (1<<ADSC); //to start conversion //ADIF=0 ifu wanna reset, otherwise you keep it as 1 so that conversion doesnt start again
while(ADCSRA && (1<<ADIF)==0);// waiting for conversion to finish //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; PORTL = ADCL;
PORTC = ADCH; PORTC = ADCH;
} }

Binary file not shown.

View File

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

Binary file not shown.

View File

@ -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 Bit [2:0] = 111 = Prescaler-128
ADMUX: ADC Multiplexer = 0xC0 ADMUX: ADC Multiplexer = 0xC0
Bit [7:6] = 11 = Vref= 2.56V Bit [7:6] = 01 = Vref= AVcc = 5V
Bit 5 = 0 = Result(10-bits-wide) is right-justified Bit 5 = 1 = Result(10-bits-wide) is left-justified
Bit [4:0] = 00000 = Input at ADC0 Bit [4:0] = 00000 = Input at ADC0
ADCL: ADC Data Register Lower= stores the lower 8 bits of result of conversion ADCL: ADC Data Register Lower= stores the lower 8 bits of result of conversion

View File

@ -10,7 +10,7 @@ int main(void)
//pin 37-port C0 ; C7- pin 30 //pin 37-port C0 ; C7- pin 30
DDRC = 0xff;//port C direction: output DDRC = 0xff;//port C direction: output
DDRA = 0xff;//port A 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 //PINB = 0x00;//clearing PINB register
//PORTA = PINB; //PORTA = PINB;
//while(1); //while(1);

View File

@ -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
*/
}
}

Binary file not shown.

14
GPIO_check_Input/main.c Normal file
View File

@ -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);
}
}

View File

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

BIN
GPIO_check_Input/main.o Normal file

Binary file not shown.

View File

@ -4,18 +4,19 @@
int main(void) int main(void)
{ {
DDRA=0xFF;//Port A Output DDRA=0xFF;//Port A Output
DDRB=0xFF;//Port B Output DDRC=0xFF;//Port C Output
PORTD=0xFF;//activate pull-up PORTD=0xFF;//activate pull-up//ICP1 in pin PD4= grey 47
while(1) while(1)
{ {
TCCR1A=0x00;//Normal mode 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);// //while(TIFR1 && (1<<ICF1)==0);//
//TIFR1=(1<<ICF1);//clear ICF1 //TIFR1=(1<<ICF1);//clear ICF1
while(TIFR1 && 0x20 == 0x00);//waiting for ICF1 Flag to be set while(TIFR1 && 0x20 == 0x00);//waiting for ICF1 Flag to be set
//ICF1=0;//why not this command? //ICF1=0;//why not this command?
TIFR1=(1<<ICF1); TIFR1=(1<<ICF1);
PORTA=ICR1L;// PORTA=ICR1L;//check output in pins 22-29(A7=29)
PORTB=ICR1H;// PORTC=ICR1H;//check output in pins 37-30(C0=30)
} }
} }

Binary file not shown.

View File

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

Binary file not shown.

View File

@ -2,7 +2,7 @@ Registers involved:
GPIO: GPIO:
DDRA: Data Direction Register for Port A= 0xFF for output 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 PORTD: Port D Data Register= set as 0xFF to activate pull up registers
Input Capture Unit(ICU): Input Capture Unit(ICU):

View File

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

View File

@ -6,14 +6,17 @@ int main(void)
{ {
DDRB = 0xFF;//Port B set as output 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; 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 //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 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 //output at OC2A=pin 10
while(1); while(1);

Binary file not shown.

View File

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

Binary file not shown.

View File

@ -31,4 +31,6 @@ The most important nonlinearity is caused by the necessary
blanking time between top and bottom switch to avoid inverter blanking time between top and bottom switch to avoid inverter
leg shoot-through of the DC bus circuit. The type of the switch leg shoot-through of the DC bus circuit. The type of the switch
and pre-driver characteristics determine amount of the 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

View File

@ -0,0 +1,31 @@
//sinusoidal PWM using ADC(16-bit PWM to be used)
#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
//DDRL = 0xff;//port L direction: output //pins- 49:42
//DDRC = 0xff;//port C direction: output //pins- 37:30
ADCSRA = 0x87;// ADC enabled and prescaler=128
ADMUX = 0x40;// Ref= Vcc// data is right-justified //ADC0 is source pin
while(1)
{
//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);
OCR1AL = ADCL;
OCR1AH = ADCH;
TCCR1A = 0x83;//non-inverting pwm; mode-7: 10-bit Fast PWM
TCCR1B = 0x10;//prescaler = 8 for frequency to be approx 2kHz
//output of pwm is at pin 13(OC0)
_delay_ms(50);
}
}

Binary file not shown.

View File

@ -0,0 +1,22 @@
:100000000C9472000C947E000C947E000C947E0084
:100010000C947E000C947E000C947E000C947E0068
:100020000C947E000C947E000C947E000C947E0058
:100030000C947E000C947E000C947E000C947E0048
:100040000C947E000C947E000C947E000C947E0038
:100050000C947E000C947E000C947E000C947E0028
:100060000C947E000C947E000C947E000C947E0018
:100070000C947E000C947E000C947E000C947E0008
:100080000C947E000C947E000C947E000C947E00F8
:100090000C947E000C947E000C947E000C947E00E8
:1000A0000C947E000C947E000C947E000C947E00D8
:1000B0000C947E000C947E000C947E000C947E00C8
:1000C0000C947E000C947E000C947E000C947E00B8
:1000D0000C947E000C947E000C947E000C947E00A8
:1000E0000C947E0011241FBECFEFD1E2DEBFCDBF46
:1000F00000E00CBF0E9480000C94A5000C9400004E
:100100008FEF84B987E880937A0080E480937C0045
:1001100023E890E180917A00806480937A00809156
:1001200078008093880080917900809389002093E3
:100130008000909381003FEF40E782E031504040E3
:0E0140008040E1F700C00000E5CFF894FFCF4B
:00000001FF

Binary file not shown.

View File

@ -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

View File

@ -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;
*/
}
}

Binary file not shown.

View File

@ -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

Binary file not shown.

View File

@ -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

View File

@ -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

View File

@ -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 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 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 inbuilt delay function used to induce a delay of 0.5 seconds before the duty cycle of the PWM changes

Binary file not shown.