Commit ac92074c authored by Petter Breedveld's avatar Petter Breedveld

Session 1 done

parents
/*
* Task1-LF.c
*
* Created: 29.01.2017 23:43:39
* Author : Petter
*/
/**
* F_CPU tells the timer what the CPU's clock frequency is, such that the timer will count correctly.
* Note that this DOES NOT set the clock speed, it just informs the timer.
* If this is set wrong, the chip will work as normal, but software delays will be too long (if set too low) or too short (if set too high).
* Example: set F_CPU to 2 MHz => "#define F_CPU 2000000UL". UL = unsigned long
* F_CPU must be defined before including headers.
*/
#define F_CPU 3333333UL //The ATtiny817 operates at 20MHz with a scaling factor of 6: 20/6 = 3.333333MHz
/**
* System headers bellow
*/
#include <avr/io.h>
#include <util/delay.h>
/**
* Define helpers for pin bit positions.
* The LED0 on the ATmega324PB main board is connected to pin 7 on port C (PINC7).
* Check the datasheet to find out which pins on which ports (PINxn) the different LEDs and buttons are connected to.
*/
#define LED0 4 // LED0 is connected to pin 4 on port B
int main(void){
/**
* We want to send signals to the LEDs, in order to turn the off and on.
* In the AVR world we have the following:
* PORTx_DIR: 1 is output, 0 is input
* LED: 1 LED is off, 0 LED is on, this is called active-low
* Button: 1 button is open, 0 button is pressed, this is called active-low
*
* Remember bit set logic:
* Set to 1: FLAG |= ( 1 << BIT_POS ) - using 'or' so we only change the one we want and leave the others untouched
* Set to 0: FLAG &= ~( 1 << BIT_POS ) - same thing here but using 'and', find paper and a logic-table, and try it out if you want to know how it works
*/
PORTB_DIR |= (1 << LED0); // Set LED0 as output - Using "B" in PORTx_DIR since the LED is connected to port B on the microcontroller
  • De "nye" tinyene har xmega-style defines (structs). Mens de individuelle registerene er tilgjengeliggjort med macro port_reg, vil "korrekt" måte å adressere 'PORTB_DIR' være 'PORTB.DIR'.

    Dette muliggjør også å gjøre f.eks: #define LED_PORT PORTB {...} LED_PORT.DIR |= {...}

Please register or sign in to reply
/*
* The usual way to run microcontrollers is using a simple infinite loop
*/
while (1)
{
PORTB_OUT ^= (1 << LED0); // Changes the state of LED0 by XOR-ing the last state. Check the XOR-table to find out how this works.
// Non-compressed: PORTB_OUT = PORTB_OUT ^ (1 << LED0);
_delay_ms(500);
}
}
/*
* Task2-LF.c
*
* Created: 29.01.2017 23:43:39
* Author : Petter
*/
#define F_CPU 3333333UL //3.33... MHz
/*
* System headers bellow
*/
#include <avr/io.h>
#include <util/delay.h>
/*
* Checkout the ATtiny817 datasheet to find the correct ports and pins
*/
// LED
#define LED0 4 //On port B
// Button
#define SW0 5 //On port B
int main(void)
{
/*
* We want to send signals to the LEDs, in order to turn it off and on.
* We also want to be able to read the switches.
* This is done by setting bits in the PORTx_DIR register (in this case PORTB_DIR)
* PORTx_DIR: 1 is output, 0 is input
* LED: 1 LED is off, 0 LED is on
* Button: 1 Button is open, 0 button is pressed
* Bit set logic:
* Set to 1: FLAG |= ( 1 << BIT_POS )
* Set to 0: FLAG &= ~( 1 << BIT_POS )
*/
/**
* In order to read from the switches, we need to give it a ground reference, via a pull-up resistor.
* If we don't, the switch will have a floating ground, and hence its value will be undefined.
* On the ATtiny817, we enable pull-up by setting the "PORT_PULLUPEN_bp" flag in "PORTx_PINnCTRL" high.
* See datasheet section 16 (I/O-ports) and user guide section 4 (Hardware User Guide).
*/
PORTB_DIR |= (1 << LED0); // Set LED0 as output
  • Ila. første kveld burde man kanskje gå over fra å bruke Read-modify-write på ioportregisterene til å bruke de innebygde SET/CLR/TGL-registrene som finnes på tiny817 for OUT og DIR. eks: PORTB.DIRSET = (1 << LED0);

    Edited by Snorre Nilssen Vestli
Please register or sign in to reply
PORTB_DIR &= ~(1 << SW0); //Set SW0 as input
PORTB_PIN5CTRL |= (1 << PORT_PULLUPEN_bp); //Enable pull-up on button SW0 (pin5)
while (1)
{
/*
* Here, you want to check if a button is depressed, and if yes, turn on the corresponding LED.
* If no, then do the opposite.
* Similar to setting pins with PORTx_OUT, we can read pins with PORTx_IN
* In order to check a pin value, mask out that particular bit. (use bitwise AND)
* Bit masking is done like this:
* (REGISTER & (1 << BIT_POS)), which selects bit BIT_POS from register.
* If that bit is 0, the result will be 0. If it is 1, the result will be other than 0 (depending on bit pos).
*/
if(!(PORTB_IN & (1 << SW0))){ // If button is pressed (0 - LOW
PORTB_OUT &= ~(1 << LED0); // Sets output to 0, turns LED0 on
}
else{
PORTB_OUT |= (1 << LED0); // Sets output to 1, turns LED off
}
}
}
/*
* Task3-LF.c
*
* Created: 29.01.2017 23:43:39
* Author : Petter
*/
#define F_CPU 3333333UL //3.33... MHz
#include <avr/io.h>
#include <util/delay.h>
#include <stdbool.h>
//LED
#define LED0 4 //on port B
//Button
#define SW0 5 //on port B
int main(void)
{
/*
* PORTx_DIR: set direction - 1 is output, 0 is input
* PORTx_OUT: set value of pins
* PORTx_IN: read value of pins
* LED: 1 LED is off, 0 LED is on
* SW: 1 Button is open, 0 button is pressed
* Set to 1: FLAG |= ( 1 << BIT_POS )
* Set to 0: FLAG &= ~( 1 << BIT_POS )
*/
PORTB_DIR |= (1 << LED0); // Set LED0 as output
PORTB_DIR &= ~(1 << SW0); // Set SW0 as input
PORTB_PIN5CTRL |= (1 << PORT_PULLUPEN_bp); // Enable pull-up on button SW
int buttonState = 0; // To hold the button pressed state
while (1)
{
if(!(PORTB_IN & (1 << SW0))){
if(buttonState == 0){
PORTB_OUT ^= (1 << LED0);
buttonState = 1;
}
}
else{
buttonState = 0;
}
_delay_ms(1); // For deboucing
}
}
################################################################################
# Automatically-generated file. Do not edit!
################################################################################
SHELL := cmd.exe
RM := rm -rf
USER_OBJS :=
LIBS :=
PROJ :=
O_SRCS :=
C_SRCS :=
S_SRCS :=
S_UPPER_SRCS :=
OBJ_SRCS :=
ASM_SRCS :=
PREPROCESSING_SRCS :=
OBJS :=
OBJS_AS_ARGS :=
C_DEPS :=
C_DEPS_AS_ARGS :=
EXECUTABLES :=
OUTPUT_FILE_PATH :=
OUTPUT_FILE_PATH_AS_ARGS :=
AVR_APP_PATH :=$$$AVR_APP_PATH$$$
QUOTE := "
ADDITIONAL_DEPENDENCIES:=
OUTPUT_FILE_DEP:=
LIB_DEP:=
LINKER_SCRIPT_DEP:=
# Every subdirectory with source files must be described here
SUBDIRS :=
# Add inputs and outputs from these tool invocations to the build variables
C_SRCS += \
../main.c
PREPROCESSING_SRCS +=
ASM_SRCS +=
OBJS += \
main.o
OBJS_AS_ARGS += \
main.o
C_DEPS += \
main.d
C_DEPS_AS_ARGS += \
main.d
OUTPUT_FILE_PATH +=Task1.elf
OUTPUT_FILE_PATH_AS_ARGS +=Task1.elf
ADDITIONAL_DEPENDENCIES:=
OUTPUT_FILE_DEP:= ./makedep.mk
LIB_DEP+=
LINKER_SCRIPT_DEP+=
# AVR32/GNU C Compiler
./%.o: .././%.c
@echo Building file: $<
@echo Invoking: AVR/GNU C Compiler : 4.9.2
$(QUOTE)D:\Atmel\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-gcc.exe$(QUOTE) -x c -funsigned-char -funsigned-bitfields -DDEBUG -I"D:\Atmel\7.0\Packs\atmel\ATtiny_DFP\1.1.102\include" -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -g2 -Wall -mmcu=attiny817 -B "D:\Atmel\7.0\Packs\atmel\ATtiny_DFP\1.1.102\gcc\dev\attiny817" -c -std=gnu99 -MD -MP -MF "$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -MT"$(@:%.o=%.o)" -o "$@" "$<"
@echo Finished building: $<
# AVR32/GNU Preprocessing Assembler
# AVR32/GNU Assembler
ifneq ($(MAKECMDGOALS),clean)
ifneq ($(strip $(C_DEPS)),)
-include $(C_DEPS)
endif
endif
# Add inputs and outputs from these tool invocations to the build variables
# All Target
all: $(OUTPUT_FILE_PATH) $(ADDITIONAL_DEPENDENCIES)
$(OUTPUT_FILE_PATH): $(OBJS) $(USER_OBJS) $(OUTPUT_FILE_DEP) $(LIB_DEP) $(LINKER_SCRIPT_DEP)
@echo Building target: $@
@echo Invoking: AVR/GNU Linker : 4.9.2
$(QUOTE)D:\Atmel\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-gcc.exe$(QUOTE) -o$(OUTPUT_FILE_PATH_AS_ARGS) $(OBJS_AS_ARGS) $(USER_OBJS) $(LIBS) -Wl,-Map="Task1.map" -Wl,--start-group -Wl,-lm -Wl,--end-group -Wl,--gc-sections -mmcu=attiny817 -B "D:\Atmel\7.0\Packs\atmel\ATtiny_DFP\1.1.102\gcc\dev\attiny817"
@echo Finished building target: $@
"D:\Atmel\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-objcopy.exe" -O ihex -R .eeprom -R .fuse -R .lock -R .signature -R .user_signatures "Task1.elf" "Task1.hex"
"D:\Atmel\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-objcopy.exe" -j .eeprom --set-section-flags=.eeprom=alloc,load --change-section-lma .eeprom=0 --no-change-warnings -O ihex "Task1.elf" "Task1.eep" || exit 0
"D:\Atmel\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-objdump.exe" -h -S "Task1.elf" > "Task1.lss"
"D:\Atmel\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-objcopy.exe" -O srec -R .eeprom -R .fuse -R .lock -R .signature -R .user_signatures "Task1.elf" "Task1.srec"
"D:\Atmel\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-size.exe" "Task1.elf"
# Other Targets
clean:
-$(RM) $(OBJS_AS_ARGS) $(EXECUTABLES)
-$(RM) $(C_DEPS_AS_ARGS)
rm -rf "Task1.elf" "Task1.a" "Task1.hex" "Task1.lss" "Task1.eep" "Task1.map" "Task1.srec" "Task1.usersignatures"
\ No newline at end of file
:1000000019C022C021C020C01FC01EC01DC01CC0FE
:100010001BC01AC019C018C017C016C015C014C024
:1000200013C012C011C010C00FC00EC00DC00CC054
:100030000BC00AC011241FBECFEFCDBFDFE3DEBF70
:100040000E9426000C9439000C940000E0E2F4E0D9
:10005000808180618083E4E2F4E090E180818927FF
:10006000808325E136E185E0215030408040E1F792
:06007000F5CFF894FFCF6C
:00000001FF
Task1.elf: file format elf32-avr
Sections:
Idx Name Size VMA LMA File off Algn
0 .data 00000000 00803e00 00803e00 000000ca 2**0
CONTENTS, ALLOC, LOAD, DATA
1 .text 00000076 00000000 00000000 00000054 2**1
CONTENTS, ALLOC, LOAD, READONLY, CODE
2 .comment 00000030 00000000 00000000 000000ca 2**0
CONTENTS, READONLY
3 .note.gnu.avr.deviceinfo 0000003c 00000000 00000000 000000fc 2**2
CONTENTS, READONLY
4 .debug_aranges 00000020 00000000 00000000 00000138 2**0
CONTENTS, READONLY, DEBUGGING
5 .debug_info 00001781 00000000 00000000 00000158 2**0
CONTENTS, READONLY, DEBUGGING
6 .debug_abbrev 000015fc 00000000 00000000 000018d9 2**0
CONTENTS, READONLY, DEBUGGING
7 .debug_line 00000223 00000000 00000000 00002ed5 2**0
CONTENTS, READONLY, DEBUGGING
8 .debug_frame 00000024 00000000 00000000 000030f8 2**2
CONTENTS, READONLY, DEBUGGING
9 .debug_str 00000af8 00000000 00000000 0000311c 2**0
CONTENTS, READONLY, DEBUGGING
10 .debug_ranges 00000010 00000000 00000000 00003c14 2**0
CONTENTS, READONLY, DEBUGGING
Disassembly of section .text:
00000000 <__vectors>:
0: 19 c0 rjmp .+50 ; 0x34 <__ctors_end>
2: 22 c0 rjmp .+68 ; 0x48 <__bad_interrupt>
4: 21 c0 rjmp .+66 ; 0x48 <__bad_interrupt>
6: 20 c0 rjmp .+64 ; 0x48 <__bad_interrupt>
8: 1f c0 rjmp .+62 ; 0x48 <__bad_interrupt>
a: 1e c0 rjmp .+60 ; 0x48 <__bad_interrupt>
c: 1d c0 rjmp .+58 ; 0x48 <__bad_interrupt>
e: 1c c0 rjmp .+56 ; 0x48 <__bad_interrupt>
10: 1b c0 rjmp .+54 ; 0x48 <__bad_interrupt>
12: 1a c0 rjmp .+52 ; 0x48 <__bad_interrupt>
14: 19 c0 rjmp .+50 ; 0x48 <__bad_interrupt>
16: 18 c0 rjmp .+48 ; 0x48 <__bad_interrupt>
18: 17 c0 rjmp .+46 ; 0x48 <__bad_interrupt>
1a: 16 c0 rjmp .+44 ; 0x48 <__bad_interrupt>
1c: 15 c0 rjmp .+42 ; 0x48 <__bad_interrupt>
1e: 14 c0 rjmp .+40 ; 0x48 <__bad_interrupt>
20: 13 c0 rjmp .+38 ; 0x48 <__bad_interrupt>
22: 12 c0 rjmp .+36 ; 0x48 <__bad_interrupt>
24: 11 c0 rjmp .+34 ; 0x48 <__bad_interrupt>
26: 10 c0 rjmp .+32 ; 0x48 <__bad_interrupt>
28: 0f c0 rjmp .+30 ; 0x48 <__bad_interrupt>
2a: 0e c0 rjmp .+28 ; 0x48 <__bad_interrupt>
2c: 0d c0 rjmp .+26 ; 0x48 <__bad_interrupt>
2e: 0c c0 rjmp .+24 ; 0x48 <__bad_interrupt>
30: 0b c0 rjmp .+22 ; 0x48 <__bad_interrupt>
32: 0a c0 rjmp .+20 ; 0x48 <__bad_interrupt>
00000034 <__ctors_end>:
34: 11 24 eor r1, r1
36: 1f be out 0x3f, r1 ; 63
38: cf ef ldi r28, 0xFF ; 255
3a: cd bf out 0x3d, r28 ; 61
3c: df e3 ldi r29, 0x3F ; 63
3e: de bf out 0x3e, r29 ; 62
40: 0e 94 26 00 call 0x4c ; 0x4c <main>
44: 0c 94 39 00 jmp 0x72 ; 0x72 <_exit>
00000048 <__bad_interrupt>:
48: 0c 94 00 00 jmp 0 ; 0x0 <__vectors>
0000004c <main>:
* Remember bit set logic:
* Set to 1: FLAG |= ( 1 << BIT_POS ) - using 'or' so we only change the one we want and leave the others untouched
* Set to 0: FLAG &= ~( 1 << BIT_POS ) - same thing here but using 'and', find paper and a logic-table, and try it out if you want to know how it works
*/
PORTB_DIR |= (1 << LED0); // Set LED0 as output - Using "B" in PORTx_DIR since the LED is connected to port B on the microcontroller
4c: e0 e2 ldi r30, 0x20 ; 32
4e: f4 e0 ldi r31, 0x04 ; 4
50: 80 81 ld r24, Z
52: 80 61 ori r24, 0x10 ; 16
54: 80 83 st Z, r24
* The usual way to run microcontrollers is using a simple infinite loop
*/
while (1)
{
PORTB_OUT ^= (1 << LED0); // Changes the state of LED0 by XOR-ing the last state. Check the XOR-table to find out how this works.
56: e4 e2 ldi r30, 0x24 ; 36
58: f4 e0 ldi r31, 0x04 ; 4
5a: 90 e1 ldi r25, 0x10 ; 16
5c: 80 81 ld r24, Z
5e: 89 27 eor r24, r25
60: 80 83 st Z, r24
#else
//round up by default
__ticks_dc = (uint32_t)(ceil(fabs(__tmp)));
#endif
__builtin_avr_delay_cycles(__ticks_dc);
62: 25 e1 ldi r18, 0x15 ; 21
64: 36 e1 ldi r19, 0x16 ; 22
66: 85 e0 ldi r24, 0x05 ; 5
68: 21 50 subi r18, 0x01 ; 1
6a: 30 40 sbci r19, 0x00 ; 0
6c: 80 40 sbci r24, 0x00 ; 0
6e: e1 f7 brne .-8 ; 0x68 <main+0x1c>
70: f5 cf rjmp .-22 ; 0x5c <main+0x10>
00000072 <_exit>:
72: f8 94 cli
00000074 <__stop_program>:
74: ff cf rjmp .-2 ; 0x74 <__stop_program>
This diff is collapsed.
S00D00005461736B312E7372656353
S113000019C022C021C020C01FC01EC01DC01CC0FA
S11300101BC01AC019C018C017C016C015C014C020
S113002013C012C011C010C00FC00EC00DC00CC050
S11300300BC00AC011241FBECFEFCDBFDFE3DEBF6C
S11300400E9426000C9439000C940000E0E2F4E0D5
S1130050808180618083E4E2F4E090E180818927FB
S1130060808325E136E185E0215030408040E1F78E
S1090070F5CFF894FFCF68
S9030000FC
main.d main.o: .././main.c \
d:\atmel\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\io.h \
d:\atmel\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h \
d:\atmel\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\inttypes.h \
d:\atmel\7.0\toolchain\avr8\avr8-gnu-toolchain\lib\gcc\avr\4.9.2\include\stdint.h \
d:\atmel\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\stdint.h \
D:\Atmel\7.0\Packs\atmel\ATtiny_DFP\1.1.102\include/avr/iotn817.h \
d:\atmel\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\portpins.h \
d:\atmel\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\common.h \
d:\atmel\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\version.h \
d:\atmel\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\xmega.h \
d:\atmel\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\fuse.h \
d:\atmel\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\lock.h \
d:\atmel\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\util\delay.h \
d:\atmel\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\util\delay_basic.h \
d:\atmel\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\math.h
d:\atmel\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\io.h:
d:\atmel\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h:
d:\atmel\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\inttypes.h:
d:\atmel\7.0\toolchain\avr8\avr8-gnu-toolchain\lib\gcc\avr\4.9.2\include\stdint.h:
d:\atmel\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\stdint.h:
D:\Atmel\7.0\Packs\atmel\ATtiny_DFP\1.1.102\include/avr/iotn817.h:
d:\atmel\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\portpins.h:
d:\atmel\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\common.h:
d:\atmel\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\version.h:
d:\atmel\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\xmega.h:
d:\atmel\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\fuse.h:
d:\atmel\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\lock.h:
d:\atmel\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\util\delay.h:
d:\atmel\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\util\delay_basic.h:
d:\atmel\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\math.h:
################################################################################
# Automatically-generated file. Do not edit or delete the file
################################################################################
main.c

Microsoft Visual Studio Solution File, Format Version 12.00
# Atmel Studio Solution File, Format Version 11.00
VisualStudioVersion = 14.0.23107.0
MinimumVisualStudioVersion = 10.0.40219.1
Project("{54F91283-7BC4-4236-8FF9-10F437C3AD48}") = "Task1", "Task1.cproj", "{DCE6C7E3-EE26-4D79-826B-08594B9AD897}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|AVR = Debug|AVR
Release|AVR = Release|AVR
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{DCE6C7E3-EE26-4D79-826B-08594B9AD897}.Debug|AVR.ActiveCfg = Debug|AVR
{DCE6C7E3-EE26-4D79-826B-08594B9AD897}.Debug|AVR.Build.0 = Debug|AVR
{DCE6C7E3-EE26-4D79-826B-08594B9AD897}.Release|AVR.ActiveCfg = Release|AVR
{DCE6C7E3-EE26-4D79-826B-08594B9AD897}.Release|AVR.Build.0 = Release|AVR
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal
<?xml version="1.0" encoding="utf-8"?>
<Store xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="AtmelPackComponentManagement">
<ProjectComponents>
<ProjectComponent z:Id="i1" xmlns:z="http://schemas.microsoft.com/2003/10/Serialization/">
<CApiVersion></CApiVersion>
<CBundle></CBundle>
<CClass>Device</CClass>
<CGroup>Startup</CGroup>
<CSub></CSub>
<CVariant></CVariant>
<CVendor>Atmel</CVendor>
<CVersion>1.1.0</CVersion>
<DefaultRepoPath>D:/Atmel\7.0\Packs</DefaultRepoPath>
<DependentComponents xmlns:d4p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays" />
<Description></Description>
<Files xmlns:d4p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
<d4p1:anyType i:type="FileInfo">
<AbsolutePath>D:/Atmel\7.0\Packs\atmel\ATtiny_DFP\1.1.102\include</AbsolutePath>
<Attribute></Attribute>
<Category>include</Category>
<Condition>C</Condition>
<FileContentHash i:nil="true" />
<FileVersion></FileVersion>
<Name>include</Name>
<SelectString></SelectString>
<SourcePath></SourcePath>
</d4p1:anyType>
<d4p1:anyType i:type="FileInfo">
<AbsolutePath>D:/Atmel\7.0\Packs\atmel\ATtiny_DFP\1.1.102\include\avr\iotn817.h</AbsolutePath>
<Attribute></Attribute>
<Category>header</Category>
<Condition>C</Condition>
<FileContentHash>GzsE/dwQAz37AkZENa/sHg==</FileContentHash>
<FileVersion></FileVersion>
<Name>include/avr/iotn817.h</Name>
<SelectString></SelectString>
<SourcePath></SourcePath>
</d4p1:anyType>
<d4p1:anyType i:type="FileInfo">
<AbsolutePath>D:/Atmel\7.0\Packs\atmel\ATtiny_DFP\1.1.102\templates\main.c</AbsolutePath>
<Attribute>template</Attribute>
<Category>source</Category>
<Condition>C Exe</Condition>
<FileContentHash>NtrFFJHqGYFgQ+e154IDwQ==</FileContentHash>
<FileVersion></FileVersion>
<Name>templates/main.c</Name>
<SelectString>Main file (.c)</SelectString>
<SourcePath></SourcePath>
</d4p1:anyType>
<d4p1:anyType i:type="FileInfo">
<AbsolutePath>D:/Atmel\7.0\Packs\atmel\ATtiny_DFP\1.1.102\templates\main.cpp</AbsolutePath>
<Attribute>template</Attribute>
<Category>source</Category>
<Condition>C Exe</Condition>
<FileContentHash>YXFphlh0CtZJU+ebktABgQ==</FileContentHash>
<FileVersion></FileVersion>
<Name>templates/main.cpp</Name>
<SelectString>Main file (.cpp)</SelectString>
<SourcePath></SourcePath>
</d4p1:anyType>
<d4p1:anyType i:type="FileInfo">
<AbsolutePath>D:/Atmel\7.0\Packs\atmel\ATtiny_DFP\1.1.102\gcc\dev\attiny817</AbsolutePath>
<Attribute></Attribute>
<Category>libraryPrefix</Category>
<Condition>GCC</Condition>
<FileContentHash i:nil="true" />
<FileVersion></FileVersion>
<Name>gcc/dev/attiny817</Name>
<SelectString></SelectString>
<SourcePath></SourcePath>
</d4p1:anyType>
</Files>
<PackName>ATtiny_DFP</PackName>
<PackPath>D:/Atmel/7.0/Packs/atmel/ATtiny_DFP/1.1.102/Atmel.ATtiny_DFP.pdsc</PackPath>
<PackVersion>1.1.102</PackVersion>
<PresentInProject>true</PresentInProject>
<ReferenceConditionId>ATtiny817</ReferenceConditionId>
<RteComponents xmlns:d4p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
<d4p1:string></d4p1:string>
</RteComponents>
<Status>Resolved</Status>
<VersionMode>Fixed</VersionMode>
<IsComponentInAtProject>true</IsComponentInAtProject>
</ProjectComponent>
</ProjectComponents>
</Store>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="14.0">
<PropertyGroup>
<SchemaVersion>2.0</SchemaVersion>
<ProjectVersion>7.0</ProjectVersion>
<ToolchainName>com.Atmel.AVRGCC8.C</ToolchainName>
<ProjectGuid>dce6c7e3-ee26-4d79-826b-08594b9ad897</ProjectGuid>
<avrdevice>ATtiny817</avrdevice>
<avrdeviceseries>none</avrdeviceseries>
<OutputType>Executable</OutputType>
<Language>C</Language>
<OutputFileName>$(MSBuildProjectName)</OutputFileName>
<OutputFileExtension>.elf</OutputFileExtension>
<OutputDirectory>$(MSBuildProjectDirectory)\$(Configuration)</OutputDirectory>
<AssemblyName>Task1</AssemblyName>
<Name>Task1</Name>
<RootNamespace>Task1</RootNamespace>
<ToolchainFlavour>Native</ToolchainFlavour>
<KeepTimersRunning>true</KeepTimersRunning>
<OverrideVtor>false</OverrideVtor>
<CacheFlash>true</CacheFlash>
<ProgFlashFromRam>true</ProgFlashFromRam>
<RamSnippetAddress />
<UncachedRange />
<preserveEEPROM>true</preserveEEPROM>
<OverrideVtorValue />
<BootSegment>2</BootSegment>
<eraseonlaunchrule>0</eraseonlaunchrule>
<AsfFrameworkConfig>
<framework-data xmlns="">
<options />
<configurations />
<files />
<documentation help="" />
<offline-documentation help="" />
<dependencies>
<content-extension eid="atmel.asf" uuidref="Atmel.ASF" version="3.32.0" />
</dependencies>
</framework-data>
</AsfFrameworkConfig>