6 Commits

Author SHA1 Message Date
ddf9d263b1 Legacy branch migration 2024-03-12 21:23:47 +02:00
02cb3a9c70 Repo unification 2024-03-12 21:22:26 +02:00
7aa7edba33 Migration refresh 2023-12-11 12:59:44 +02:00
8f8a80f05f Migration part 1 2023-12-11 12:59:26 +02:00
299429cb92 Started test board 2023-12-11 01:22:03 +02:00
98b5333126 PCB Revision 9 2023-12-11 01:18:55 +02:00
66 changed files with 2819 additions and 31 deletions

21
.gitignore vendored
View File

@@ -1,3 +1,23 @@
# Ignore list for Atmel studio files
# Hidden folder
.vs/
#Build Directories
Debug/
Release/
#Build Results
*.o
*.d
*.eep
*.elf
*.hex
*.map
*.srec
#User Specific Files
*.atsuo
# Ignore list for Altium temp files # Ignore list for Altium temp files
History/ History/
__Previews/ __Previews/
@@ -9,3 +29,4 @@ Project Logs for*
# Ignore list for Generated output files # Ignore list for Generated output files
*.step *.step
OUTPUTS/ OUTPUTS/

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
docs/MCU_Pinout.pdf Normal file

Binary file not shown.

BIN
docs/MCU_Pinout.xlsx Normal file

Binary file not shown.

Binary file not shown.

120
firmware/devices/analog.c Normal file
View File

@@ -0,0 +1,120 @@
/**** Includes ****/
#include "hal/udccd_hal.h"
#include "analog.h"
/**** Private variables ****/
static const uint8_t ICOIL_MUL = 215;
static const uint8_t ICOIL_DIV = 22;
static const int16_t ICOIL_OFF = 0;
static const uint8_t ICOIL_CNT = 1;
static const uint8_t UCOIL_MUL = 20;
static const uint8_t UCOIL_DIV = 1;
static const int16_t UCOIL_OFF = 0;
static const uint8_t UCOIL_CNT = 1;
static const uint8_t UBAT_MUL = 20;
static const uint8_t UBAT_DIV = 1;
static const int16_t UBAT_OFF = 0;
static const uint8_t UBAT_CNT = 1;
static const uint8_t IBAT_MUL = 235;
static const uint8_t IBAT_DIV = 6;
static const int16_t IBAT_OFF = 0;
static const uint8_t IBAT_CNT = 1;
static const uint8_t POT_MUL = 215;
static const uint8_t POT_DIV = 44;
static const int16_t POT_OFF = 0;
static const uint8_t POT_CNT = 1;
static const uint8_t MODE_MUL = 215;
static const uint8_t MODE_DIV = 44;
static const int16_t MODE_OFF = 0;
static const uint8_t MODE_CNT = 1;
/**** Private function declarations ****/
static uint16_t ConvertSIntShort(int32_t in);
static uint16_t ConvertUintShort(uint32_t in);
static uint16_t read_ch(adcCh_t ch, uint16_t gnd_raw, uint8_t mul, uint8_t div, int16_t offset, uint8_t samples);
/**** Public function definitions ****/
void Analog_UpdateAll(analog_t* meas)
{
uint16_t gnd_lvl = HAL_ADC_Read(ADC_GND);
meas->hb_currnet = read_ch(ADC_ICOIL, 0, ICOIL_MUL, ICOIL_DIV, ICOIL_OFF, ICOIL_CNT ); //mA
meas->hb_voltage = read_ch(ADC_UCOIL, 0, UCOIL_MUL, UCOIL_DIV, UCOIL_OFF, UCOIL_CNT ); //mV
meas->supply_current = read_ch(ADC_IBAT , 0, IBAT_MUL , IBAT_DIV , IBAT_OFF , IBAT_CNT ); //mA
meas->supply_voltage = read_ch(ADC_UBAT , 0, UBAT_MUL , UBAT_DIV , UBAT_OFF , UBAT_CNT ); //mV
meas->pot_voltage = read_ch(ADC_POT , 0, POT_MUL , POT_DIV , POT_OFF , POT_CNT ); //mV
meas->mode_voltage = read_ch(ADC_MODE , 0, MODE_MUL , MODE_DIV , MODE_OFF , MODE_CNT ); //mV
// Calculate derived measurements
// Halfbridge output power
uint32_t temp = (uint32_t)meas->hb_currnet * (uint32_t)meas->hb_voltage;
temp /= 1000;
meas->hb_power = ConvertUintShort(temp);
// Halfbridge output resistance
if(meas->hb_currnet == 0) meas->hb_resistance = 0xFFFF;
else if(meas->hb_voltage == 0) meas->hb_resistance = 0;
else
{
temp = (uint32_t)meas->hb_voltage * 1000;
temp /= (uint32_t)meas->hb_currnet;
meas->hb_resistance = ConvertUintShort(temp);
}
// Supply power
temp = (uint32_t)meas->supply_current * (uint32_t)meas->supply_voltage;
temp /= 1000;
meas->supply_power = ConvertUintShort(temp);
}
static uint16_t read_ch(adcCh_t ch, uint16_t gnd_raw, uint8_t mul, uint8_t div, int16_t offset, uint8_t samples)
{
//Sanity check
if(div==0) return 0xFFFF;
// Do at least one sample
if(samples<1) samples = 1;
// Read ADC value
int32_t raw = 0;
for(uint8_t i=0; i<samples; i++)
{
raw += (int32_t)HAL_ADC_Read(ch);
}
// Do average
if(samples != 1)
{
raw /= samples;
};
// Remove GND level
if(gnd_raw) raw = raw - (int32_t)gnd_raw;
// Convert to target units
raw = raw * mul;
if(div!=1) raw /= div;
raw += offset;
return ConvertSIntShort(raw);
}
static uint16_t ConvertSIntShort(int32_t in)
{
if(in <= 0) return 0;
else if(in >= 0x0000FFFF) return 0xFFFF;
else return (uint16_t)in;
}
static uint16_t ConvertUintShort(uint32_t in)
{
if(in == 0) return 0;
else if(in >= 0x0000FFFF) return 0xFFFF;
else return (uint16_t)in;
}

23
firmware/devices/analog.h Normal file
View File

@@ -0,0 +1,23 @@
#ifndef ANALOG_H_
#define ANALOG_H_
/**** Includes ****/
#include <stdint.h>
/**** Public definitions ****/
typedef struct {
uint16_t hb_currnet;
uint16_t hb_voltage;
uint16_t hb_power;
uint16_t hb_resistance;
uint16_t supply_current;
uint16_t supply_voltage;
uint16_t supply_power;
uint16_t pot_voltage;
uint16_t mode_voltage;
} analog_t;
/**** Public function declarations ****/
void Analog_UpdateAll(analog_t* meas);
#endif /* ANALOG_H_ */

View File

@@ -0,0 +1,11 @@
#ifndef LEVEL_T_H_
#define LEVEL_T_H_
/**** Public definitions ****/
typedef enum {
HIZ = -1,
LOW = 0,
HIGH = 1
} level_t;
#endif /* LEVEL_T_H_ */

24
firmware/devices/config.c Normal file
View File

@@ -0,0 +1,24 @@
/**** Includes ****/
#include "hal/udccd_hal.h"
#include "config.h"
/**** Public function definitions ****/
void Init_HW(void)
{
hwConfig_t hwCfg;
hwCfg.adc_clk_prescaler = ADC_DIV2;
hwCfg.adc_auto_wake = 1;
// 64kHz PWM
hwCfg.pwm_timer_prescaler = TIM_DIV1;
hwCfg.pwm_timer_top = 0x01FF;
// 1.9Hz..62.5kHz Speed input
hwCfg.freq_timer_prescaler = TIM_DIV64;
// 1kHz systick
hwCfg.systick_timer_top = 125;
hwCfg.systick_timer_prescaler = TIM_DIV64;
// No extra features
hwCfg.uart_prescaler = 0;
hwCfg.disable_unused = 0;
hwCfg.en_watchdog = 0;
HAL_Init_Min(&hwCfg);
}

10
firmware/devices/config.h Normal file
View File

@@ -0,0 +1,10 @@
#ifndef CONFIG_H_
#define CONFIG_H_
/**** Includes ****/
#include <stdint.h>
/**** Public function declarations ****/
void Init_HW(void);
#endif /* CONFIG_H_ */

View File

@@ -0,0 +1,21 @@
/**** Includes ****/
#include "filter_iir_lpf.h"
/**** Private variables ****/
/**** Public function definitions ****/
uint16_t LPF_Update(uint16_t new, uint16_t last, uint8_t strength)
{
if(strength==0) return new;
else if(strength==255) return last;
else
{
uint32_t temp = (uint32_t)last * strength;
temp += new * (255-strength);
temp /= 255;
//Limit to 16bits
if(temp > 0x0000FFFF) return 0xFFFF;
else return (uint16_t) temp;
}
}

View File

@@ -0,0 +1,10 @@
#ifndef FILTER_IIR_LPF_H_
#define FILTER_IIR_LPF_H_
/**** Includes ****/
#include <stdint.h>
/**** Public function declarations ****/
uint16_t LPF_Update(uint16_t new, uint16_t last, uint8_t strength);
#endif /* FILTER_IIR_LPF_H_ */

View File

@@ -0,0 +1,102 @@
#ifndef UDCCD_R8_BSP_H_
#define UDCCD_R8_BSP_H_
/**** Includes ****/
#include <stdint.h>
#include "../common/level.h"
/**** Public definitions ****/
//ADC definitions
typedef enum {
ADC_ICOIL = 0x00,
ADC_UCOIL = 0x01,
ADC_UBAT = 0x02,
ADC_IBAT = 0x03,
ADC_POT = 0x04,
ADC_MODE = 0x05,
ADC_TEMP = 0x08,
ADC_INTREF = 0x0E,
ADC_GND = 0x0F
} adcCh_t;
typedef enum {
ADC_DIV2 = 0x01,
ADC_DIV4 = 0x02,
ADC_DIV8 = 0x03,
ADC_DIV16 = 0x04,
ADC_DIV32 = 0x05,
ADC_DIV64 = 0x06,
ADC_DIV128 = 0x07
} adcDiv_t;
//Timer definitions
typedef enum {
TIM_DIV1 = 0x01,
TIM_DIV8 = 0x02,
TIM_DIV64 = 0x03,
TIM_DIV256 = 0x04,
TIM_DIV1024 = 0x05
} timerDiv_t;
typedef enum {
PWM_COIL = 'A',
PWM_LED = 'B'
} pwmCh_t;
typedef enum {
SPEED_1 = 3,
SPEED_0 = 4
} speedCh_t;
typedef struct {
adcDiv_t adc_clk_prescaler;
uint8_t adc_auto_wake;
timerDiv_t pwm_timer_prescaler;
uint16_t pwm_timer_top;
timerDiv_t freq_timer_prescaler;
uint16_t uart_prescaler;
uint8_t systick_timer_top;
timerDiv_t systick_timer_prescaler;
uint8_t disable_unused;
uint8_t en_watchdog;
} hwConfig_t;
/**** Public function declarations ****/
void HAL_Init_Min(hwConfig_t* hwCfg);
void HAL_Init_Extra(hwConfig_t* hwCfg);
level_t HAL_ReadLvl_Handbrake(void);
level_t HAL_ReadLvl_Brake(void);
level_t HAL_ReadLvl_Dimm(void);
level_t HAL_ReadLvl_BtnUp(void);
level_t HAL_ReadLvl_BtnDown(void);
level_t HAL_ReadLvl_BtnMode(void);
level_t HAL_ReadLvl_HandbrakePull(void);
level_t HAL_ReadLvl_CoilLow(void);
level_t HAL_ReadLvl_CoilHigh(void);
level_t HAL_ReadLvl_LedsPwm(void);
level_t HAL_ReadLvl_Speed0(void);
level_t HAL_ReadLvl_Speed1(void);
level_t HAL_ReadLvl_SpeedPull(void);
void HAL_SetPull_Handbrake(level_t lvl);
void HAL_SetPull_Speed(level_t lvl);
void HAL_ADC_Wake(void);
void HAL_ADC_Sleep(void);
uint16_t HAL_ADC_Read(adcCh_t ch);
void HAL_Coil_SetLowSide(uint8_t on);
void HAL_Coil_SetPWM(uint8_t percent);
void HAL_Coil_SetPWM16b(uint16_t value);
void HAL_LEDS_Set(uint8_t image);
uint8_t HAL_LEDS_Get(void);
void HAL_LEDS_SetPWM(uint8_t percent);
void HAL_PWM_Wake(void);
void HAL_PWM_Sleep(void);
void HAL_PWM_SetDuty16b(pwmCh_t ch, uint16_t value);
void HAL_PWM_SetDuty100(pwmCh_t ch, uint8_t percent);
#endif /* UDCCD_R8_BSP_H_ */

View File

@@ -0,0 +1,463 @@
/**** Includes ****/
#include <avr/io.h>
#include "udccd_hal.h"
/**** Private variables ****/
static uint8_t tim0_prescaler = 0x00;
static uint8_t tim1_prescaler = 0x00;
static uint8_t tim3_prescaler = 0x00;
static uint8_t tim4_prescaler = 0x00;
/**** Private function declarations ****/
static void PWM_SetOCx(pwmCh_t ch, uint16_t value);
/**** Public function definitions ****/
void HAL_Init_Min(hwConfig_t* hwCfg)
{
// PIN Configuration
//DCCD Enable and PWM
PORTB &= ~0x03; //Set low
DDRB |= 0x03; //Set as outputs
//LED PWM
PORTB &= ~0x04; //Set low
DDRB |= 0x04; //Set as output
//UART TX
PORTB |= 0x18; //Set high / pull-up on
DDRB |= 0x08; //Set as output
DDRB &= ~0x10; //Set as input
//Handbrake pull-up
PORTB |= 0x20; //Set high
DDRB |= 0x20; //Set as output
//Handbrake and Brake inputs
PORTB |= 0xC0; //Pull-up on
DDRB &= ~0xC0; //Set as input
// ADC inputs
PORTC &= ~0x3F; //Pull-up off
DDRC &= ~0x3F; //Set as inputs
// Reset
PORTC |= 0x40; //Pull-up on
DDRC &= ~0x40; //Set as input
// LED control
PORTD &= ~0x3F; //Set low
DDRD |= 0x3F; //Set as outputs
// Speed pull
PORTD &= ~0x40; //Set low
DDRD |= 0x40; //Set as outputs
// Dim input
PORTD |= 0x80; //Set pull-up on
DDRD &= ~0x80; //Set as input
// Speed inputs
PORTE &= ~0x05; //Set pull-down
DDRE |= 0x05; //Set as output
// Up/Down inputs
PORTE |= 0x0A; //Set pull-up on
DDRE &= ~0x0A; //Set as input
//ADC configuration
PRR0 &= ~0x01; //Enable ADC power
DIDR0 |= 0x1F; //Disable digital inputs, ADC0-ADC4
ADMUX = 0x40; //Set AVCC reference, Right adjust
ADCSRA = 0x00; //ADC Disabled, Single conversion, no IT
ADCSRA |= (uint8_t)hwCfg->adc_clk_prescaler;
ADCSRB = 0x00; //no trigger input
if(hwCfg->adc_auto_wake) ADCSRA |= 0x80; //Enable ADC
else PRR0 |= 0x01;
//DCCD and LED PWM configuration
PRR0 &= ~0x80; //Enable Timer1 power
TCCR1A = 0xF2; //Connect OC1A and OC1B, normal logic
TCCR1B = 0x18; //PWM, Phase & Frequency Correct ICR1 top, no clock, WGM:0xE
TCCR1C = 0x00;
TCNT1 = 0x0000;
OCR1A = 0x0000;
OCR1B = 0x0000;
ICR1 = (hwCfg->pwm_timer_top);
TIMSK1 = 0x00; //No interrupts
TIFR1 = 0x00; //Clear all flags
tim1_prescaler = (uint8_t)hwCfg->pwm_timer_prescaler;
TCCR1B |= tim1_prescaler; //Enable timer
}
void HAL_Init_Extra(hwConfig_t* hwCfg)
{
//Speed 1 input timer configuration
PRR1 &= ~0x01; //Enable Timer3 power
TCCR3A = 0x00; //OCx disconnected, WGM:0x0
TCCR3B = 0x80; //ICP Noise filter, Falling edge, no clock
TCCR3C = 0x00;
TCNT3 = 0x0000;
OCR3A = 0x0000;
OCR3B = 0x0000;
ICR3 = 0x0000;
TIMSK3 = 0x00;
//TIMSK3 |= 0x21; //ICP and OVF interrupts
TIFR3 = 0x00; //Clear all flags
tim3_prescaler = (uint8_t)hwCfg->freq_timer_prescaler;
TCCR3B |= tim3_prescaler; //Enable timer
//Speed 0 input timer configuration
PRR1 &= ~0x08; //Enable Timer4 power
TCCR4A = 0x00; //OCx disconnected, WGM:0x0
TCCR4B = 0x80; //ICP Noise filter, Falling edge, no clock
TCCR4C = 0x00;
TCNT4 = 0x0000;
OCR4A = 0x0000;
OCR4B = 0x0000;
ICR4 = 0x0000;
TIMSK4 = 0x00;
//TIMSK4 |= 0x21; //ICP and OVF interrupts
TIFR4 = 0x00; //Clear all flags
tim4_prescaler = (uint8_t)hwCfg->freq_timer_prescaler;
TCCR4B |= tim4_prescaler; //Enable timer
//UART1 configuration
PRR0 &= 0x10; //Enable UART1 power
UCSR1A = 0x00; //Clear flags, Single UART speed, Single processor mode
UCSR1B = 0x18; //Enable RX/TX hardware, 8bit char
//UCSR1B |= 0xC0; //Enable RX/TX interrupt,
UCSR1C = 0x06; ; //async, No parity, 1 stop bit, 8bit char,
UBRR1 = hwCfg->uart_prescaler; //UART baud rate select
//"Systick" timer configuration
PRR0 &= ~0x20; //Enable Timer0 power
TCCR0A = 0x02 ;//OC0x not connected, WGM 0x01-CTC OC0A TOP
TCCR0B = 0x00; //WGM 0x01-CTC, No clock
TIMSK0 = 0x00;
//TIMSK0 |= 0x01; //OVF interrupt enabled
TCNT0 = 0x00;
OCR0A = hwCfg->systick_timer_top;
OCR0B= 0x00;
TIFR0 = 0x00; //Reset all flags
tim0_prescaler = (uint8_t)hwCfg->systick_timer_prescaler;
TCCR0B |= tim0_prescaler;
//Disabled not used power configuration
if(hwCfg->disable_unused)
{
//Disable power to not used peripherals
PRR0 |= 0xC6; //Disable TWI0, TIM2, SPI0, UART0
PRR1 |= 0x34; //Disable TWI1, PRTC, SPI1
}
//Watchdog configuration
if(hwCfg->en_watchdog)
{
//watchdog timer setup
WDTCSR |= 0x10; //Change enable
WDTCSR |= 0x0D; //System reset mode, 0.5s period.
//use special instruction to reset watchdog timer
};
}
// Handbrake input
level_t HAL_ReadLvl_Handbrake(void)
{
if(PINB & 0x40) return HIGH;
else return LOW;
}
// Brakes input
level_t HAL_ReadLvl_Brake(void)
{
if(PINB & 0x80) return HIGH;
else return LOW;
}
// Dimm input
level_t HAL_ReadLvl_Dimm(void)
{
if(PIND & 0x80) return HIGH;
else return LOW;
}
// UP button
level_t HAL_ReadLvl_BtnUp(void)
{
if(PINE & 0x08) return HIGH;
else return LOW;
}
// Down button
level_t HAL_ReadLvl_BtnDown(void)
{
if(PINE & 0x02) return HIGH;
else return LOW;
}
// Mode button
level_t HAL_ReadLvl_BtnMode(void)
{
if(PINC & 0x20) return HIGH;
else return LOW;
}
// Handbrake pull
level_t HAL_ReadLvl_HandbrakePull(void)
{
if(PINB & 0x20) return HIGH;
else return LOW;
}
// Coil driver control low
level_t HAL_ReadLvl_CoilLow(void)
{
if(PINB & 0x01) return HIGH;
else return LOW;
}
// Coil driver control high
level_t HAL_ReadLvl_CoilHigh(void)
{
if(PINB & 0x02) return HIGH;
else return LOW;
}
// LED PWM control
level_t HAL_ReadLvl_LedsPwm(void)
{
if(PINB & 0x04) return HIGH;
else return LOW;
}
// Speed 0 input pin
level_t HAL_ReadLvl_Speed0(void)
{
if(PINE & 0x04) return HIGH;
else return LOW;
}
// Speed 1 input pin
level_t HAL_ReadLvl_Speed1(void)
{
if(PINE & 0x01) return HIGH;
else return LOW;
}
// Speed common pull pin
level_t HAL_ReadLvl_SpeedPull(void)
{
if(PIND & 0x40) return HIGH;
else return LOW;
}
// Set handbrake pull-up
void HAL_SetPull_Handbrake(level_t lvl)
{
switch(lvl)
{
case HIGH:
PORTB |= 0x20; //Set high
DDRB |= 0x20; //Set as output
break;
case LOW:
PORTB &= ~0x20; //Set low
DDRB |= 0x20; //Set as output
default:
DDRB &= ~0x20; //Set as input
PORTB |= 0x20; //Set high
break;
}
}
// Set speed inputs common pull
void HAL_SetPull_Speed(level_t lvl)
{
switch(lvl)
{
case HIGH:
PORTD |= 0x40; //Set high
break;
default:
PORTD &= ~0x40; //Set low
break;
}
}
// ADC Wake
void HAL_ADC_Wake(void)
{
//Enable ADC power
PRR0 &= ~0x01;
//Enable ADC
ADCSRA |= 0x80;
}
// ADC Sleep
void HAL_ADC_Sleep(void)
{
//wait to finish
while(ADCSRA&0x40);
//Disable ADC
ADCSRA &= ~0x80;
//Disable ADC power
PRR0 |= 0x01;
}
// ADC Read
uint16_t HAL_ADC_Read(adcCh_t ch)
{
//check if ADC is enabled
if(!(ADCSRA&0x80)) return 0xFFFF;
uint8_t mux = (uint8_t)ch;
//Safe guard mux
if(mux > 15) return 0xFFFF;
// Not available channels
if((mux > 8) && (mux<14)) return 0xFFFF;
ADMUX &= ~0x0F;
ADMUX |= mux;
ADCSRA |= 0x40;
while(ADCSRA&0x40); //wait to finish
return ADC;
}
// Coil Driver Low Side control
void HAL_Coil_SetLowSide(uint8_t on)
{
if(on) PORTB |= 0x01;
else PORTB &= ~0x01;
}
void HAL_Coil_SetPWM(uint8_t percent)
{
HAL_PWM_SetDuty100(PWM_COIL, percent);
}
void HAL_Coil_SetPWM16b(uint16_t value)
{
HAL_PWM_SetDuty16b(PWM_COIL, value);
}
// LED Display
void HAL_LEDS_Set(uint8_t image)
{
//Read current PORTD pin6, pin7
uint8_t keep = PORTD & 0xC0;
//Safe guard display
image &= 0x3F;
//Calculate new PORTD
keep |= image;
//Set PORTD
PORTD = keep;
}
uint8_t HAL_LEDS_Get(void)
{
return (PIND & 0x3F);
}
void HAL_LEDS_SetPWM(uint8_t percent)
{
HAL_PWM_SetDuty100(PWM_LED, percent);
}
// PWM Direct functions
void HAL_PWM_Wake(void)
{
//Enable Timer1 power
PRR0 &= ~0x80;
//Prepare Timer1 settings
TCNT1 = 0x0000;
OCR1A = 0x0000;
OCR1B = 0x0000;
//Enable clock
TCCR1B |= tim1_prescaler; //Enable timer
}
void HAL_PWM_Sleep(void)
{
// Turn off outputs
OCR1A = 0x0000;
OCR1B = 0x0000;
// Force timer to bottom
TCNT1 = (ICR1-1);
// Wait for outputs to be off
while((PINB&0x06)!=0x00) continue;
// Disable clock
TCCR1B &= ~0x07;
// Disable Timer1 power
PRR0 |= 0x80;
}
void HAL_PWM_SetDuty16b(pwmCh_t ch, uint16_t value)
{
value = 0xFFFF - value;
uint32_t top = (uint32_t)ICR1;
uint32_t temp = (uint32_t)value * top;
temp = temp/0x0000FFFF;
//Limit temp
if(temp>0x0000FFFF) temp = 0x0000FFFF;
uint16_t ocrx = (uint16_t) temp;
PWM_SetOCx(ch, ocrx);
}
void HAL_PWM_SetDuty100(pwmCh_t ch, uint8_t percent)
{
if(percent > 100) percent = 100;
percent = 100 - percent;
uint32_t top = (uint32_t)ICR1;
uint32_t temp = (uint32_t)percent * top;
temp = temp/100;
//Limit temp
if(temp>0x0000FFFF) temp = 0x0000FFFF;
uint16_t ocrx = (uint16_t) temp;
PWM_SetOCx(ch, ocrx);
}
/**** Private function definitions ****/
static void PWM_SetOCx(pwmCh_t ch, uint16_t value)
{
switch(ch)
{
case PWM_COIL:
OCR1A = value;
return;
case PWM_LED:
OCR1B = value;
return;
default:
return;
}
}

View File

@@ -0,0 +1,127 @@
/**** Includes ****/
#include "hal/udccd_hal.h"
#include "halfbridge.h"
/**** Private variables ****/
static const uint16_t min_dc = 3277; //5%
static const uint16_t max_dc = 62258; //95%
static uint16_t target = 0;
static uint8_t low_side_on = 1;
static uint16_t active_dc = 0;
static uint8_t is_en = 0;
/**** Private function declarations ****/
static uint16_t CalculateDuty16b(uint16_t target, uint16_t supply);
/**** Public function definitions ****/
void HB_SetTarget(uint16_t voltage)
{
target = voltage;
}
void HB_SetLowSide(uint8_t on)
{
low_side_on = on;
}
uint16_t HB_GetTarget(void)
{
return target;
}
void HB_UpdateOutput(uint16_t supply)
{
uint16_t temp_dc = CalculateDuty16b(target, supply);
HB_SetDirect(temp_dc);
}
void HB_SetDirect(uint16_t duty)
{
/// Limit duty cycle
if(duty > max_dc) active_dc = max_dc;
else if(duty < min_dc) active_dc = 0;
else active_dc = duty;
// Set duty cycle
if(!is_en) return;
HAL_Coil_SetLowSide(low_side_on);
HAL_Coil_SetPWM16b(active_dc);
}
uint8_t HB_IsLowOn(void)
{
if(HAL_ReadLvl_CoilLow() == HIGH) return 1;
else return 0;
}
void HB_Enable(void)
{
// Restore low side
if(low_side_on) HAL_Coil_SetLowSide(1);
// Restore duty cycle
HAL_Coil_SetPWM(active_dc);
is_en = 1;
}
void HB_Disable(void)
{
// Set 0 DC
HAL_Coil_SetPWM(0);
// Disable low side
HAL_Coil_SetLowSide(0);
is_en = 0;
}
uint8_t HB_IsEnabled(void)
{
if(is_en) return 1;
else return 0;
}
int8_t HB_IsOutputMatch(uint16_t fb_output_voltage, uint16_t limit)
{
// No fault if output not enabled
if(!is_en) return -1;
// Can't check voltage if low side is off
if(!low_side_on) return -1;
if(target==0)
{
// Output can be only 0
if(fb_output_voltage != 0) return 0;
else return 1;
};
// Calculate upper and lower bounds
uint16_t max = target + limit;
uint16_t min = target - limit;
//Sanity check
if(max < target) max = 0xFFFF;
if(min > target) min = 0;
//Do check
if((fb_output_voltage < min)||(fb_output_voltage > max)) return 0;
else return 1;
}
/**** Private function definitions ****/
static uint16_t CalculateDuty16b(uint16_t target, uint16_t supply)
{
if(target==0) return 0;
if(supply==0) return 0;
if(target > supply) return 0xFFFF;
// Calculate Duty cycle, in 16bit format
uint32_t temp = (uint32_t)target * 0x0000FFFF;
temp = temp / supply;
//Limit output to 16 bits
if(temp > 0x0000FFFF) return 0xFFFF;
else return (uint16_t)temp;
}

View File

@@ -0,0 +1,24 @@
#ifndef HALFBRIDGE_H_
#define HALFBRIDGE_H_
/**** Includes ****/
#include <stdint.h>
/**** Public function declarations ****/
void HB_UpdateOutput(uint16_t supply);
void HB_SetTarget(uint16_t voltage);
void HB_SetLowSide(uint8_t on);
void HB_SetDirect(uint16_t duty);
void HB_Enable(void);
void HB_Disable(void);
uint16_t HB_GetTarget(void);
uint8_t HB_IsLowOn(void);
uint8_t HB_IsEnabled(void);
int8_t HB_IsOutputMatch(uint16_t fb_output_voltage, uint16_t limit);
#endif /* HALFBRIDGE_H_ */

82
firmware/devices/inputs.c Normal file
View File

@@ -0,0 +1,82 @@
/**** Includes ****/
#include "hal/udccd_hal.h"
#include "inputs.h"
/**** Private definitions ****/
/**** Private variables ****/
static const uint8_t def_debounce_lim = 10;
/**** Private function declarations ****/
static void InitDefaultInput(inCh_t* inp);
static void ProcessInput(uint8_t read_lvl, inCh_t* inp);
/**** Public function definitions ****/
void Inputs_DefInit(inputs_t* inputs)
{
InitDefaultInput(&inputs->handbrake);
InitDefaultInput(&inputs->brakes);
InitDefaultInput(&inputs->dimm);
InitDefaultInput(&inputs->up);
InitDefaultInput(&inputs->down);
InitDefaultInput(&inputs->mode);
}
void Inputs_UpdateAll(inputs_t* inputs)
{
// Chassis inputs
ProcessInput(HAL_ReadLvl_Handbrake(), &inputs->handbrake);
ProcessInput(HAL_ReadLvl_Brake(), &inputs->brakes);
ProcessInput(HAL_ReadLvl_Dimm(), &inputs->dimm);
// User inputs
ProcessInput(HAL_ReadLvl_BtnUp(), &inputs->up);
ProcessInput(HAL_ReadLvl_BtnDown(), &inputs->down);
ProcessInput(HAL_ReadLvl_BtnMode(), &inputs->mode);
}
void Inputs_SetHanbrakePullUp(uint8_t on)
{
if(on) HAL_SetPull_Handbrake(HIGH);
else HAL_SetPull_Handbrake(HIZ);
}
/**** Private function definitions ****/
static void InitDefaultInput(inCh_t* inp)
{
inp->is_active = 0;
inp->is_new = 0;
inp->state_timer = 0;
inp->cfg.act_level = LOW;
inp->cfg.dbnc_treshold = def_debounce_lim;
inp->proc.level = LOW;
inp->proc.dbnc_counter = 0;
}
static void ProcessInput(uint8_t read_lvl, inCh_t* inp)
{
if(inp->state_timer < 0xFFFF) inp->state_timer++;
if(read_lvl != inp->proc.level)
{
//Debounce ongoing
inp->proc.dbnc_counter++;
if(inp->proc.dbnc_counter < inp->cfg.dbnc_treshold) return;
//Save level
inp->proc.level = read_lvl;
//Change state
if(inp->proc.level == inp->cfg.act_level) inp->is_active = 1;
else inp->is_active = 0;
// Update new flag
inp->is_new = 1;
// Reset state timer
inp->state_timer = 0;
return;
}
else
{
//Debounce failed
if(inp->proc.dbnc_counter) inp->proc.dbnc_counter = 0;
}
}

43
firmware/devices/inputs.h Normal file
View File

@@ -0,0 +1,43 @@
#ifndef INPUTS_H_
#define INPUTS_H_
/**** Includes ****/
#include <stdint.h>
#include "common/level.h"
/**** Public definitions ****/
typedef struct {
level_t act_level;
uint8_t dbnc_treshold;
} inChCfg_t;
typedef struct {
level_t level;
uint8_t dbnc_counter;
} inChRaw_t;
typedef struct {
uint8_t is_active;
uint8_t is_new;
uint16_t state_timer;
inChRaw_t proc;
inChCfg_t cfg;
} inCh_t;
typedef struct {
inCh_t handbrake;
inCh_t brakes;
inCh_t dimm;
inCh_t up;
inCh_t down;
inCh_t mode;
} inputs_t;
/**** Public function declarations ****/
void Inputs_DefInit(inputs_t* inputs);
void Inputs_UpdateAll(inputs_t* inputs);
void Inputs_SetHanbrakePullUp(uint8_t on);
#endif /* INPUTS_H_ */

View File

@@ -0,0 +1,20 @@
/**** Includes ****/
#include "hal/udccd_hal.h"
#include "led_display.h"
/**** Private variables ****/
/**** Private function declarations ****/
/**** Public function definitions ****/
void LED_DSP_ShowImage(uint8_t image)
{
HAL_LEDS_Set(image);
}
void LED_DSP_SetBrightness(uint8_t percent)
{
HAL_LEDS_SetPWM(percent);
}
/**** Private function definitions ****/

View File

@@ -0,0 +1,13 @@
#ifndef LED_DISPLAY_H_
#define LED_DISPLAY_H_
/**** Includes ****/
#include <stdint.h>
/**** Public definitions ****/
/**** Public function declarations ****/
void LED_DSP_ShowImage(uint8_t image);
void LED_DSP_SetBrightness(uint8_t percent);
#endif /* LED_DISPLAY_H_ */

34
firmware/devices/memory.c Normal file
View File

@@ -0,0 +1,34 @@
/**** Includes ****/
#include <avr/eeprom.h>
#include "memory.h"
/**** Public function definitions ****/
uint8_t MEM_Read8b(uint8_t address)
{
return eeprom_read_byte((uint8_t*)address);
}
uint16_t MEM_Read16b(uint8_t address)
{
return eeprom_read_word((uint8_t*)address);
}
uint32_t MEM_Read32b(uint8_t address)
{
return eeprom_read_dword((uint8_t*)address);
}
void MEM_Write8b(uint8_t address, uint8_t value)
{
return eeprom_write_byte((uint8_t*)address, value);
}
void MEM_Write16b(uint8_t address, uint16_t value)
{
return eeprom_write_word((uint8_t*)address, value);
}
void MEM_Write32b(uint8_t address, uint32_t value)
{
return eeprom_write_dword((uint8_t*)address, value);
}

16
firmware/devices/memory.h Normal file
View File

@@ -0,0 +1,16 @@
#ifndef MEMORY_H_
#define MEMORY_H_
/**** Includes ****/
#include <stdint.h>
/**** Public function declarations ****/
uint8_t MEM_Read8b(uint8_t address);
uint16_t MEM_Read16b(uint8_t address);
uint32_t MEM_Read32b(uint8_t address);
void MEM_Write8b(uint8_t address, uint8_t value);
void MEM_Write16b(uint8_t address, uint16_t value);
void MEM_Write32b(uint8_t address, uint32_t value);
#endif /* MEMORY_H_ */

125
firmware/drivers/display.c Normal file
View File

@@ -0,0 +1,125 @@
/**** Includes ****/
#include "display.h"
/**** Private definitions ****/
/**** Private variables ****/
static uint8_t PWM_DIMM = 50;
static uint8_t PWM_BRIGTH = 100;
static uint8_t set_image = 0x00;
static uint16_t lock_timer = 0;
/**** Private function declarations ****/
static uint8_t ImageGen_Dot10(uint8_t percent);
static uint8_t ImageGen_Dot20(uint8_t percent);
static uint8_t ImageGen_Bar(uint8_t percent);
/**** Public function definitions ****/
void Display_CfgBacklight(uint8_t brigth, uint8_t dimm)
{
//Limit values
if(brigth>100) brigth = 100;
else if(brigth==0) brigth = 1;
if(dimm>100) dimm = 100;
else if(dimm==0) dimm = 1;
//Save values
PWM_BRIGTH = brigth;
PWM_DIMM = dimm;
}
void Display_SetImage(uint8_t image)
{
if(lock_timer) return;
set_image = image & 0x3F;
}
void Display_SetPercent(uint8_t value, dspStyle_t style)
{
switch(style)
{
case BAR:
Display_SetImage(ImageGen_Bar(value));
break;
case DOT10:
Display_SetImage(ImageGen_Dot10(value));
break;
default:
Display_SetImage(ImageGen_Dot20(value));
break;
}
}
void Display_SetScale(uint16_t value, uint16_t max_value ,dspStyle_t style)
{
//Convert value to percent
uint32_t temp = (uint32_t)value *100;
temp /= max_value;
//Limit value to 100 percent
uint8_t percent = 0;
if(temp >= 100) percent = 100;
else if(temp == 0) percent = 0;
else percent = (uint8_t)temp;
Display_SetPercent(percent, style);
}
void Display_SetLock(uint16_t time)
{
lock_timer = time;
}
void Display_Update(inputs_t* inputs)
{
// Brightness control
if(inputs->dimm.is_active) LED_DSP_SetBrightness(PWM_DIMM);
else LED_DSP_SetBrightness(PWM_BRIGTH);
if(lock_timer) lock_timer--;
// Set image
LED_DSP_ShowImage(set_image);
}
/**** Private function definitions ****/
static uint8_t ImageGen_Dot10(uint8_t percent)
{
if(percent<6) return 0x01;
else if(percent<16) return 0x03;
else if(percent<26) return 0x02;
else if(percent<36) return 0x06;
else if(percent<46) return 0x04;
else if(percent<56) return 0x0C;
else if(percent<66) return 0x08;
else if(percent<76) return 0x18;
else if(percent<86) return 0x10;
else if(percent<96) return 0x30;
else return 0x20;
}
static uint8_t ImageGen_Dot20(uint8_t percent)
{
if(percent<11) return 0x01;
else if(percent<31) return 0x02;
else if(percent<51) return 0x04;
else if(percent<71) return 0x08;
else if(percent<91) return 0x10;
else return 0x20;
}
static uint8_t ImageGen_Bar(uint8_t percent)
{
if(percent<11) return 0x01;
else if(percent<31) return 0x03;
else if(percent<51) return 0x07;
else if(percent<71) return 0x0F;
else if(percent<91) return 0x1F;
else return 0x3F;
}

View File

@@ -0,0 +1,27 @@
#ifndef DISPLAY_DRV_H_
#define DISPLAY_DRV_H_
/**** Includes ****/
#include <avr/io.h>
#include "../devices/led_display.h"
#include "../devices/inputs.h"
/**** Public definitions ****/
typedef enum {
DOT20,
DOT10,
BAR
} dspStyle_t;
/**** Public function declarations ****/
void Display_SetImage(uint8_t image);
void Display_SetPercent(uint8_t value, dspStyle_t style);
void Display_SetScale(uint16_t value, uint16_t max_value ,dspStyle_t style);
void Display_SetLock(uint16_t time);
void Display_Update(inputs_t* inputs);
void Display_CfgBacklight(uint8_t brigth, uint8_t dimm);
#endif /* DISPLAY_DRV_H_ */

341
firmware/drivers/output.c Normal file
View File

@@ -0,0 +1,341 @@
/**** Includes ****/
#include "output.h"
/**** Private definitions ****/
typedef struct {
uint8_t active;
uint8_t time;
} warn_t;
typedef struct {
warn_t supply_voltage;
warn_t supply_current;
warn_t supply_power;
warn_t output_voltage;
warn_t output_current;
warn_t output_power;
warn_t output_open;
warn_t output_short;
warn_t output_mismatch;
} warnings_t;
typedef struct {
uint8_t supply_uvlo;
uint8_t supply_ovp;
uint8_t supply_ocp;
uint8_t supply_opp;
uint8_t output_ovp;
uint8_t output_ocp;
uint8_t output_opp;
uint8_t output_open;
uint8_t output_short;
} faults_t;
/**** Private constants ****/
static const uint16_t LIM_SUPPLY_UVLO = 8000; //mV
static const uint16_t LIM_SUPPLY_OVP = 18000; //mV
static const uint16_t LIM_SUPPLY_OCP = 7000; //mA
static const uint16_t LIM_SUPPLY_OPP = 40000; //mW
static const uint16_t LIM_OUTPUT_OVP = 12000; //mV
static const uint16_t LIM_OUTPUT_OCP = 7000; //mA
static const uint16_t LIM_OUTPUT_OPP = 40000; //mW
static const uint16_t LIM_OUTPUT_OPEN = 40000; //mR
static const uint16_t LIM_OUTPUT_SHORT = 750; //mR
static const uint16_t LIM_OUTPUT_MATCH = 100; //mV
static const uint8_t OCP_WARNING_LIMIT = 10; //cycles
static const uint8_t SHORT_WARNING_LIMIT = 50; //cycles
static const uint16_t MAX_OUTPUT_VOLTAGE = 10000; //mV
static const uint16_t MIN_OUTPUT_VOLTAGE = 100; //mV
static const uint16_t COOLDOWN_TIME = 5000;
/**** Private variables ****/
static warnings_t warnings;
static faults_t faults;
static uint16_t target_output = 0;
static uint16_t adj_target = 0;
static int32_t hb_volt_sum = 0;
static uint8_t new_target = 1;
static uint8_t steady_state = 0;
static faultState_t fault_state = F_NONE;
static uint16_t cooldown_timer = 0;
static outState_t out_state = O_OFF;
/**** Private function declarations ****/
static void Process_Warnings(analog_t* meas);
static uint8_t Process_Faults(void);
static void ProcessWarningTime(warn_t* w);
static uint8_t isAnyFaultActive(faults_t* f);
static uint8_t isFaultWarningActive(warnings_t* w, faults_t* f);
static void ResetFaults(faults_t* f);
/**** Public function definitions ****/
void Output_Enable(void)
{
ResetFaults(&faults);
target_output = 0;
out_state = O_ACTIVE;
HB_SetTarget(0) ;
HB_SetLowSide(1);
HB_Enable();
}
void Output_Update(analog_t* meas)
{
Process_Warnings(meas);
// Convert Warnings to Faults
uint8_t active_fault = Process_Faults();
/// Ignore faults
active_fault = 0;
// Determine coil state
switch(out_state)
{
case O_ACTIVE:
if(active_fault)
{
// Disable output
HB_Disable();
out_state = O_FAULTED;
break;
};
//Do target adjustment logic
if(steady_state >= 10)
{
//Calculate average HB voltage
hb_volt_sum /= 11;
// Calculate feedback adjusted HB output
int32_t error = hb_volt_sum - (int32_t)target_output;
int32_t temp = (int32_t)adj_target - error;
// Limit to 16bits
if(temp<=0) adj_target = 0;
else if(temp >= 0x0000FFFF) adj_target = 0xFFFF;
else adj_target = (uint16_t)temp;
steady_state = 0;
hb_volt_sum = 0;
}
else
{
hb_volt_sum += meas->hb_voltage;
steady_state++;
}
// Closed loop or open loop target set
if(new_target)
{
// Set open-loop HB output
HB_SetTarget(target_output);
adj_target = target_output;
steady_state = 0;
new_target = 0;
hb_volt_sum = 0;
}
else
{
HB_SetTarget(adj_target);
}
// Update output
HB_UpdateOutput(meas->supply_voltage);
break;
case O_FAULTED:
if(!active_fault)
{
//Return to normal state
HB_Enable();
out_state = O_ACTIVE;
}
break;
default: //OFF
if(HB_IsEnabled()) HB_Disable();
break;
}
}
void Output_SetTarget(uint16_t voltage)
{
if(voltage > MAX_OUTPUT_VOLTAGE) voltage = MAX_OUTPUT_VOLTAGE;
else if((voltage > 0)&&(voltage < MIN_OUTPUT_VOLTAGE)) voltage = MIN_OUTPUT_VOLTAGE;
if(voltage != target_output) new_target = 1;
target_output = voltage;
}
outState_t Output_GetOutputState(void)
{
return out_state;
}
/**** Private function definitions ****/
static void Process_Warnings(analog_t* meas)
{
// Supply UVLO and OVP
if((meas->supply_voltage > LIM_SUPPLY_OVP)||(meas->supply_voltage < LIM_SUPPLY_UVLO)) warnings.supply_voltage.active = 1;
else warnings.supply_voltage.active = 0;
// Supply OCP
if(meas->supply_current > LIM_SUPPLY_OCP) warnings.supply_current.active = 1;
else warnings.supply_current.active = 0;
// Supply OPP
if(meas->supply_power > LIM_SUPPLY_OPP) warnings.supply_power.active = 1;
else warnings.supply_power.active = 0;
// Halfbridge output conditions
// Output Target mismatch
if(HB_IsOutputMatch(meas->hb_voltage, LIM_OUTPUT_MATCH) == 0) warnings.output_mismatch.active = 1;
else warnings.output_mismatch.active = 0;
// Output OCP
if((HB_IsLowOn())&&(meas->hb_currnet > LIM_OUTPUT_OCP)) warnings.output_current.active = 1;
else warnings.output_current.active = 0;
// Output OVP
if((HB_IsLowOn())&&(meas->hb_voltage > LIM_OUTPUT_OVP)) warnings.output_voltage.active = 1;
else warnings.output_voltage.active = 0;
// Output OPP
if((HB_IsEnabled())&&(meas->hb_power > LIM_OUTPUT_OPP)) warnings.output_power.active = 1;
else warnings.output_power.active = 0;
// Output Short
if((HB_IsEnabled())&&(meas->hb_resistance < LIM_OUTPUT_SHORT)) warnings.output_short.active = 1;
else warnings.output_short.active = 0;
// Output Open - Load loss
if((HB_IsEnabled())&&(meas->hb_resistance > LIM_OUTPUT_OPEN)) warnings.output_open.active = 1;
else warnings.output_open.active = 0;
ProcessWarningTime(&warnings.supply_voltage);
ProcessWarningTime(&warnings.supply_current);
ProcessWarningTime(&warnings.supply_power);
ProcessWarningTime(&warnings.output_mismatch);
ProcessWarningTime(&warnings.output_voltage);
ProcessWarningTime(&warnings.output_current);
ProcessWarningTime(&warnings.output_power);
ProcessWarningTime(&warnings.output_open);
ProcessWarningTime(&warnings.output_short);
}
static uint8_t Process_Faults(void)
{
// Check warnings to escalate to fault
// Supply OCP
if(warnings.supply_current.time > OCP_WARNING_LIMIT) faults.supply_ocp = 1;
// Output OCP
if(warnings.output_current.time > OCP_WARNING_LIMIT) faults.output_ocp = 1;
// Output short
if(warnings.output_short.time > SHORT_WARNING_LIMIT) faults.output_short = 1;
switch(fault_state)
{
case F_ACTIVE:
// Check if fault still active
if(!isFaultWarningActive(&warnings, &faults))
{
// Fault cause ended, go to cooldown
cooldown_timer = COOLDOWN_TIME;
fault_state = F_COOLDOWN;
};
break;
case F_COOLDOWN:
// Check if fault reoccurs
if(isFaultWarningActive(&warnings, &faults))
{
fault_state = F_ACTIVE;
break;
};
// Wait for cooldown timer, reset fault flags
if(cooldown_timer) cooldown_timer--;
else
{
ResetFaults(&faults);
fault_state = F_NONE;
}
break;
default: //NONE
// Check for new faults
if(isAnyFaultActive(&faults))
{
// Start fault process
fault_state = F_ACTIVE;
};
break;
}
if(fault_state != F_NONE) return 1;
else return 0;
}
static void ProcessWarningTime(warn_t* w)
{
if((w->active)&&(w->time < 0xFF)) w->time++;
else if(w->active == 0) w->time = 0;
}
static uint8_t isAnyFaultActive(faults_t* f)
{
if(f->supply_uvlo) return 1;
if(f->supply_ovp) return 1;
if(f->supply_ocp) return 1;
if(f->supply_opp) return 1;
if(f->output_ovp) return 1;
if(f->output_ocp) return 1;
if(f->output_opp) return 1;
if(f->output_open) return 1;
if(f->output_short) return 1;
return 0;
}
static uint8_t isFaultWarningActive(warnings_t* w, faults_t* f)
{
if((f->supply_uvlo) && (w->supply_voltage.active)) return 1;
if((f->supply_ovp) && (w->supply_voltage.active)) return 1;
if((f->supply_ocp) && (w->supply_current.active)) return 1;
if((f->supply_opp) && (w->supply_power.active) ) return 1;
if((f->output_ovp) && (w->output_voltage.active)) return 1;
if((f->output_ocp) && (w->output_current.active)) return 1;
if((f->output_opp) && (w->output_power.active) ) return 1;
if((f->output_open) && (w->output_open.active) ) return 1;
if((f->output_short) && (w->output_short.active) ) return 1;
return 0;
}
static void ResetFaults(faults_t* f)
{
f->supply_uvlo = 0;
f->supply_ovp = 0;
f->supply_ocp = 0;
f->supply_opp = 0;
f->output_ovp = 0;
f->output_ocp = 0;
f->output_opp = 0;
f->output_open = 0;
f->output_short = 0;
}

30
firmware/drivers/output.h Normal file
View File

@@ -0,0 +1,30 @@
#ifndef OUTPUT_DRV_H_
#define OUTPUT_DRV_H_
/**** Includes ****/
#include <avr/io.h>
#include "../devices/analog.h"
#include "../devices/halfbridge.h"
/**** Public definitions ****/
typedef enum {
F_NONE,
F_ACTIVE,
F_COOLDOWN
} faultState_t;
typedef enum {
O_OFF,
O_ACTIVE,
O_FAULTED
} outState_t;
/**** Public function declarations ****/
void Output_Enable(void);
void Output_Update(analog_t* meas);
void Output_SetTarget(uint16_t voltage);
outState_t Output_GetOutputState(void);
#endif /* OUTPUT_DRV_H_ */

127
firmware/logic/coil.c Normal file
View File

@@ -0,0 +1,127 @@
/**** Includes ****/
#include "coil.h"
/**** Private definitions ****/
/**** Private constants ****/
/**** Private variables ****/
static uint16_t lock_current = 4500; //mA
static uint16_t min_current = 100; //mA
static uint16_t target_current = 0; //mA
static uint8_t new_target = 1;
static uint16_t adj_target_current = 0; //mA
static uint16_t target_voltage = 0; //mV
static uint8_t act_force = 0;
static uint16_t nominal_resitance = 1500; //mR
static int32_t sum_current = 0;
static uint8_t sum_cnt = 0;
/**** Private function declarations ****/
static uint16_t UpdateVoltage(uint16_t cur, uint16_t res);
/**** Public function definitions ****/
void Coil_SetLockCurrent(uint16_t lock_i)
{
lock_current = lock_i;
}
void Coil_SetTarget_Force(uint8_t force)
{
// Check if worth doing
if(force == act_force) return;
// Calculate new target current
act_force = force;
// Check simple answer
uint16_t new_current = 0;
if(force==0) new_current = 0;
else if(force >= 100) new_current = lock_current;
else
{
uint32_t temp = (uint32_t)force * lock_current;
temp /= 100;
if(temp > 0x0000FFFF) new_current = lock_current;
else new_current = (uint16_t) temp;
}
// Update new target
Coil_SetTarget_Current(new_current);
}
void Coil_SetTarget_Current(uint16_t current)
{
if(current >= lock_current) current = lock_current;
else if((current > 0)&&(current <= min_current)) current = min_current;
if(current != target_current) new_target = 1;
target_current = current;
}
uint16_t Coil_GetTargetVolatge(void)
{
return target_voltage;
}
uint16_t Coil_Update(analog_t* meas)
{
// Collect average current
sum_current += meas->hb_currnet;
sum_cnt++;
// Update measurement
if(sum_cnt >= 10)
{
// Calculate average
sum_current /= sum_cnt;
// Calculate error
int32_t error = sum_current - (int32_t)target_current;
int32_t temp = (int32_t)adj_target_current - error;
// Limit to 16bits
if(temp<0) adj_target_current = 0;
else if(temp > 0x0000FFFF) adj_target_current = 0xFFFF;
else adj_target_current = (uint16_t)temp;
sum_cnt = 0;
sum_current = 0;
};
// Closed loop or open loop target set
if(new_target)
{
// Set open-loop HB output
target_voltage = UpdateVoltage(target_current, nominal_resitance);
adj_target_current = target_current;
new_target = 0;
sum_cnt = 0;
sum_current = 0;
}
else
{
target_voltage = UpdateVoltage(adj_target_current, nominal_resitance);
}
return target_voltage;
}
/**** Private function definitions ****/
static uint16_t UpdateVoltage(uint16_t cur, uint16_t res)
{
// Update settable voltage
if(cur==0) return 0;
else
{
uint32_t volt = (uint32_t)cur * res;
volt /= 1000;
if(volt > 0x0000FFFF) return 0xFFFF;
else return (uint16_t)volt;
}
}

19
firmware/logic/coil.h Normal file
View File

@@ -0,0 +1,19 @@
#ifndef COIL_LOGIC_H_
#define COIL_LOGIC_H_
/**** Includes ****/
#include <stdint.h>
#include "../devices/analog.h"
/**** Public definitions ****/
/**** Public function declarations ****/
void Coil_SetTarget_Force(uint8_t force);
void Coil_SetTarget_Current(uint16_t current);
uint16_t Coil_GetTargetVolatge(void);
uint16_t Coil_Update(analog_t* meas);
void Coil_SetLockCurrent(uint16_t lock_i);
#endif /* COIL_LOGIC_H_ */

186
firmware/logic/force.c Normal file
View File

@@ -0,0 +1,186 @@
/**** Includes ****/
#include "force.h"
/**** Private definitions ****/
/**** Private constants ****/
static const int8_t BUTTONS_STEP = 10;
static const uint16_t BUTTON_HOLD_TIME = 250;
static const uint16_t MODE_HOLD_TIME = 500;
/**** Private variables ****/
static inputMode_t input_mode = IM_BUTTONS;
static uint8_t user_force = 0;
static uint8_t new_user_force = 0;
static brakeMode_t brake_mode = BM_OPEN;
static uint8_t new_brake_mode = 1;
/**** Private function declarations ****/
static uint8_t SaturatedAdd(uint8_t base, int8_t delta);
/**** Public function definitions ****/
inputMode_t Force_GetInputMode(void)
{
return input_mode;
}
void Force_CfgInputMode(inputMode_t in_mode)
{
input_mode = in_mode;
}
void Force_SetUserForce(uint8_t force)
{
if(force > 100) force = 100;
user_force = force;
}
void Force_SetBrakeMode(uint8_t bmode)
{
brake_mode = bmode;
}
uint8_t Force_Update(inputs_t* inputs, analog_t* meas)
{
// Process user inputs
if(input_mode==IM_POT)
{
// Process potentiometer
if(meas->pot_voltage <= 500) user_force = 0;
else if(meas->pot_voltage >= 4500 ) user_force = 100;
else
{
uint16_t pot_u = meas->pot_voltage;
pot_u /= 50;
//Limit to 100
if(pot_u > 100) user_force = 100;
else if(pot_u < 10) user_force = 10;
else user_force = (uint8_t)pot_u;
}
}
else
{
// Process +/- timer
if((inputs->down.is_active)&&(inputs->down.state_timer > BUTTON_HOLD_TIME))
{
inputs->down.is_new = 1;
inputs->down.state_timer = 0;
};
if((inputs->up.is_active)&&(inputs->up.state_timer > BUTTON_HOLD_TIME))
{
inputs->up.is_new = 1;
inputs->up.state_timer = 0;
};
// Process +/- logic
if((inputs->down.is_new)&&(inputs->down.is_active))
{
user_force = SaturatedAdd(user_force, -1 * BUTTONS_STEP);
new_user_force = 1;
}
else if((inputs->up.is_new)&&(inputs->up.is_active))
{
user_force = SaturatedAdd(user_force, BUTTONS_STEP);
new_user_force = 1;
};
inputs->down.is_new = 0;
inputs->up.is_new = 0;
}
// Process mode timer
if((inputs->mode.is_active)&&(inputs->mode.state_timer > MODE_HOLD_TIME))
{
inputs->mode.is_new = 1;
inputs->mode.state_timer = 0;
};
// Process mode logic
if((inputs->mode.is_new)&&(inputs->mode.is_active))
{
//Cycle mode
switch(brake_mode)
{
case BM_OPEN:
brake_mode = BM_KEEP;
break;
case BM_KEEP:
brake_mode = BM_LOCK;
break;
case BM_LOCK:
brake_mode = BM_OPEN;
break;
default:
brake_mode = BM_OPEN;
break;
}
new_brake_mode = 1;
};
inputs->mode.is_new = 0;
// Determine next target force from inputs
if(inputs->handbrake.is_active)
{
return 0;
}
else if(inputs->brakes.is_active)
{
switch(brake_mode)
{
case BM_LOCK:
return 100;
case BM_KEEP:
return user_force;
default:
return 0;
}
}
else
{
return user_force;
}
}
uint8_t Force_IsNewUserForce(void)
{
return new_user_force;
}
void Force_ResetNewUserForce(void)
{
new_user_force = 0;
}
brakeMode_t Force_GetBrakeMode(void)
{
return brake_mode;
}
uint8_t Force_IsNewBrakeMode(void)
{
return new_brake_mode;
}
void Force_ResetNewBrakeMode(void)
{
new_brake_mode = 0;
}
/**** Private function definitions ****/
static uint8_t SaturatedAdd(uint8_t base, int8_t delta)
{
int16_t temp = (int16_t)base + delta;
if(temp < 0) return 0;
else if(temp >= 100) return 100;
else return (uint8_t)temp;
}

36
firmware/logic/force.h Normal file
View File

@@ -0,0 +1,36 @@
#ifndef FORCE_LOGIC_H_
#define FORCE_LOGIC_H_
/**** Includes ****/
#include <stdint.h>
#include "../devices/analog.h"
#include "../devices/inputs.h"
/**** Public definitions ****/
typedef enum {
BM_OPEN,
BM_KEEP,
BM_LOCK
} brakeMode_t;
typedef enum {
IM_BUTTONS,
IM_POT
} inputMode_t;
/**** Public function declarations ****/
void Force_CfgInputMode(inputMode_t in_mode);
inputMode_t Force_GetInputMode(void);
uint8_t Force_Update(inputs_t* inputs, analog_t* meas);
void Force_SetBrakeMode(uint8_t bmode);
brakeMode_t Force_GetBrakeMode(void);
uint8_t Force_IsNewBrakeMode(void);
void Force_ResetNewBrakeMode(void);
void Force_SetUserForce(uint8_t force);
uint8_t Force_IsNewUserForce(void);
void Force_ResetNewUserForce(void);
#endif /* FORCE_LOGIC_H_ */

184
firmware/logic/settings.c Normal file
View File

@@ -0,0 +1,184 @@
/**** Includes ****/
#include "settings.h"
/**** Private definitions ****/
/**** Private constants ****/
static const uint8_t addr_force = 0x01;
static const uint8_t addr_bmode = 0x02;
static const uint8_t addr_inmode = 0x03;
static const uint8_t addr_dsp_bright = 0x04;
static const uint8_t addr_dsp_dimm = 0x05;
static const uint8_t addr_lock_amps = 0x06;
/**** Private variables ****/
static uint16_t save_force_timer = 0;
static uint16_t save_bmode_timer = 0;
/**** Private function declarations ****/
/**** Public function definitions ****/
void Setings_Update(uint8_t is_new_force, uint8_t force, uint8_t is_new_bmode, brakeMode_t bmode)
{
if(is_new_force) save_force_timer = 5000;
if(is_new_bmode) save_bmode_timer = 5000;
if(save_force_timer)
{
save_force_timer--;
if(!save_force_timer)
{
// Save force setting
Setings_SaveForce(force);
};
};
if(save_bmode_timer)
{
save_bmode_timer--;
if(!save_bmode_timer)
{
// Save mode setting
Setings_SaveBrakeMode(bmode);
};
};
}
void Setings_SaveForce(uint8_t value)
{
MEM_Write8b(addr_force, value);
}
uint8_t Setings_GetForce(void)
{
uint8_t val = MEM_Read8b(addr_force);
if(val > 100) return 0;
else return val;
}
void Setings_SaveBrakeMode(brakeMode_t bmode)
{
// Convert and save input mode setting
// Convert and save mode setting
uint8_t val = 0x00;
switch(bmode)
{
case BM_LOCK:
val = 'L';
break;
case BM_KEEP:
val = 'K';
break;
default:
val = 'O';
break;
}
MEM_Write8b(addr_bmode, val);
}
brakeMode_t Setings_GetBrakeMode(void)
{
// Convert and return mode setting
uint8_t val = MEM_Read8b(addr_bmode);
switch(val)
{
case 'L':
return BM_LOCK;
case 'K':
return BM_KEEP;
default:
return BM_OPEN;
}
}
void Setings_SaveInputMode(inputMode_t inmode)
{
// Convert and save input mode setting
uint8_t val = 0x00;
switch(inmode)
{
case IM_POT:
val = 'P';
break;
default:
val = 'B';
break;
}
MEM_Write8b(addr_inmode, val);
}
inputMode_t Setings_GetInputMode(void)
{
// Convert and return input mode setting
uint8_t val = MEM_Read8b(addr_inmode);
switch(val)
{
case 'P':
return IM_POT;
default:
return IM_BUTTONS;
}
}
void Setings_SaveDisplayBrigthLvl(uint8_t value)
{
MEM_Write8b(addr_dsp_bright, value);
}
uint8_t Setings_GetDisplayBrigthLvl(void)
{
uint8_t val = MEM_Read8b(addr_dsp_bright);
if(val > 100) return 100;
else return val;
}
void Setings_SaveDisplayDimmLvl(uint8_t value)
{
MEM_Write8b(addr_dsp_dimm, value);
}
uint8_t Setings_GetDisplayDimmLvl(void)
{
uint8_t val = MEM_Read8b(addr_dsp_dimm);
if(val > 100) return 50;
else return val;
}
void Setings_SaveLockCurrent(uint16_t value)
{
MEM_Write16b(addr_lock_amps, value);
}
uint16_t Setings_GetLockCurrent(void)
{
uint16_t val = MEM_Read16b(addr_lock_amps);
if(val > 6000) return 4500;
else return val;
}
void Setings_SaveDefault(void)
{
Setings_SaveForce(0);
Setings_SaveBrakeMode(BM_OPEN);
Setings_SaveInputMode(IM_BUTTONS);
Setings_SaveDisplayBrigthLvl(100);
Setings_SaveDisplayDimmLvl(50);
Setings_SaveLockCurrent(4500);
}
/**** Private function definitions ****/

34
firmware/logic/settings.h Normal file
View File

@@ -0,0 +1,34 @@
#ifndef SETTINGS_LOGIC_H_
#define SETTINGS_LOGIC_H_
/**** Includes ****/
#include <stdint.h>
#include "../devices/memory.h"
#include "force.h"
/**** Public definitions ****/
/**** Public function declarations ****/
void Setings_Update(uint8_t is_new_force, uint8_t force, uint8_t is_new_bmode, brakeMode_t bmode);
void Setings_SaveForce(uint8_t value);
uint8_t Setings_GetForce(void);
void Setings_SaveBrakeMode(brakeMode_t bmode);
brakeMode_t Setings_GetBrakeMode(void);
void Setings_SaveInputMode(inputMode_t inmode);
inputMode_t Setings_GetInputMode(void);
void Setings_SaveDisplayBrigthLvl(uint8_t value);
uint8_t Setings_GetDisplayBrigthLvl(void);
void Setings_SaveDisplayDimmLvl(uint8_t value);
uint8_t Setings_GetDisplayDimmLvl(void);
void Setings_SaveLockCurrent(uint16_t value);
uint16_t Setings_GetLockCurrent(void);
void Setings_SaveDefault(void);
#endif /* SETTINGS_LOGIC_H_ */

170
firmware/main.c Normal file
View File

@@ -0,0 +1,170 @@
/**** Includes ****/
#include <stdint.h>
#include "devices/config.h"
#include "devices/analog.h"
#include "devices/inputs.h"
#include "devices/memory.h"
#include "drivers/output.h"
#include "drivers/display.h"
#include "logic/force.h"
#include "logic/coil.h"
#include "logic/settings.h"
/**** Private definitions ****/
/**** Private constants ****/
/**** Private variables ****/
inputs_t inputs;
analog_t analog;
/**** Private function declarations ****/
void Setup(void);
void GatherData(uint8_t times);
/**** Public function definitions ****/
int main(void)
{
Setup();
while(1)
{
// Read all inputs
GatherData(1);
// Process force logic
uint8_t force = Force_Update(&inputs, &analog);
// Save values
uint8_t new_bmode = Force_IsNewBrakeMode();
uint8_t new_force = Force_IsNewUserForce();
if(Force_GetInputMode()==IM_POT) new_force = 0;
Setings_Update(new_force, force, new_bmode, Force_GetBrakeMode());
// Set coil current target
Coil_SetTarget_Force(force);
// Calculate next target voltage
uint16_t next_u = Coil_Update(&analog);
// Set next output voltage
Output_SetTarget(next_u);
// Update output
Output_Update(&analog);
// Display logic
if(Output_GetOutputState()==O_FAULTED)
{
// Show fault code
Display_SetLock(0);
Display_SetImage(0x33);
}
else if(Force_IsNewBrakeMode())
{
Display_SetLock(0);
switch(Force_GetBrakeMode())
{
case BM_LOCK:
Display_SetImage(0x38);
break;
case BM_KEEP:
Display_SetImage(0x1E);
break;
default:
Display_SetImage(0x07);
break;
}
Display_SetLock(1000);
}
else
{
Display_SetPercent(force, DOT10);
}
// Update display
Display_Update(&inputs);
// Reset new flags
Force_ResetNewBrakeMode();
Force_ResetNewUserForce();
}
return 0;
}
/**** Private function definitions ****/
void Setup(void)
{
// Initialize low level hardware
Init_HW();
// Prime EEPROM
//Setings_SaveDefault();
// Configure inputs
Inputs_DefInit(&inputs);
inputs.handbrake.cfg.act_level = HIGH;
inputs.handbrake.cfg.dbnc_treshold = 10;
inputs.brakes.cfg.act_level = LOW;
inputs.brakes.cfg.dbnc_treshold = 20;
inputs.dimm.cfg.act_level = LOW;
inputs.dimm.cfg.dbnc_treshold = 20;
inputs.up.cfg.act_level = LOW;
inputs.up.cfg.dbnc_treshold = 20;
inputs.down.cfg.act_level = LOW;
inputs.down.cfg.dbnc_treshold = 20;
inputs.mode.cfg.act_level = LOW;
inputs.mode.cfg.dbnc_treshold = 20;
Inputs_SetHanbrakePullUp(0);
// Configure display
Display_CfgBacklight(100,50);
// Show startup display
Display_SetImage(0xFF);
Display_Update(&inputs);
// Configure force logic
Force_CfgInputMode(IM_POT); //IM_BUTTONS IM_POT
// Restore saved force
Force_SetUserForce(Setings_GetForce());
// Restore saved brake mode
Force_SetBrakeMode(Setings_GetBrakeMode());
// Prime analog channels
GatherData(100);
// Show default display
Display_SetImage(0x01);
Display_Update(&inputs);
// Enable output
Output_Enable();
Output_SetTarget(0);
}
void GatherData(uint8_t times)
{
do
{
Analog_UpdateAll(&analog);
Inputs_UpdateAll(&inputs);
if(times) times--;
}
while(times);
}

View File

@@ -0,0 +1,22 @@

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}") = "uDCCD_Controller", "uDCCD_Controller.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

View File

@@ -0,0 +1,86 @@
<?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.7.0</CVersion>
<DefaultRepoPath>C:/Program Files (x86)\Atmel\Studio\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>C:/Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.7.374\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>C:/Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.7.374\include\avr\iom328pb.h</AbsolutePath>
<Attribute></Attribute>
<Category>header</Category>
<Condition>C</Condition>
<FileContentHash>TU9y07FA4IWGxznrvGv9rQ==</FileContentHash>
<FileVersion></FileVersion>
<Name>include/avr/iom328pb.h</Name>
<SelectString></SelectString>
<SourcePath></SourcePath>
</d4p1:anyType>
<d4p1:anyType i:type="FileInfo">
<AbsolutePath>C:/Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.7.374\templates\main.c</AbsolutePath>
<Attribute>template</Attribute>
<Category>source</Category>
<Condition>C Exe</Condition>
<FileContentHash>YLr2MkKo6ZooP7MhARWYNA==</FileContentHash>
<FileVersion></FileVersion>
<Name>templates/main.c</Name>
<SelectString>Main file (.c)</SelectString>
<SourcePath></SourcePath>
</d4p1:anyType>
<d4p1:anyType i:type="FileInfo">
<AbsolutePath>C:/Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.7.374\templates\main.cpp</AbsolutePath>
<Attribute>template</Attribute>
<Category>source</Category>
<Condition>C Exe</Condition>
<FileContentHash>mkKaE95TOoATsuBGv6jmxg==</FileContentHash>
<FileVersion></FileVersion>
<Name>templates/main.cpp</Name>
<SelectString>Main file (.cpp)</SelectString>
<SourcePath></SourcePath>
</d4p1:anyType>
<d4p1:anyType i:type="FileInfo">
<AbsolutePath>C:/Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.7.374\gcc\dev\atmega328pb</AbsolutePath>
<Attribute></Attribute>
<Category>libraryPrefix</Category>
<Condition>GCC</Condition>
<FileContentHash i:nil="true" />
<FileVersion></FileVersion>
<Name>gcc/dev/atmega328pb</Name>
<SelectString></SelectString>
<SourcePath></SourcePath>
</d4p1:anyType>
</Files>
<PackName>ATmega_DFP</PackName>
<PackPath>C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATmega_DFP/1.7.374/Atmel.ATmega_DFP.pdsc</PackPath>
<PackVersion>1.7.374</PackVersion>
<PresentInProject>true</PresentInProject>
<ReferenceConditionId>ATmega328PB</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>

View File

@@ -0,0 +1,231 @@
<?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>ATmega328PB</avrdevice>
<avrdeviceseries>none</avrdeviceseries>
<OutputType>Executable</OutputType>
<Language>C</Language>
<OutputFileName>$(MSBuildProjectName)</OutputFileName>
<OutputFileExtension>.elf</OutputFileExtension>
<OutputDirectory>$(MSBuildProjectDirectory)\$(Configuration)</OutputDirectory>
<AssemblyName>uDCCD_Controller</AssemblyName>
<Name>uDCCD_Controller</Name>
<RootNamespace>uDCCD_Controller</RootNamespace>
<ToolchainFlavour>Native</ToolchainFlavour>
<KeepTimersRunning>true</KeepTimersRunning>
<OverrideVtor>false</OverrideVtor>
<CacheFlash>true</CacheFlash>
<ProgFlashFromRam>true</ProgFlashFromRam>
<RamSnippetAddress>0x20000000</RamSnippetAddress>
<UncachedRange />
<preserveEEPROM>true</preserveEEPROM>
<OverrideVtorValue>exception_table</OverrideVtorValue>
<BootSegment>2</BootSegment>
<ResetRule>0</ResetRule>
<eraseonlaunchrule>0</eraseonlaunchrule>
<EraseKey />
<AsfFrameworkConfig>
<framework-data>
<options />
<configurations />
<files />
<documentation help="" />
<offline-documentation help="" />
<dependencies>
<content-extension eid="atmel.asf" uuidref="Atmel.ASF" version="3.42.0" />
</dependencies>
</framework-data>
</AsfFrameworkConfig>
<avrtool>com.atmel.avrdbg.tool.atmelice</avrtool>
<avrtoolserialnumber>J42700001490</avrtoolserialnumber>
<avrdeviceexpectedsignature>0x1E9516</avrdeviceexpectedsignature>
<com_atmel_avrdbg_tool_atmelice>
<ToolOptions>
<InterfaceProperties>
<IspClock>125000</IspClock>
</InterfaceProperties>
<InterfaceName>ISP</InterfaceName>
</ToolOptions>
<ToolType>com.atmel.avrdbg.tool.atmelice</ToolType>
<ToolNumber>J42700001490</ToolNumber>
<ToolName>Atmel-ICE</ToolName>
</com_atmel_avrdbg_tool_atmelice>
<avrtoolinterface>ISP</avrtoolinterface>
<avrtoolinterfaceclock>125000</avrtoolinterfaceclock>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
<ToolchainSettings>
<AvrGcc>
<avrgcc.common.Device>-mmcu=atmega328pb -B "%24(PackRepoDir)\atmel\ATmega_DFP\1.7.374\gcc\dev\atmega328pb"</avrgcc.common.Device>
<avrgcc.common.outputfiles.hex>True</avrgcc.common.outputfiles.hex>
<avrgcc.common.outputfiles.lss>True</avrgcc.common.outputfiles.lss>
<avrgcc.common.outputfiles.eep>True</avrgcc.common.outputfiles.eep>
<avrgcc.common.outputfiles.srec>True</avrgcc.common.outputfiles.srec>
<avrgcc.common.outputfiles.usersignatures>False</avrgcc.common.outputfiles.usersignatures>
<avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>True</avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>
<avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>True</avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>
<avrgcc.compiler.symbols.DefSymbols>
<ListValues>
<Value>NDEBUG</Value>
</ListValues>
</avrgcc.compiler.symbols.DefSymbols>
<avrgcc.compiler.directories.IncludePaths>
<ListValues>
<Value>%24(PackRepoDir)\atmel\ATmega_DFP\1.7.374\include\</Value>
</ListValues>
</avrgcc.compiler.directories.IncludePaths>
<avrgcc.compiler.optimization.level>Optimize for size (-Os)</avrgcc.compiler.optimization.level>
<avrgcc.compiler.optimization.PackStructureMembers>True</avrgcc.compiler.optimization.PackStructureMembers>
<avrgcc.compiler.optimization.AllocateBytesNeededForEnum>True</avrgcc.compiler.optimization.AllocateBytesNeededForEnum>
<avrgcc.compiler.warnings.AllWarnings>True</avrgcc.compiler.warnings.AllWarnings>
<avrgcc.linker.libraries.Libraries>
<ListValues>
<Value>libm</Value>
</ListValues>
</avrgcc.linker.libraries.Libraries>
<avrgcc.assembler.general.IncludePaths>
<ListValues>
<Value>%24(PackRepoDir)\atmel\ATmega_DFP\1.7.374\include\</Value>
</ListValues>
</avrgcc.assembler.general.IncludePaths>
</AvrGcc>
</ToolchainSettings>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
<ToolchainSettings>
<AvrGcc>
<avrgcc.common.Device>-mmcu=atmega328pb -B "%24(PackRepoDir)\atmel\ATmega_DFP\1.7.374\gcc\dev\atmega328pb"</avrgcc.common.Device>
<avrgcc.common.outputfiles.hex>True</avrgcc.common.outputfiles.hex>
<avrgcc.common.outputfiles.lss>True</avrgcc.common.outputfiles.lss>
<avrgcc.common.outputfiles.eep>True</avrgcc.common.outputfiles.eep>
<avrgcc.common.outputfiles.srec>True</avrgcc.common.outputfiles.srec>
<avrgcc.common.outputfiles.usersignatures>False</avrgcc.common.outputfiles.usersignatures>
<avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>True</avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>
<avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>True</avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>
<avrgcc.compiler.symbols.DefSymbols>
<ListValues>
<Value>DEBUG</Value>
</ListValues>
</avrgcc.compiler.symbols.DefSymbols>
<avrgcc.compiler.directories.IncludePaths>
<ListValues>
<Value>%24(PackRepoDir)\atmel\ATmega_DFP\1.7.374\include\</Value>
</ListValues>
</avrgcc.compiler.directories.IncludePaths>
<avrgcc.compiler.optimization.PackStructureMembers>True</avrgcc.compiler.optimization.PackStructureMembers>
<avrgcc.compiler.optimization.AllocateBytesNeededForEnum>True</avrgcc.compiler.optimization.AllocateBytesNeededForEnum>
<avrgcc.compiler.optimization.DebugLevel>Default (-g2)</avrgcc.compiler.optimization.DebugLevel>
<avrgcc.compiler.warnings.AllWarnings>True</avrgcc.compiler.warnings.AllWarnings>
<avrgcc.linker.libraries.Libraries>
<ListValues>
<Value>libm</Value>
</ListValues>
</avrgcc.linker.libraries.Libraries>
<avrgcc.assembler.general.IncludePaths>
<ListValues>
<Value>%24(PackRepoDir)\atmel\ATmega_DFP\1.7.374\include\</Value>
</ListValues>
</avrgcc.assembler.general.IncludePaths>
<avrgcc.assembler.debugging.DebugLevel>Default (-Wa,-g)</avrgcc.assembler.debugging.DebugLevel>
</AvrGcc>
</ToolchainSettings>
</PropertyGroup>
<ItemGroup>
<Compile Include="devices\analog.c">
<SubType>compile</SubType>
</Compile>
<Compile Include="devices\analog.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="devices\common\level.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="devices\config.c">
<SubType>compile</SubType>
</Compile>
<Compile Include="devices\config.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="devices\led_display.c">
<SubType>compile</SubType>
</Compile>
<Compile Include="devices\led_display.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="devices\filter_iir_lpf.c">
<SubType>compile</SubType>
</Compile>
<Compile Include="devices\filter_iir_lpf.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="devices\halfbridge.c">
<SubType>compile</SubType>
</Compile>
<Compile Include="devices\halfbridge.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="devices\hal\udccd_r7_hal.c">
<SubType>compile</SubType>
</Compile>
<Compile Include="devices\hal\udccd_hal.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="devices\inputs.c">
<SubType>compile</SubType>
</Compile>
<Compile Include="devices\inputs.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="devices\memory.c">
<SubType>compile</SubType>
</Compile>
<Compile Include="devices\memory.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="drivers\display.c">
<SubType>compile</SubType>
</Compile>
<Compile Include="drivers\display.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="drivers\output.c">
<SubType>compile</SubType>
</Compile>
<Compile Include="drivers\output.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="logic\coil.c">
<SubType>compile</SubType>
</Compile>
<Compile Include="logic\coil.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="logic\force.c">
<SubType>compile</SubType>
</Compile>
<Compile Include="logic\force.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="logic\settings.c">
<SubType>compile</SubType>
</Compile>
<Compile Include="logic\settings.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="main.c">
<SubType>compile</SubType>
</Compile>
</ItemGroup>
<ItemGroup>
<Folder Include="devices" />
<Folder Include="devices\hal" />
<Folder Include="devices\common" />
<Folder Include="drivers" />
<Folder Include="logic" />
</ItemGroup>
<Import Project="$(AVRSTUDIO_EXE_PATH)\\Vs\\Compiler.targets" />
</Project>

View File

@@ -287,7 +287,7 @@ OutputEnabled10_OutputMedium10=0
OutputDefault10=0 OutputDefault10=0
PageOptions10=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9 PageOptions10=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9
Configuration10_Name1=OutputConfigurationParameter1 Configuration10_Name1=OutputConfigurationParameter1
Configuration10_Item1=Record=Pcb3DPrintView|ResX=600|ResY=600|ViewX=29981830|ViewY=21653544|LookAtX=132874016|LookAtY=128937008|LookAtZ=0|UpX=0|UpY=1|UpZ=0|FOV=45|QuatX=0|QuatY=0|QuatZ=0|QuatW=1|Zoom=5.88356367120992E-5|UnitsPercent=True|UnitsDPI=True|LockResAspect=True|ViewConfigType=.config_3d|CustomCamera=True|ViewFromTop=True|ScreenWidth=1764|ScreenHeight=1274|ImageOutputType=1|ViewConfig=RECORD\3Board\2CFGALL.CONFIGURATIONKIND\33\2CFGALL.CONFIGURATIONDESC\3Enter%20description%20of%20new%20view%20configuration\2CFGALL.COMPONENTBODYREFPOINTCOLOR\316777215\2CFGALL.COMPONENTBODYSNAPPOINTCOLOR\316777215\2CFGALL.SHOWCOMPONENTSNAPMARKERS\3FALSE\2CFGALL.SHOWCOMPONENTSNAPREFERENCE\3FALSE\2CFGALL.SHOWCOMPONENTSNAPCUSTOM\3FALSE\2CFG3D.POSITIVETOPSOLDERMASK\3TRUE\2CFG3D.POSITIVEBOTTOMSOLDERMASK\3TRUE\2CFG3D.SHOWCOMPONENTBODIES\3FALSE\2CFG3D.SHOWCOMPONENTSTEPMODELS\3FALSE\2CFG3D.COMPONENTMODELPREFERENCE\30\2CFG3D.SHOWCOMPONENTAXES\3TRUE\2CFG3D.SHOWBOARDCORE\3TRUE\2CFG3D.SHOWBOARDPREPREG\3TRUE\2CFG3D.SHOWTOPSILKSCREEN\3TRUE\2CFG3D.SHOWBOTSILKSCREEN\3TRUE\2CFG3D.SHOWORIGINMARKER\3TRUE\2CFG3D.EYEDIST\32147483647\2CFG3D.SHOWCUTOUTS\3TRUE\2CFG3D.SHOWROUTETOOLPATH\3TRUE\2CFG3D.SHOWROOMS3D\3FALSE\2CFG3D.USESYSCOLORSFOR3D\3FALSE\2CFG3D.WORKSPACECOLOR\316777215\2CFG3D.BOARDCORECOLOR\34216160\2CFG3D.BOARDPREPREGCOLOR\30\2CFG3D.TOPSOLDERMASKCOLOR\35994299\2CFG3D.BOTSOLDERMASKCOLOR\35994299\2CFG3D.COPPERCOLOR\38315135\2CFG3D.TOPSILKSCREENCOLOR\316777215\2CFG3D.BOTSILKSCREENCOLOR\316777215\2CFG3D.WORKSPACELUMINANCEVARIATION\330\2CFG3D.WORKSPACEBEGINCOLOR\315238730\2CFG3D.WORKSPACEENDCOLOR\315238730\2CFG3D.WORKSPACECOLOROPACITY\31.000000\2CFG3D.BOARDCORECOLOROPACITY\30.900000\2CFG3D.BOARDPREPREGCOLOROPACITY\30.500000\2CFG3D.TOPSOLDERMASKCOLOROPACITY\30.900000\2CFG3D.BOTSOLDERMASKCOLOROPACITY\30.900000\2CFG3D.COPPERCOLOROPACITY\31.000000\2CFG3D.TOPSILKSCREENCOLOROPACITY\31.000000\2CFG3D.BOTSILKSCREENCOLOROPACITY\31.000000\2CFG3D.BOARDTHICKNESSSCALING\31.000000\2CFG3D.SHOWMECHANICALLAYERS\3FALSE\2CFG3D.MECHANICALLAYERSOPACITY\31.000000\2CFG3D.MECHCOVERLAYERUPDATED\3FALSE|DocumentPath=Z:\MicroRally\Electronics\uDCCD_Controller\Main board\Source\uDCCD_Controller.PcbDoc Configuration10_Item1=Record=Pcb3DPrintView|ResX=600|ResY=600|ViewX=29527560|ViewY=22794078|LookAtX=132874016|LookAtY=128937008|LookAtZ=0|UpX=0|UpY=1|UpZ=0|FOV=45|QuatX=0|QuatY=0|QuatZ=0|QuatW=1|Zoom=4.00981332033562E-5|UnitsPercent=True|UnitsDPI=True|LockResAspect=True|ViewConfigType=.config_3d|CustomCamera=True|ViewFromTop=True|ScreenWidth=1184|ScreenHeight=914|ImageOutputType=1|ViewConfig=RECORD\3Board\2CFGALL.CONFIGURATIONKIND\33\2CFGALL.CONFIGURATIONDESC\3Enter%20description%20of%20new%20view%20configuration\2CFGALL.COMPONENTBODYREFPOINTCOLOR\316777215\2CFGALL.COMPONENTBODYSNAPPOINTCOLOR\316777215\2CFGALL.SHOWCOMPONENTSNAPMARKERS\3FALSE\2CFGALL.SHOWCOMPONENTSNAPREFERENCE\3FALSE\2CFGALL.SHOWCOMPONENTSNAPCUSTOM\3FALSE\2CFG3D.POSITIVETOPSOLDERMASK\3TRUE\2CFG3D.POSITIVEBOTTOMSOLDERMASK\3TRUE\2CFG3D.SHOWCOMPONENTBODIES\3FALSE\2CFG3D.SHOWCOMPONENTSTEPMODELS\3FALSE\2CFG3D.COMPONENTMODELPREFERENCE\30\2CFG3D.SHOWCOMPONENTAXES\3TRUE\2CFG3D.SHOWBOARDCORE\3TRUE\2CFG3D.SHOWBOARDPREPREG\3TRUE\2CFG3D.SHOWTOPSILKSCREEN\3TRUE\2CFG3D.SHOWBOTSILKSCREEN\3TRUE\2CFG3D.SHOWORIGINMARKER\3TRUE\2CFG3D.EYEDIST\32147483647\2CFG3D.SHOWCUTOUTS\3TRUE\2CFG3D.SHOWROUTETOOLPATH\3TRUE\2CFG3D.SHOWROOMS3D\3FALSE\2CFG3D.USESYSCOLORSFOR3D\3FALSE\2CFG3D.WORKSPACECOLOR\316777215\2CFG3D.BOARDCORECOLOR\34216160\2CFG3D.BOARDPREPREGCOLOR\30\2CFG3D.TOPSOLDERMASKCOLOR\35994299\2CFG3D.BOTSOLDERMASKCOLOR\35994299\2CFG3D.COPPERCOLOR\38315135\2CFG3D.TOPSILKSCREENCOLOR\316777215\2CFG3D.BOTSILKSCREENCOLOR\316777215\2CFG3D.WORKSPACELUMINANCEVARIATION\330\2CFG3D.WORKSPACEBEGINCOLOR\315238730\2CFG3D.WORKSPACEENDCOLOR\315238730\2CFG3D.WORKSPACECOLOROPACITY\31.000000\2CFG3D.BOARDCORECOLOROPACITY\30.900000\2CFG3D.BOARDPREPREGCOLOROPACITY\30.500000\2CFG3D.TOPSOLDERMASKCOLOROPACITY\30.900000\2CFG3D.BOTSOLDERMASKCOLOROPACITY\30.900000\2CFG3D.COPPERCOLOROPACITY\31.000000\2CFG3D.TOPSILKSCREENCOLOROPACITY\31.000000\2CFG3D.BOTSILKSCREENCOLOROPACITY\31.000000\2CFG3D.BOARDTHICKNESSSCALING\31.000000\2CFG3D.SHOWMECHANICALLAYERS\3FALSE\2CFG3D.MECHANICALLAYERSOPACITY\31.000000\2CFG3D.MECHCOVERLAYERUPDATED\3FALSE|DocumentPath=D:\Microrally\uDCCD_Controller_HW\Main board\Source\uDCCD_Controller.PcbDoc
OutputType11=PCB 3D Print OutputType11=PCB 3D Print
OutputName11=BotTexture OutputName11=BotTexture
OutputCategory11=Documentation OutputCategory11=Documentation
@@ -307,7 +307,7 @@ OutputEnabled11_OutputMedium10=0
OutputDefault11=0 OutputDefault11=0
PageOptions11=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9 PageOptions11=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9
Configuration11_Name1=OutputConfigurationParameter1 Configuration11_Name1=OutputConfigurationParameter1
Configuration11_Item1=Record=Pcb3DPrintView|ResX=600|ResY=600|ViewX=29981830|ViewY=21653544|LookAtX=132874016|LookAtY=128937008|LookAtZ=0|UpX=0|UpY=1|UpZ=0|FOV=45|QuatX=0|QuatY=1|QuatZ=0|QuatW=0|Zoom=5.88356367120992E-5|UnitsPercent=True|UnitsDPI=True|LockResAspect=True|ViewConfigType=.config_3d|CustomCamera=True|ViewFromTop=False|ScreenWidth=1764|ScreenHeight=1274|ImageOutputType=1|ViewConfig=RECORD\3Board\2CFGALL.CONFIGURATIONKIND\33\2CFGALL.CONFIGURATIONDESC\3Enter%20description%20of%20new%20view%20configuration\2CFGALL.COMPONENTBODYREFPOINTCOLOR\316777215\2CFGALL.COMPONENTBODYSNAPPOINTCOLOR\316777215\2CFGALL.SHOWCOMPONENTSNAPMARKERS\3FALSE\2CFGALL.SHOWCOMPONENTSNAPREFERENCE\3FALSE\2CFGALL.SHOWCOMPONENTSNAPCUSTOM\3FALSE\2CFG3D.POSITIVETOPSOLDERMASK\3TRUE\2CFG3D.POSITIVEBOTTOMSOLDERMASK\3TRUE\2CFG3D.SHOWCOMPONENTBODIES\3FALSE\2CFG3D.SHOWCOMPONENTSTEPMODELS\3FALSE\2CFG3D.COMPONENTMODELPREFERENCE\30\2CFG3D.SHOWCOMPONENTAXES\3TRUE\2CFG3D.SHOWBOARDCORE\3TRUE\2CFG3D.SHOWBOARDPREPREG\3TRUE\2CFG3D.SHOWTOPSILKSCREEN\3TRUE\2CFG3D.SHOWBOTSILKSCREEN\3TRUE\2CFG3D.SHOWORIGINMARKER\3TRUE\2CFG3D.EYEDIST\32147483647\2CFG3D.SHOWCUTOUTS\3TRUE\2CFG3D.SHOWROUTETOOLPATH\3TRUE\2CFG3D.SHOWROOMS3D\3FALSE\2CFG3D.USESYSCOLORSFOR3D\3FALSE\2CFG3D.WORKSPACECOLOR\316777215\2CFG3D.BOARDCORECOLOR\34216160\2CFG3D.BOARDPREPREGCOLOR\30\2CFG3D.TOPSOLDERMASKCOLOR\35994299\2CFG3D.BOTSOLDERMASKCOLOR\35994299\2CFG3D.COPPERCOLOR\38315135\2CFG3D.TOPSILKSCREENCOLOR\316777215\2CFG3D.BOTSILKSCREENCOLOR\316777215\2CFG3D.WORKSPACELUMINANCEVARIATION\330\2CFG3D.WORKSPACEBEGINCOLOR\315238730\2CFG3D.WORKSPACEENDCOLOR\315238730\2CFG3D.WORKSPACECOLOROPACITY\31.000000\2CFG3D.BOARDCORECOLOROPACITY\30.900000\2CFG3D.BOARDPREPREGCOLOROPACITY\30.500000\2CFG3D.TOPSOLDERMASKCOLOROPACITY\30.900000\2CFG3D.BOTSOLDERMASKCOLOROPACITY\30.900000\2CFG3D.COPPERCOLOROPACITY\31.000000\2CFG3D.TOPSILKSCREENCOLOROPACITY\31.000000\2CFG3D.BOTSILKSCREENCOLOROPACITY\31.000000\2CFG3D.BOARDTHICKNESSSCALING\31.000000\2CFG3D.SHOWMECHANICALLAYERS\3FALSE\2CFG3D.MECHANICALLAYERSOPACITY\31.000000\2CFG3D.MECHCOVERLAYERUPDATED\3FALSE|DocumentPath=Z:\MicroRally\Electronics\uDCCD_Controller\Main board\Source\uDCCD_Controller.PcbDoc Configuration11_Item1=Record=Pcb3DPrintView|ResX=600|ResY=600|ViewX=29527560|ViewY=22794078|LookAtX=132874016|LookAtY=128937008|LookAtZ=0|UpX=0|UpY=1|UpZ=0|FOV=45|QuatX=0|QuatY=1|QuatZ=0|QuatW=0|Zoom=4.00981332033562E-5|UnitsPercent=True|UnitsDPI=True|LockResAspect=True|ViewConfigType=.config_3d|CustomCamera=True|ViewFromTop=False|ScreenWidth=1184|ScreenHeight=914|ImageOutputType=1|ViewConfig=RECORD\3Board\2CFGALL.CONFIGURATIONKIND\33\2CFGALL.CONFIGURATIONDESC\3Enter%20description%20of%20new%20view%20configuration\2CFGALL.COMPONENTBODYREFPOINTCOLOR\316777215\2CFGALL.COMPONENTBODYSNAPPOINTCOLOR\316777215\2CFGALL.SHOWCOMPONENTSNAPMARKERS\3FALSE\2CFGALL.SHOWCOMPONENTSNAPREFERENCE\3FALSE\2CFGALL.SHOWCOMPONENTSNAPCUSTOM\3FALSE\2CFG3D.POSITIVETOPSOLDERMASK\3TRUE\2CFG3D.POSITIVEBOTTOMSOLDERMASK\3TRUE\2CFG3D.SHOWCOMPONENTBODIES\3FALSE\2CFG3D.SHOWCOMPONENTSTEPMODELS\3FALSE\2CFG3D.COMPONENTMODELPREFERENCE\30\2CFG3D.SHOWCOMPONENTAXES\3TRUE\2CFG3D.SHOWBOARDCORE\3TRUE\2CFG3D.SHOWBOARDPREPREG\3TRUE\2CFG3D.SHOWTOPSILKSCREEN\3TRUE\2CFG3D.SHOWBOTSILKSCREEN\3TRUE\2CFG3D.SHOWORIGINMARKER\3TRUE\2CFG3D.EYEDIST\32147483647\2CFG3D.SHOWCUTOUTS\3TRUE\2CFG3D.SHOWROUTETOOLPATH\3TRUE\2CFG3D.SHOWROOMS3D\3FALSE\2CFG3D.USESYSCOLORSFOR3D\3FALSE\2CFG3D.WORKSPACECOLOR\316777215\2CFG3D.BOARDCORECOLOR\34216160\2CFG3D.BOARDPREPREGCOLOR\30\2CFG3D.TOPSOLDERMASKCOLOR\35994299\2CFG3D.BOTSOLDERMASKCOLOR\35994299\2CFG3D.COPPERCOLOR\38315135\2CFG3D.TOPSILKSCREENCOLOR\316777215\2CFG3D.BOTSILKSCREENCOLOR\316777215\2CFG3D.WORKSPACELUMINANCEVARIATION\330\2CFG3D.WORKSPACEBEGINCOLOR\315238730\2CFG3D.WORKSPACEENDCOLOR\315238730\2CFG3D.WORKSPACECOLOROPACITY\31.000000\2CFG3D.BOARDCORECOLOROPACITY\30.900000\2CFG3D.BOARDPREPREGCOLOROPACITY\30.500000\2CFG3D.TOPSOLDERMASKCOLOROPACITY\30.900000\2CFG3D.BOTSOLDERMASKCOLOROPACITY\30.900000\2CFG3D.COPPERCOLOROPACITY\31.000000\2CFG3D.TOPSILKSCREENCOLOROPACITY\31.000000\2CFG3D.BOTSILKSCREENCOLOROPACITY\31.000000\2CFG3D.BOARDTHICKNESSSCALING\31.000000\2CFG3D.SHOWMECHANICALLAYERS\3FALSE\2CFG3D.MECHANICALLAYERSOPACITY\31.000000\2CFG3D.MECHCOVERLAYERUPDATED\3FALSE|DocumentPath=D:\Microrally\uDCCD_Controller_HW\Main board\Source\uDCCD_Controller.PcbDoc
OutputType12=PCB 3D Print OutputType12=PCB 3D Print
OutputName12=PCB Picture Top OutputName12=PCB Picture Top
OutputCategory12=Documentation OutputCategory12=Documentation
@@ -325,9 +325,9 @@ OutputEnabled12_OutputMedium8=0
OutputEnabled12_OutputMedium9=0 OutputEnabled12_OutputMedium9=0
OutputEnabled12_OutputMedium10=0 OutputEnabled12_OutputMedium10=0
OutputDefault12=0 OutputDefault12=0
PageOptions12=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.99|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9 PageOptions12=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=2.32|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9
Configuration12_Name1=OutputConfigurationParameter1 Configuration12_Name1=OutputConfigurationParameter1
Configuration12_Item1=Record=Pcb3DPrintView|ResX=600|ResY=600|ViewX=46249296|ViewY=33402268|LookAtX=133598160|LookAtY=124806528|LookAtZ=-18408|UpX=0|UpY=1|UpZ=0|FOV=45|QuatX=0|QuatY=0|QuatZ=0|QuatW=1|Zoom=3.81411216523329E-5|UnitsPercent=True|UnitsDPI=True|LockResAspect=True|ViewConfigType=.config_3d|CustomCamera=True|ViewFromTop=True|ScreenWidth=1764|ScreenHeight=1274|ImageOutputType=1|ViewConfig=RECORD\3Board\2CFGALL.CONFIGURATIONKIND\33\2CFGALL.CONFIGURATIONDESC\3Enter%20description%20of%20new%20view%20configuration\2CFGALL.COMPONENTBODYREFPOINTCOLOR\316777215\2CFGALL.COMPONENTBODYSNAPPOINTCOLOR\316777215\2CFGALL.SHOWCOMPONENTSNAPMARKERS\3FALSE\2CFGALL.SHOWCOMPONENTSNAPREFERENCE\3FALSE\2CFGALL.SHOWCOMPONENTSNAPCUSTOM\3FALSE\2CFG3D.POSITIVETOPSOLDERMASK\3TRUE\2CFG3D.POSITIVEBOTTOMSOLDERMASK\3TRUE\2CFG3D.SHOWCOMPONENTBODIES\3TRUE\2CFG3D.SHOWCOMPONENTSTEPMODELS\3TRUE\2CFG3D.COMPONENTMODELPREFERENCE\30\2CFG3D.SHOWCOMPONENTAXES\3TRUE\2CFG3D.SHOWBOARDCORE\3TRUE\2CFG3D.SHOWBOARDPREPREG\3TRUE\2CFG3D.SHOWTOPSILKSCREEN\3TRUE\2CFG3D.SHOWBOTSILKSCREEN\3TRUE\2CFG3D.SHOWORIGINMARKER\3TRUE\2CFG3D.EYEDIST\32147483647\2CFG3D.SHOWCUTOUTS\3TRUE\2CFG3D.SHOWROUTETOOLPATH\3TRUE\2CFG3D.SHOWROOMS3D\3FALSE\2CFG3D.USESYSCOLORSFOR3D\3FALSE\2CFG3D.WORKSPACECOLOR\316777215\2CFG3D.BOARDCORECOLOR\34216160\2CFG3D.BOARDPREPREGCOLOR\30\2CFG3D.TOPSOLDERMASKCOLOR\35994299\2CFG3D.BOTSOLDERMASKCOLOR\35994299\2CFG3D.COPPERCOLOR\38315135\2CFG3D.TOPSILKSCREENCOLOR\316777215\2CFG3D.BOTSILKSCREENCOLOR\316777215\2CFG3D.WORKSPACELUMINANCEVARIATION\330\2CFG3D.WORKSPACEBEGINCOLOR\316777215\2CFG3D.WORKSPACEENDCOLOR\315724527\2CFG3D.WORKSPACECOLOROPACITY\31.000000\2CFG3D.BOARDCORECOLOROPACITY\30.900000\2CFG3D.BOARDPREPREGCOLOROPACITY\30.500000\2CFG3D.TOPSOLDERMASKCOLOROPACITY\30.900000\2CFG3D.BOTSOLDERMASKCOLOROPACITY\30.900000\2CFG3D.COPPERCOLOROPACITY\31.000000\2CFG3D.TOPSILKSCREENCOLOROPACITY\31.000000\2CFG3D.BOTSILKSCREENCOLOROPACITY\31.000000\2CFG3D.BOARDTHICKNESSSCALING\31.000000\2CFG3D.SHOWMECHANICALLAYERS\3FALSE\2CFG3D.MECHANICALLAYERSOPACITY\31.000000\2CFG3D.MECHCOVERLAYERUPDATED\3FALSE|DocumentPath=Z:\MicroRally\Electronics\uDCCD_Controller\Main board\Source\uDCCD_Controller.PcbDoc Configuration12_Item1=Record=Pcb3DPrintView|ResX=600|ResY=600|ViewX=46114880|ViewY=35598816|LookAtX=133146664|LookAtY=125013736|LookAtZ=-18408|UpX=0|UpY=1|UpZ=0|FOV=45|QuatX=0|QuatY=0|QuatZ=0|QuatW=1|Zoom=2.56750105372724E-5|UnitsPercent=True|UnitsDPI=True|LockResAspect=True|ViewConfigType=.config_3d|CustomCamera=True|ViewFromTop=True|ScreenWidth=1184|ScreenHeight=914|ImageOutputType=1|ViewConfig=RECORD\3Board\2CFGALL.CONFIGURATIONKIND\33\2CFGALL.CONFIGURATIONDESC\3Enter%20description%20of%20new%20view%20configuration\2CFGALL.COMPONENTBODYREFPOINTCOLOR\316777215\2CFGALL.COMPONENTBODYSNAPPOINTCOLOR\316777215\2CFGALL.SHOWCOMPONENTSNAPMARKERS\3FALSE\2CFGALL.SHOWCOMPONENTSNAPREFERENCE\3FALSE\2CFGALL.SHOWCOMPONENTSNAPCUSTOM\3FALSE\2CFG3D.POSITIVETOPSOLDERMASK\3TRUE\2CFG3D.POSITIVEBOTTOMSOLDERMASK\3TRUE\2CFG3D.SHOWCOMPONENTBODIES\3TRUE\2CFG3D.SHOWCOMPONENTSTEPMODELS\3TRUE\2CFG3D.COMPONENTMODELPREFERENCE\30\2CFG3D.SHOWCOMPONENTAXES\3TRUE\2CFG3D.SHOWBOARDCORE\3TRUE\2CFG3D.SHOWBOARDPREPREG\3TRUE\2CFG3D.SHOWTOPSILKSCREEN\3TRUE\2CFG3D.SHOWBOTSILKSCREEN\3TRUE\2CFG3D.SHOWORIGINMARKER\3TRUE\2CFG3D.EYEDIST\32147483647\2CFG3D.SHOWCUTOUTS\3TRUE\2CFG3D.SHOWROUTETOOLPATH\3TRUE\2CFG3D.SHOWROOMS3D\3FALSE\2CFG3D.USESYSCOLORSFOR3D\3FALSE\2CFG3D.WORKSPACECOLOR\316777215\2CFG3D.BOARDCORECOLOR\34216160\2CFG3D.BOARDPREPREGCOLOR\30\2CFG3D.TOPSOLDERMASKCOLOR\35994299\2CFG3D.BOTSOLDERMASKCOLOR\35994299\2CFG3D.COPPERCOLOR\38315135\2CFG3D.TOPSILKSCREENCOLOR\316777215\2CFG3D.BOTSILKSCREENCOLOR\316777215\2CFG3D.WORKSPACELUMINANCEVARIATION\330\2CFG3D.WORKSPACEBEGINCOLOR\316777215\2CFG3D.WORKSPACEENDCOLOR\315724527\2CFG3D.WORKSPACECOLOROPACITY\31.000000\2CFG3D.BOARDCORECOLOROPACITY\30.900000\2CFG3D.BOARDPREPREGCOLOROPACITY\30.500000\2CFG3D.TOPSOLDERMASKCOLOROPACITY\30.900000\2CFG3D.BOTSOLDERMASKCOLOROPACITY\30.900000\2CFG3D.COPPERCOLOROPACITY\31.000000\2CFG3D.TOPSILKSCREENCOLOROPACITY\31.000000\2CFG3D.BOTSILKSCREENCOLOROPACITY\31.000000\2CFG3D.BOARDTHICKNESSSCALING\31.000000\2CFG3D.SHOWMECHANICALLAYERS\3FALSE\2CFG3D.MECHANICALLAYERSOPACITY\31.000000\2CFG3D.MECHCOVERLAYERUPDATED\3FALSE|DocumentPath=D:\Microrally\uDCCD_Controller_HW\Main board\Source\uDCCD_Controller.PcbDoc
OutputType13=PCB 3D Print OutputType13=PCB 3D Print
OutputName13=PCB Picture Bot OutputName13=PCB Picture Bot
OutputCategory13=Documentation OutputCategory13=Documentation
@@ -345,9 +345,9 @@ OutputEnabled13_OutputMedium8=0
OutputEnabled13_OutputMedium9=0 OutputEnabled13_OutputMedium9=0
OutputEnabled13_OutputMedium10=0 OutputEnabled13_OutputMedium10=0
OutputDefault13=0 OutputDefault13=0
PageOptions13=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.99|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9 PageOptions13=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=2.32|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9
Configuration13_Name1=OutputConfigurationParameter1 Configuration13_Name1=OutputConfigurationParameter1
Configuration13_Item1=Record=Pcb3DPrintView|ResX=600|ResY=600|ViewX=46249296|ViewY=33402268|LookAtX=133598160|LookAtY=124806528|LookAtZ=18408|UpX=0|UpY=1|UpZ=0|FOV=45|QuatX=0|QuatY=1|QuatZ=0|QuatW=0|Zoom=3.81411216523329E-5|UnitsPercent=True|UnitsDPI=True|LockResAspect=True|ViewConfigType=.config_3d|CustomCamera=True|ViewFromTop=False|ScreenWidth=1764|ScreenHeight=1274|ImageOutputType=1|ViewConfig=RECORD\3Board\2CFGALL.CONFIGURATIONKIND\33\2CFGALL.CONFIGURATIONDESC\3Enter%20description%20of%20new%20view%20configuration\2CFGALL.COMPONENTBODYREFPOINTCOLOR\316777215\2CFGALL.COMPONENTBODYSNAPPOINTCOLOR\316777215\2CFGALL.SHOWCOMPONENTSNAPMARKERS\3FALSE\2CFGALL.SHOWCOMPONENTSNAPREFERENCE\3FALSE\2CFGALL.SHOWCOMPONENTSNAPCUSTOM\3FALSE\2CFG3D.POSITIVETOPSOLDERMASK\3TRUE\2CFG3D.POSITIVEBOTTOMSOLDERMASK\3TRUE\2CFG3D.SHOWCOMPONENTBODIES\3TRUE\2CFG3D.SHOWCOMPONENTSTEPMODELS\3TRUE\2CFG3D.COMPONENTMODELPREFERENCE\30\2CFG3D.SHOWCOMPONENTAXES\3TRUE\2CFG3D.SHOWBOARDCORE\3TRUE\2CFG3D.SHOWBOARDPREPREG\3TRUE\2CFG3D.SHOWTOPSILKSCREEN\3TRUE\2CFG3D.SHOWBOTSILKSCREEN\3TRUE\2CFG3D.SHOWORIGINMARKER\3TRUE\2CFG3D.EYEDIST\32147483647\2CFG3D.SHOWCUTOUTS\3TRUE\2CFG3D.SHOWROUTETOOLPATH\3TRUE\2CFG3D.SHOWROOMS3D\3FALSE\2CFG3D.USESYSCOLORSFOR3D\3FALSE\2CFG3D.WORKSPACECOLOR\316777215\2CFG3D.BOARDCORECOLOR\34216160\2CFG3D.BOARDPREPREGCOLOR\30\2CFG3D.TOPSOLDERMASKCOLOR\35994299\2CFG3D.BOTSOLDERMASKCOLOR\35994299\2CFG3D.COPPERCOLOR\38315135\2CFG3D.TOPSILKSCREENCOLOR\316777215\2CFG3D.BOTSILKSCREENCOLOR\316777215\2CFG3D.WORKSPACELUMINANCEVARIATION\330\2CFG3D.WORKSPACEBEGINCOLOR\316777215\2CFG3D.WORKSPACEENDCOLOR\315724527\2CFG3D.WORKSPACECOLOROPACITY\31.000000\2CFG3D.BOARDCORECOLOROPACITY\30.900000\2CFG3D.BOARDPREPREGCOLOROPACITY\30.500000\2CFG3D.TOPSOLDERMASKCOLOROPACITY\30.900000\2CFG3D.BOTSOLDERMASKCOLOROPACITY\30.900000\2CFG3D.COPPERCOLOROPACITY\31.000000\2CFG3D.TOPSILKSCREENCOLOROPACITY\31.000000\2CFG3D.BOTSILKSCREENCOLOROPACITY\31.000000\2CFG3D.BOARDTHICKNESSSCALING\31.000000\2CFG3D.SHOWMECHANICALLAYERS\3FALSE\2CFG3D.MECHANICALLAYERSOPACITY\31.000000\2CFG3D.MECHCOVERLAYERUPDATED\3FALSE|DocumentPath=Z:\MicroRally\Electronics\uDCCD_Controller\Main board\Source\uDCCD_Controller.PcbDoc Configuration13_Item1=Record=Pcb3DPrintView|ResX=600|ResY=600|ViewX=46114880|ViewY=35598816|LookAtX=132601368|LookAtY=125013736|LookAtZ=646303|UpX=0|UpY=1|UpZ=0|FOV=45|QuatX=0|QuatY=1|QuatZ=0|QuatW=0|Zoom=2.56750105372724E-5|UnitsPercent=True|UnitsDPI=True|LockResAspect=True|ViewConfigType=.config_3d|CustomCamera=True|ViewFromTop=False|ScreenWidth=1184|ScreenHeight=914|ImageOutputType=1|ViewConfig=RECORD\3Board\2CFGALL.CONFIGURATIONKIND\33\2CFGALL.CONFIGURATIONDESC\3Enter%20description%20of%20new%20view%20configuration\2CFGALL.COMPONENTBODYREFPOINTCOLOR\316777215\2CFGALL.COMPONENTBODYSNAPPOINTCOLOR\316777215\2CFGALL.SHOWCOMPONENTSNAPMARKERS\3FALSE\2CFGALL.SHOWCOMPONENTSNAPREFERENCE\3FALSE\2CFGALL.SHOWCOMPONENTSNAPCUSTOM\3FALSE\2CFG3D.POSITIVETOPSOLDERMASK\3TRUE\2CFG3D.POSITIVEBOTTOMSOLDERMASK\3TRUE\2CFG3D.SHOWCOMPONENTBODIES\3TRUE\2CFG3D.SHOWCOMPONENTSTEPMODELS\3TRUE\2CFG3D.COMPONENTMODELPREFERENCE\30\2CFG3D.SHOWCOMPONENTAXES\3TRUE\2CFG3D.SHOWBOARDCORE\3TRUE\2CFG3D.SHOWBOARDPREPREG\3TRUE\2CFG3D.SHOWTOPSILKSCREEN\3TRUE\2CFG3D.SHOWBOTSILKSCREEN\3TRUE\2CFG3D.SHOWORIGINMARKER\3TRUE\2CFG3D.EYEDIST\32147483647\2CFG3D.SHOWCUTOUTS\3TRUE\2CFG3D.SHOWROUTETOOLPATH\3TRUE\2CFG3D.SHOWROOMS3D\3FALSE\2CFG3D.USESYSCOLORSFOR3D\3FALSE\2CFG3D.WORKSPACECOLOR\316777215\2CFG3D.BOARDCORECOLOR\34216160\2CFG3D.BOARDPREPREGCOLOR\30\2CFG3D.TOPSOLDERMASKCOLOR\35994299\2CFG3D.BOTSOLDERMASKCOLOR\35994299\2CFG3D.COPPERCOLOR\38315135\2CFG3D.TOPSILKSCREENCOLOR\316777215\2CFG3D.BOTSILKSCREENCOLOR\316777215\2CFG3D.WORKSPACELUMINANCEVARIATION\330\2CFG3D.WORKSPACEBEGINCOLOR\316777215\2CFG3D.WORKSPACEENDCOLOR\315724527\2CFG3D.WORKSPACECOLOROPACITY\31.000000\2CFG3D.BOARDCORECOLOROPACITY\30.900000\2CFG3D.BOARDPREPREGCOLOROPACITY\30.500000\2CFG3D.TOPSOLDERMASKCOLOROPACITY\30.900000\2CFG3D.BOTSOLDERMASKCOLOROPACITY\30.900000\2CFG3D.COPPERCOLOROPACITY\31.000000\2CFG3D.TOPSILKSCREENCOLOROPACITY\31.000000\2CFG3D.BOTSILKSCREENCOLOROPACITY\31.000000\2CFG3D.BOARDTHICKNESSSCALING\31.000000\2CFG3D.SHOWMECHANICALLAYERS\3FALSE\2CFG3D.MECHANICALLAYERSOPACITY\31.000000\2CFG3D.MECHCOVERLAYERUPDATED\3FALSE|DocumentPath=D:\Microrally\uDCCD_Controller_HW\Main board\Source\uDCCD_Controller.PcbDoc
OutputType14=PCB 3D Print OutputType14=PCB 3D Print
OutputName14=PCB Picture 1 OutputName14=PCB Picture 1
OutputCategory14=Documentation OutputCategory14=Documentation
@@ -365,9 +365,9 @@ OutputEnabled14_OutputMedium8=0
OutputEnabled14_OutputMedium9=0 OutputEnabled14_OutputMedium9=0
OutputEnabled14_OutputMedium10=0 OutputEnabled14_OutputMedium10=0
OutputDefault14=0 OutputDefault14=0
PageOptions14=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.62|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9 PageOptions14=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.75|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9
Configuration14_Name1=OutputConfigurationParameter1 Configuration14_Name1=OutputConfigurationParameter1
Configuration14_Item1=Record=Pcb3DPrintView|ResX=600|ResY=600|ViewX=69744264|ViewY=50370856|LookAtX=133328896|LookAtY=127375536|LookAtZ=-18406.26171875|UpX=-0.420631378889084|UpY=-0.648587167263031|UpZ=-0.634353160858154|FOV=45|QuatX=-0.0764413699507713|QuatY=-0.328605562448502|QuatZ=0.904682457447052|QuatW=0.260240256786346|Zoom=3.12942035292045E-5|UnitsPercent=True|UnitsDPI=True|LockResAspect=True|ViewConfigType=.config_3d|CustomCamera=True|ViewFromTop=False|ScreenWidth=1764|ScreenHeight=1274|ImageOutputType=1|ViewConfig=RECORD\3Board\2CFGALL.CONFIGURATIONKIND\33\2CFGALL.CONFIGURATIONDESC\3Enter%20description%20of%20new%20view%20configuration\2CFGALL.COMPONENTBODYREFPOINTCOLOR\316777215\2CFGALL.COMPONENTBODYSNAPPOINTCOLOR\316777215\2CFGALL.SHOWCOMPONENTSNAPMARKERS\3FALSE\2CFGALL.SHOWCOMPONENTSNAPREFERENCE\3FALSE\2CFGALL.SHOWCOMPONENTSNAPCUSTOM\3FALSE\2CFG3D.POSITIVETOPSOLDERMASK\3TRUE\2CFG3D.POSITIVEBOTTOMSOLDERMASK\3TRUE\2CFG3D.SHOWCOMPONENTBODIES\3TRUE\2CFG3D.SHOWCOMPONENTSTEPMODELS\3TRUE\2CFG3D.COMPONENTMODELPREFERENCE\30\2CFG3D.SHOWCOMPONENTAXES\3TRUE\2CFG3D.SHOWBOARDCORE\3TRUE\2CFG3D.SHOWBOARDPREPREG\3TRUE\2CFG3D.SHOWTOPSILKSCREEN\3TRUE\2CFG3D.SHOWBOTSILKSCREEN\3TRUE\2CFG3D.SHOWORIGINMARKER\3TRUE\2CFG3D.EYEDIST\32000\2CFG3D.SHOWCUTOUTS\3TRUE\2CFG3D.SHOWROUTETOOLPATH\3TRUE\2CFG3D.SHOWROOMS3D\3FALSE\2CFG3D.USESYSCOLORSFOR3D\3FALSE\2CFG3D.WORKSPACECOLOR\316777215\2CFG3D.BOARDCORECOLOR\34216160\2CFG3D.BOARDPREPREGCOLOR\30\2CFG3D.TOPSOLDERMASKCOLOR\35994299\2CFG3D.BOTSOLDERMASKCOLOR\35994299\2CFG3D.COPPERCOLOR\38315135\2CFG3D.TOPSILKSCREENCOLOR\316777215\2CFG3D.BOTSILKSCREENCOLOR\316777215\2CFG3D.WORKSPACELUMINANCEVARIATION\330\2CFG3D.WORKSPACEBEGINCOLOR\316777215\2CFG3D.WORKSPACEENDCOLOR\315724527\2CFG3D.WORKSPACECOLOROPACITY\31.000000\2CFG3D.BOARDCORECOLOROPACITY\30.900000\2CFG3D.BOARDPREPREGCOLOROPACITY\30.500000\2CFG3D.TOPSOLDERMASKCOLOROPACITY\30.900000\2CFG3D.BOTSOLDERMASKCOLOROPACITY\30.900000\2CFG3D.COPPERCOLOROPACITY\31.000000\2CFG3D.TOPSILKSCREENCOLOROPACITY\31.000000\2CFG3D.BOTSILKSCREENCOLOROPACITY\31.000000\2CFG3D.BOARDTHICKNESSSCALING\31.000000\2CFG3D.SHOWMECHANICALLAYERS\3FALSE\2CFG3D.MECHANICALLAYERSOPACITY\31.000000\2CFG3D.MECHCOVERLAYERUPDATED\3FALSE|DocumentPath=Z:\MicroRally\Electronics\uDCCD_Controller\Main board\Source\uDCCD_Controller.PcbDoc Configuration14_Item1=Record=Pcb3DPrintView|ResX=600|ResY=600|ViewX=61261620|ViewY=47291488|LookAtX=133454520|LookAtY=126706752|LookAtZ=-18405.337890625|UpX=-0.420631378889084|UpY=-0.648587167263031|UpZ=-0.634353160858154|FOV=45|QuatX=-0.0764409825205803|QuatY=-0.328605175018311|QuatZ=0.904682576656342|QuatW=0.260240107774734|Zoom=1.93269459719063E-5|UnitsPercent=True|UnitsDPI=True|LockResAspect=True|ViewConfigType=.config_3d|CustomCamera=True|ViewFromTop=False|ScreenWidth=1184|ScreenHeight=914|ImageOutputType=1|ViewConfig=RECORD\3Board\2CFGALL.CONFIGURATIONKIND\33\2CFGALL.CONFIGURATIONDESC\3Enter%20description%20of%20new%20view%20configuration\2CFGALL.COMPONENTBODYREFPOINTCOLOR\316777215\2CFGALL.COMPONENTBODYSNAPPOINTCOLOR\316777215\2CFGALL.SHOWCOMPONENTSNAPMARKERS\3FALSE\2CFGALL.SHOWCOMPONENTSNAPREFERENCE\3FALSE\2CFGALL.SHOWCOMPONENTSNAPCUSTOM\3FALSE\2CFG3D.POSITIVETOPSOLDERMASK\3TRUE\2CFG3D.POSITIVEBOTTOMSOLDERMASK\3TRUE\2CFG3D.SHOWCOMPONENTBODIES\3TRUE\2CFG3D.SHOWCOMPONENTSTEPMODELS\3TRUE\2CFG3D.COMPONENTMODELPREFERENCE\30\2CFG3D.SHOWCOMPONENTAXES\3TRUE\2CFG3D.SHOWBOARDCORE\3TRUE\2CFG3D.SHOWBOARDPREPREG\3TRUE\2CFG3D.SHOWTOPSILKSCREEN\3TRUE\2CFG3D.SHOWBOTSILKSCREEN\3TRUE\2CFG3D.SHOWORIGINMARKER\3TRUE\2CFG3D.EYEDIST\32000\2CFG3D.SHOWCUTOUTS\3TRUE\2CFG3D.SHOWROUTETOOLPATH\3TRUE\2CFG3D.SHOWROOMS3D\3FALSE\2CFG3D.USESYSCOLORSFOR3D\3FALSE\2CFG3D.WORKSPACECOLOR\316777215\2CFG3D.BOARDCORECOLOR\34216160\2CFG3D.BOARDPREPREGCOLOR\30\2CFG3D.TOPSOLDERMASKCOLOR\35994299\2CFG3D.BOTSOLDERMASKCOLOR\35994299\2CFG3D.COPPERCOLOR\38315135\2CFG3D.TOPSILKSCREENCOLOR\316777215\2CFG3D.BOTSILKSCREENCOLOR\316777215\2CFG3D.WORKSPACELUMINANCEVARIATION\330\2CFG3D.WORKSPACEBEGINCOLOR\316777215\2CFG3D.WORKSPACEENDCOLOR\315724527\2CFG3D.WORKSPACECOLOROPACITY\31.000000\2CFG3D.BOARDCORECOLOROPACITY\30.900000\2CFG3D.BOARDPREPREGCOLOROPACITY\30.500000\2CFG3D.TOPSOLDERMASKCOLOROPACITY\30.900000\2CFG3D.BOTSOLDERMASKCOLOROPACITY\30.900000\2CFG3D.COPPERCOLOROPACITY\31.000000\2CFG3D.TOPSILKSCREENCOLOROPACITY\31.000000\2CFG3D.BOTSILKSCREENCOLOROPACITY\31.000000\2CFG3D.BOARDTHICKNESSSCALING\31.000000\2CFG3D.SHOWMECHANICALLAYERS\3FALSE\2CFG3D.MECHANICALLAYERSOPACITY\31.000000\2CFG3D.MECHCOVERLAYERUPDATED\3FALSE|DocumentPath=D:\Microrally\uDCCD_Controller_HW\Main board\Source\uDCCD_Controller.PcbDoc
OutputType15=PCB 3D Print OutputType15=PCB 3D Print
OutputName15=PCB Picture 2 OutputName15=PCB Picture 2
OutputCategory15=Documentation OutputCategory15=Documentation
@@ -385,9 +385,9 @@ OutputEnabled15_OutputMedium8=0
OutputEnabled15_OutputMedium9=0 OutputEnabled15_OutputMedium9=0
OutputEnabled15_OutputMedium10=0 OutputEnabled15_OutputMedium10=0
OutputDefault15=0 OutputDefault15=0
PageOptions15=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.66|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9 PageOptions15=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.92|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9
Configuration15_Name1=OutputConfigurationParameter1 Configuration15_Name1=OutputConfigurationParameter1
Configuration15_Item1=Record=Pcb3DPrintView|ResX=600|ResY=600|ViewX=56316332|ViewY=40672908|LookAtX=130628320|LookAtY=123914320|LookAtZ=-18406.16796875|UpX=0.50720202922821|UpY=0.461718440055847|UpZ=-0.727710068225861|FOV=45|QuatX=-0.368430107831955|QuatY=0.146614283323288|QuatZ=-0.365239500999451|QuatW=0.842237234115601|Zoom=3.27886040318443E-5|UnitsPercent=True|UnitsDPI=True|LockResAspect=True|ViewConfigType=.config_3d|CustomCamera=True|ViewFromTop=False|ScreenWidth=1764|ScreenHeight=1274|ImageOutputType=1|ViewConfig=RECORD\3Board\2CFGALL.CONFIGURATIONKIND\33\2CFGALL.CONFIGURATIONDESC\3Enter%20description%20of%20new%20view%20configuration\2CFGALL.COMPONENTBODYREFPOINTCOLOR\316777215\2CFGALL.COMPONENTBODYSNAPPOINTCOLOR\316777215\2CFGALL.SHOWCOMPONENTSNAPMARKERS\3FALSE\2CFGALL.SHOWCOMPONENTSNAPREFERENCE\3FALSE\2CFGALL.SHOWCOMPONENTSNAPCUSTOM\3FALSE\2CFG3D.POSITIVETOPSOLDERMASK\3TRUE\2CFG3D.POSITIVEBOTTOMSOLDERMASK\3TRUE\2CFG3D.SHOWCOMPONENTBODIES\3TRUE\2CFG3D.SHOWCOMPONENTSTEPMODELS\3TRUE\2CFG3D.COMPONENTMODELPREFERENCE\30\2CFG3D.SHOWCOMPONENTAXES\3TRUE\2CFG3D.SHOWBOARDCORE\3TRUE\2CFG3D.SHOWBOARDPREPREG\3TRUE\2CFG3D.SHOWTOPSILKSCREEN\3TRUE\2CFG3D.SHOWBOTSILKSCREEN\3TRUE\2CFG3D.SHOWORIGINMARKER\3TRUE\2CFG3D.EYEDIST\32000\2CFG3D.SHOWCUTOUTS\3TRUE\2CFG3D.SHOWROUTETOOLPATH\3TRUE\2CFG3D.SHOWROOMS3D\3FALSE\2CFG3D.USESYSCOLORSFOR3D\3FALSE\2CFG3D.WORKSPACECOLOR\316777215\2CFG3D.BOARDCORECOLOR\34216160\2CFG3D.BOARDPREPREGCOLOR\30\2CFG3D.TOPSOLDERMASKCOLOR\35994299\2CFG3D.BOTSOLDERMASKCOLOR\35994299\2CFG3D.COPPERCOLOR\38315135\2CFG3D.TOPSILKSCREENCOLOR\316777215\2CFG3D.BOTSILKSCREENCOLOR\316777215\2CFG3D.WORKSPACELUMINANCEVARIATION\330\2CFG3D.WORKSPACEBEGINCOLOR\316777215\2CFG3D.WORKSPACEENDCOLOR\315724527\2CFG3D.WORKSPACECOLOROPACITY\31.000000\2CFG3D.BOARDCORECOLOROPACITY\30.900000\2CFG3D.BOARDPREPREGCOLOROPACITY\30.500000\2CFG3D.TOPSOLDERMASKCOLOROPACITY\30.900000\2CFG3D.BOTSOLDERMASKCOLOROPACITY\30.900000\2CFG3D.COPPERCOLOROPACITY\31.000000\2CFG3D.TOPSILKSCREENCOLOROPACITY\31.000000\2CFG3D.BOTSILKSCREENCOLOROPACITY\31.000000\2CFG3D.BOARDTHICKNESSSCALING\31.000000\2CFG3D.SHOWMECHANICALLAYERS\3FALSE\2CFG3D.MECHANICALLAYERSOPACITY\31.000000\2CFG3D.MECHCOVERLAYERUPDATED\3FALSE|DocumentPath=Z:\MicroRally\Electronics\uDCCD_Controller\Main board\Source\uDCCD_Controller.PcbDoc Configuration15_Item1=Record=Pcb3DPrintView|ResX=600|ResY=600|ViewX=55774212|ViewY=43055432|LookAtX=130913112|LookAtY=123099560|LookAtZ=-18406.123046875|UpX=0.50720202922821|UpY=0.461718440055847|UpZ=-0.727710068225861|FOV=45|QuatX=-0.368430495262146|QuatY=0.146614402532578|QuatZ=-0.365239381790161|QuatW=0.842237174510956|Zoom=2.12284489663411E-5|UnitsPercent=True|UnitsDPI=True|LockResAspect=True|ViewConfigType=.config_3d|CustomCamera=True|ViewFromTop=False|ScreenWidth=1184|ScreenHeight=914|ImageOutputType=1|ViewConfig=RECORD\3Board\2CFGALL.CONFIGURATIONKIND\33\2CFGALL.CONFIGURATIONDESC\3Enter%20description%20of%20new%20view%20configuration\2CFGALL.COMPONENTBODYREFPOINTCOLOR\316777215\2CFGALL.COMPONENTBODYSNAPPOINTCOLOR\316777215\2CFGALL.SHOWCOMPONENTSNAPMARKERS\3FALSE\2CFGALL.SHOWCOMPONENTSNAPREFERENCE\3FALSE\2CFGALL.SHOWCOMPONENTSNAPCUSTOM\3FALSE\2CFG3D.POSITIVETOPSOLDERMASK\3TRUE\2CFG3D.POSITIVEBOTTOMSOLDERMASK\3TRUE\2CFG3D.SHOWCOMPONENTBODIES\3TRUE\2CFG3D.SHOWCOMPONENTSTEPMODELS\3TRUE\2CFG3D.COMPONENTMODELPREFERENCE\30\2CFG3D.SHOWCOMPONENTAXES\3TRUE\2CFG3D.SHOWBOARDCORE\3TRUE\2CFG3D.SHOWBOARDPREPREG\3TRUE\2CFG3D.SHOWTOPSILKSCREEN\3TRUE\2CFG3D.SHOWBOTSILKSCREEN\3TRUE\2CFG3D.SHOWORIGINMARKER\3TRUE\2CFG3D.EYEDIST\32000\2CFG3D.SHOWCUTOUTS\3TRUE\2CFG3D.SHOWROUTETOOLPATH\3TRUE\2CFG3D.SHOWROOMS3D\3FALSE\2CFG3D.USESYSCOLORSFOR3D\3FALSE\2CFG3D.WORKSPACECOLOR\316777215\2CFG3D.BOARDCORECOLOR\34216160\2CFG3D.BOARDPREPREGCOLOR\30\2CFG3D.TOPSOLDERMASKCOLOR\35994299\2CFG3D.BOTSOLDERMASKCOLOR\35994299\2CFG3D.COPPERCOLOR\38315135\2CFG3D.TOPSILKSCREENCOLOR\316777215\2CFG3D.BOTSILKSCREENCOLOR\316777215\2CFG3D.WORKSPACELUMINANCEVARIATION\330\2CFG3D.WORKSPACEBEGINCOLOR\316777215\2CFG3D.WORKSPACEENDCOLOR\315724527\2CFG3D.WORKSPACECOLOROPACITY\31.000000\2CFG3D.BOARDCORECOLOROPACITY\30.900000\2CFG3D.BOARDPREPREGCOLOROPACITY\30.500000\2CFG3D.TOPSOLDERMASKCOLOROPACITY\30.900000\2CFG3D.BOTSOLDERMASKCOLOROPACITY\30.900000\2CFG3D.COPPERCOLOROPACITY\31.000000\2CFG3D.TOPSILKSCREENCOLOROPACITY\31.000000\2CFG3D.BOTSILKSCREENCOLOROPACITY\31.000000\2CFG3D.BOARDTHICKNESSSCALING\31.000000\2CFG3D.SHOWMECHANICALLAYERS\3FALSE\2CFG3D.MECHANICALLAYERSOPACITY\31.000000\2CFG3D.MECHCOVERLAYERUPDATED\3FALSE|DocumentPath=D:\Microrally\uDCCD_Controller_HW\Main board\Source\uDCCD_Controller.PcbDoc
OutputType16=Composite OutputType16=Composite
OutputName16=Gerber Notes OutputName16=Gerber Notes
OutputCategory16=Documentation OutputCategory16=Documentation
@@ -617,20 +617,20 @@ ShowComponentParameters3=0
GlobalBookmarks3=0 GlobalBookmarks3=0
PDFACompliance3=Disabled PDFACompliance3=Disabled
PDFVersion3=Default PDFVersion3=Default
OutputFilePath4=Z:\MicroRally\Electronics\DataTracker\OUTPUTS\DataTracker\ OutputFilePath4=D:\Microrally\uDCCD_Controller_HW\Main board\OUTPUTS\uDCCD_Controller\
ReleaseManaged4=0 ReleaseManaged4=0
OutputBasePath4=OUTPUTS\ OutputBasePath4=OUTPUTS\
OutputPathMedia4==UT_Output_file_name OutputPathMedia4==UT_Output_file_name
OutputPathMediaValue4==UT_Output_file_name OutputPathMediaValue4==UT_Output_file_name
OutputPathOutputer4=[Output Custom] OutputPathOutputer4=[Output Custom]
OutputPathOutputerPrefix4= OutputPathOutputerPrefix4=
OutputPathOutputerValue4=3D_MODEL OutputPathOutputerValue4==UT_Output_file_name+'_'+UT_PCB_Revision+'_3D_MODEL'
OutputFileName4= OutputFileName4=
OutputFileNameMulti4==UT_Output_file_name+'_'+UT_PCB_Revision+'_'+OutputName OutputFileNameMulti4==UT_Output_file_name+'_'+UT_PCB_Revision+'_'+OutputName
UseOutputNameForMulti4=0 UseOutputNameForMulti4=0
OutputFileNameSpecial4= OutputFileNameSpecial4=
OpenOutput4=0 OpenOutput4=0
OutputFilePath5=Z:\MicroRally\Electronics\DataTracker\OUTPUTS\DataTracker\ OutputFilePath5=D:\Microrally\uDCCD_Controller_HW\Main board\OUTPUTS\uDCCD_Controller\
ReleaseManaged5=0 ReleaseManaged5=0
OutputBasePath5=OUTPUTS\ OutputBasePath5=OUTPUTS\
OutputPathMedia5==UT_Output_file_name OutputPathMedia5==UT_Output_file_name
@@ -643,7 +643,7 @@ OutputFileNameMulti5==UT_Output_file_name+'_'+UT_PCB_Revision
UseOutputNameForMulti5=0 UseOutputNameForMulti5=0
OutputFileNameSpecial5= OutputFileNameSpecial5=
OpenOutput5=0 OpenOutput5=0
OutputFilePath6=Z:\MicroRally\Electronics\DataTracker\OUTPUTS\DataTracker\ OutputFilePath6=F:\MicroRally\uDCCD Controller\Electronics\Main board\OUTPUTS\uDCCD_Controller\
ReleaseManaged6=0 ReleaseManaged6=0
OutputBasePath6=OUTPUTS\ OutputBasePath6=OUTPUTS\
OutputPathMedia6==UT_Output_file_name OutputPathMedia6==UT_Output_file_name
@@ -683,7 +683,7 @@ ShowComponentParameters7=0
GlobalBookmarks7=0 GlobalBookmarks7=0
PDFACompliance7=Disabled PDFACompliance7=Disabled
PDFVersion7=Default PDFVersion7=Default
OutputFilePath8=Z:\MicroRally\Electronics\DataTracker\OUTPUTS\DataTracker\ OutputFilePath8=F:\MicroRally\uDCCD Controller\Electronics\Main board\OUTPUTS\uDCCD_Controller\
ReleaseManaged8=0 ReleaseManaged8=0
OutputBasePath8=OUTPUTS\ OutputBasePath8=OUTPUTS\
OutputPathMedia8==UT_Output_file_name OutputPathMedia8==UT_Output_file_name
@@ -696,14 +696,14 @@ OutputFileNameMulti8==UT_Output_file_name+'_'+UT_PCB_Revision+UT_BOM_Version+'_B
UseOutputNameForMulti8=0 UseOutputNameForMulti8=0
OutputFileNameSpecial8= OutputFileNameSpecial8=
OpenOutput8=0 OpenOutput8=0
OutputFilePath9=Z:\MicroRally\Electronics\DataTracker\OUTPUTS\DataTracker\ OutputFilePath9=D:\Microrally\uDCCD_Controller_HW\Main board\OUTPUTS\uDCCD_Controller\
ReleaseManaged9=0 ReleaseManaged9=0
OutputBasePath9=OUTPUTS\ OutputBasePath9=OUTPUTS\
OutputPathMedia9==UT_Output_file_name OutputPathMedia9==UT_Output_file_name
OutputPathMediaValue9==UT_Output_file_name OutputPathMediaValue9==UT_Output_file_name
OutputPathOutputer9=3D_MODEL OutputPathOutputer9=[Output Custom]
OutputPathOutputerPrefix9=3D_MODEL OutputPathOutputerPrefix9=3D_MODEL
OutputPathOutputerValue9==UT_Output_file_name+'_'+UT_PCB_Revision+UT_BOM_Version+'_MODEL' OutputPathOutputerValue9==UT_Output_file_name+'_'+UT_PCB_Revision+'_3D_MODEL'
OutputFileName9= OutputFileName9=
OutputFileNameMulti9==UT_Output_file_name+'_'+UT_PCB_Revision+UT_BOM_Version+'_MODEL' OutputFileNameMulti9==UT_Output_file_name+'_'+UT_PCB_Revision+UT_BOM_Version+'_MODEL'
UseOutputNameForMulti9=0 UseOutputNameForMulti9=0
@@ -728,7 +728,7 @@ RelativeOutputPath2=Z:\MicroRally\Electronics\DataTracker\OUTPUTS\R1V1\DataTrack
OpenOutputs2=0 OpenOutputs2=0
RelativeOutputPath3=Z:\MicroRally\Electronics\DataTracker\OUTPUTS\DataTracker_R1_PCB.PDF RelativeOutputPath3=Z:\MicroRally\Electronics\DataTracker\OUTPUTS\DataTracker_R1_PCB.PDF
OpenOutputs3=0 OpenOutputs3=0
RelativeOutputPath4=Z:\MicroRally\Electronics\DataTracker\OUTPUTS\DataTracker\ RelativeOutputPath4=D:\Microrally\uDCCD_Controller_HW\Main board\OUTPUTS\uDCCD_Controller\
OpenOutputs4=0 OpenOutputs4=0
AddToProject4=0 AddToProject4=0
TimestampFolder4=0 TimestampFolder4=0
@@ -738,7 +738,7 @@ OpenGerberOutput4=0
OpenNCDrillOutput4=0 OpenNCDrillOutput4=0
OpenIPCOutput4=0 OpenIPCOutput4=0
EnableReload4=0 EnableReload4=0
RelativeOutputPath5=Z:\MicroRally\Electronics\DataTracker\OUTPUTS\DataTracker\ RelativeOutputPath5=D:\Microrally\uDCCD_Controller_HW\Main board\OUTPUTS\uDCCD_Controller\
OpenOutputs5=0 OpenOutputs5=0
AddToProject5=0 AddToProject5=0
TimestampFolder5=0 TimestampFolder5=0
@@ -748,7 +748,7 @@ OpenGerberOutput5=0
OpenNCDrillOutput5=0 OpenNCDrillOutput5=0
OpenIPCOutput5=0 OpenIPCOutput5=0
EnableReload5=0 EnableReload5=0
RelativeOutputPath6=Z:\MicroRally\Electronics\DataTracker\OUTPUTS\DataTracker\ RelativeOutputPath6=F:\MicroRally\uDCCD Controller\Electronics\Main board\OUTPUTS\uDCCD_Controller\
OpenOutputs6=0 OpenOutputs6=0
AddToProject6=0 AddToProject6=0
TimestampFolder6=0 TimestampFolder6=0
@@ -760,7 +760,7 @@ OpenIPCOutput6=0
EnableReload6=0 EnableReload6=0
RelativeOutputPath7=Z:\MicroRally\Electronics\DataTracker\OUTPUTS\DataTracker_R1V1_PIC.PDF RelativeOutputPath7=Z:\MicroRally\Electronics\DataTracker\OUTPUTS\DataTracker_R1V1_PIC.PDF
OpenOutputs7=0 OpenOutputs7=0
RelativeOutputPath8=Z:\MicroRally\Electronics\DataTracker\OUTPUTS\DataTracker\ RelativeOutputPath8=F:\MicroRally\uDCCD Controller\Electronics\Main board\OUTPUTS\uDCCD_Controller\
OpenOutputs8=0 OpenOutputs8=0
AddToProject8=0 AddToProject8=0
TimestampFolder8=0 TimestampFolder8=0
@@ -770,7 +770,7 @@ OpenGerberOutput8=0
OpenNCDrillOutput8=0 OpenNCDrillOutput8=0
OpenIPCOutput8=0 OpenIPCOutput8=0
EnableReload8=0 EnableReload8=0
RelativeOutputPath9=Z:\MicroRally\Electronics\DataTracker\OUTPUTS\DataTracker\ RelativeOutputPath9=D:\Microrally\uDCCD_Controller_HW\Main board\OUTPUTS\uDCCD_Controller\
OpenOutputs9=0 OpenOutputs9=0
AddToProject9=0 AddToProject9=0
TimestampFolder9=0 TimestampFolder9=0

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -305,24 +305,24 @@ DocumentPath=Project Outputs for uDCCD_Controller\Design Rule Check - uDCCD_Cont
DItemRevisionGUID= DItemRevisionGUID=
[Parameter1] [Parameter1]
Name=UT_BOM_Version Name=UT_Project_Name
Value=V1 Value=uDCCD Controller
[Parameter2] [Parameter2]
Name=UT_Output_file_name Name=UT_PCB_Revision
Value=uDCCD Controller Value=R9
[Parameter3] [Parameter3]
Name=UT_PCB_Designer Name=UT_PCB_Designer
Value=Andis Zīle Value=Andis Zīle
[Parameter4] [Parameter4]
Name=UT_PCB_Revision Name=UT_Output_file_name
Value=R8 Value=uDCCD_Controller
[Parameter5] [Parameter5]
Name=UT_Project_Name Name=UT_BOM_Version
Value=uDCCD Controller Value=V1
[Configuration1] [Configuration1]
Name=Sources Name=Sources
@@ -544,6 +544,12 @@ OutputDocumentPath13=
OutputVariantName13=[No Variations] OutputVariantName13=[No Variations]
OutputDefault13=0 OutputDefault13=0
PageOptions13=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9 PageOptions13=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9
OutputType14=PCBDrawing
OutputName14=Draftsman
OutputDocumentPath14=
OutputVariantName14=[No Variations]
OutputDefault14=0
PageOptions14=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9
[OutputGroup4] [OutputGroup4]
Name=Assembly Outputs Name=Assembly Outputs