diff --git a/ArduinoZeroTemplate.cproj b/ArduinoZeroTemplate.cproj index 5fb17d2d543dba46214d9d376159f5cea41fd6f3..7fcf298263f0cf11ee30de9a48dc511e0ad5fb0b 100644 --- a/ArduinoZeroTemplate.cproj +++ b/ArduinoZeroTemplate.cproj @@ -250,12 +250,12 @@ <file path="src/ASF/sam0/drivers/sercom/usart/quick_start_callback/qs_usart_callback.h" framework="" version="3.49.1" source="sam0\drivers\sercom\usart\quick_start_callback\qs_usart_callback.h" changed="False" content-id="Atmel.ASF" /> <file path="src/ASF/sam0/drivers/sercom/usart/usart.h" framework="" version="3.49.1" source="sam0\drivers\sercom\usart\usart.h" changed="False" content-id="Atmel.ASF" /> <file path="src/ASF/sam0/drivers/sercom/usart/quick_start_dma/qs_usart_dma_use.h" framework="" version="3.49.1" source="sam0\drivers\sercom\usart\quick_start_dma\qs_usart_dma_use.h" changed="False" content-id="Atmel.ASF" /> - <file path="src/ASF/sam0/drivers/adc/adc.h" framework="" version="3.49.1" source="sam0\drivers\adc\adc.h" changed="False" content-id="Atmel.ASF" /> - <file path="src/ASF/sam0/drivers/adc/adc_sam_d_r_h/adc.c" framework="" version="3.49.1" source="sam0\drivers\adc\adc_sam_d_r_h\adc.c" changed="False" content-id="Atmel.ASF" /> - <file path="src/ASF/sam0/drivers/adc/adc_sam_d_r_h/adc_feature.h" framework="" version="3.49.1" source="sam0\drivers\adc\adc_sam_d_r_h\adc_feature.h" changed="False" content-id="Atmel.ASF" /> <file path="src/ASF/sam0/drivers/wdt/wdt.c" framework="" version="3.49.1" source="sam0\drivers\wdt\wdt.c" changed="False" content-id="Atmel.ASF" /> <file path="src/ASF/sam0/drivers/wdt/wdt.h" framework="" version="3.49.1" source="sam0\drivers\wdt\wdt.h" changed="False" content-id="Atmel.ASF" /> <file path="src/ASF/sam0/drivers/wdt/quick_start/qs_wdt_basic.h" framework="" version="3.49.1" source="sam0\drivers\wdt\quick_start\qs_wdt_basic.h" changed="False" content-id="Atmel.ASF" /> + <file path="src/ASF/sam0/drivers/adc/adc.h" framework="" version="3.49.1" source="sam0\drivers\adc\adc.h" changed="False" content-id="Atmel.ASF" /> + <file path="src/ASF/sam0/drivers/adc/adc_sam_d_r_h/adc.c" framework="" version="3.49.1" source="sam0\drivers\adc\adc_sam_d_r_h\adc.c" changed="False" content-id="Atmel.ASF" /> + <file path="src/ASF/sam0/drivers/adc/adc_sam_d_r_h/adc_feature.h" framework="" version="3.49.1" source="sam0\drivers\adc\adc_sam_d_r_h\adc_feature.h" changed="False" content-id="Atmel.ASF" /> </files> <documentation help="https://asf.microchip.com/docs/3.49.1/common.applications.user_application.sam0_system.user_board.atsamd21g18a/html/index.html" /> <offline-documentation help="" /> @@ -659,12 +659,6 @@ <Compile Include="src\ArduinoZeroTemplate.h"> <SubType>compile</SubType> </Compile> - <None Include="src\ASF\sam0\drivers\dac\dac.h"> - <SubType>compile</SubType> - </None> - <None Include="src\asf.h"> - <SubType>compile</SubType> - </None> <None Include="src\ASF\sam0\drivers\adc\adc.h"> <SubType>compile</SubType> </None> @@ -674,6 +668,15 @@ <None Include="src\ASF\sam0\drivers\adc\adc_sam_d_r_h\adc_feature.h"> <SubType>compile</SubType> </None> + <Compile Include="src\mymacros.h"> + <SubType>compile</SubType> + </Compile> + <None Include="src\ASF\sam0\drivers\dac\dac.h"> + <SubType>compile</SubType> + </None> + <None Include="src\asf.h"> + <SubType>compile</SubType> + </None> <Compile Include="src\ASF\sam0\drivers\dac\dac_sam_d_c_h\dac.c"> <SubType>compile</SubType> </Compile> @@ -1298,9 +1301,6 @@ <Compile Include="src\config\asf.h"> <SubType>compile</SubType> </Compile> - <Compile Include="src\macros.h"> - <SubType>compile</SubType> - </Compile> <Compile Include="src\main.c"> <SubType>compile</SubType> </Compile> diff --git a/src/ArduinoZeroTemplate.c b/src/ArduinoZeroTemplate.c index b0d900625147ac7a9e9172f713a2ec694790ce21..eb6e808a738eacccc0517376a4d6507bf1b9ecc6 100644 --- a/src/ArduinoZeroTemplate.c +++ b/src/ArduinoZeroTemplate.c @@ -7,7 +7,7 @@ #include <asf.h> #include "ArduinoZeroTemplate.h" -#include "macros.h" +#include "mymacros.h" // Globala variabler @@ -58,12 +58,18 @@ void ArduinoZeroTemplate(void) } } - // Create example of using ADC + // ADC example + ADC_Convert(ADC_INPUT_EXAMPLE); + + // DAC example. All configuration needed is already done in Init. DAC is 10 bits and can convert in 350 ksps + dac_chan_write(&dac0_instance_struct, DAC_CHANNEL_0, 1023); // 1023 is the value and is also maximum value. +// Serial.begin(115200); + while (true) { }// end while (true) infinite loop -}// end ArduinoZeroTemplate +}// end **** ArduinoZeroTemplate **** void ArduinoZeroTemplateInit(void) { @@ -223,7 +229,7 @@ void ArduinoZeroTemplateInit(void) dac_config_struct.reference = DAC_REFERENCE_AVCC; dac_init(&dac0_instance_struct, DAC, &dac_config_struct); dac_enable(&dac0_instance_struct); - // In the future the above should be done per DAC channel instead there each DAC in a device is supposed to be a channel. + // In the future the above should be done per DAC channel there each DAC in a device is supposed to be a channel. // But in the current version of ASF there is no support for DAC channels. See dac.h // Note: There are just a few SAM devices that has more than one DAC, like the SAM4L-family. @@ -232,15 +238,35 @@ void ArduinoZeroTemplateInit(void) // Internal ADC adc_get_config_defaults(&adc_config_struct); adc_config_struct.clock_source = GCLK_GENERATOR_4; - // Clock timer Init1msClock(); -} // end init +} // **** end init **** + +uint_fast16_t ADC_Convert(uint8_t adcinput) +{ + static uint_fast16_t light=0; + uint16_t adcValue=0; + uint_fast16_t adcStatus=0; + struct adc_config adc_config_struct; // ADC configuration structure + + adc_get_config_defaults(&adc_config_struct); + adc_config_struct.positive_input = adcinput; + adc_config_struct.reference = ADC_REFERENCE_INTVCC0; + adc_init(&adc0_instance_struct, ADC, &adc_config_struct); + adc_start_conversion(&adc0_instance_struct); + do + { + adcStatus = adc_read(&adc0_instance_struct, &adcValue); + } + while (adcStatus == STATUS_BUSY); + light = adcValue; + return light; +} void usart5_read_callback(struct usart_module *const usart_module) { - // Here some signaling to main should be done. This is an example. + // Here some signaling to main should be done. This is an example of setting a flag after reception of a command. usart5_command_received = true; } diff --git a/src/ArduinoZeroTemplate.h b/src/ArduinoZeroTemplate.h index b97329fd913d7cc1374ab343bfa296f930d90eaa..154aa512ff5871327e757d281e6f340021042fae 100644 --- a/src/ArduinoZeroTemplate.h +++ b/src/ArduinoZeroTemplate.h @@ -131,18 +131,20 @@ Available for user #define TIMEOUT 3 // Nr of retries */ - // For internal DAC if used + // For internal DAC if used. There is only one output so this is it! + // DAC is 10 bits and can convert in 350 ksps #define DAC_PIN PIN_PA02 // Min 5 kohm load, max 100 pF. // USART5 in UART mode if used: #define MAX_USART5_RX_BUFFER_LENGTH 5 - // Analog in addition in progress - // How to read is missing. + // For ADC if used + #define ADC_INPUT_EXAMPLE ADC_POSITIVE_INPUT_PIN1 // PA01. // Functions -void ArduinoZeroTemplateInit(void); void ArduinoZeroTemplate(void); +void ArduinoZeroTemplateInit(void); +uint_fast16_t ADC_Convert(uint8_t adcinput); void Update1msClock(void); void Init1msClock(void); diff --git a/src/macros.h b/src/mymacros.h similarity index 100% rename from src/macros.h rename to src/mymacros.h