Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ADC_CSV_Threshold_media.c #1

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
109 changes: 109 additions & 0 deletions ACD_CSV/ADC_CSV_Threshold_media.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,109 @@
/**
* Código para Demonstração de ADC com Resolução de 8 Bits
*
* - Utiliza um Conversor Analógico-Digital (ADC) de 8 bits para leitura de dados.
* - Armazena o espectro dos resultados em um array, formatando a saída em CSV.
* - Calcula a média dos valores amostrados para análise de dados.
* - Aplica um threshold (limiar) definido previamente, operando dentro de uma lógica booleana.
* O valor do threshold varia de 0 a 255, compatível com a resolução de 8 bits do ADC.
*
* Este código é projetado para a coleta e análise de dados de ADC, facilitando a interpretação
* dos resultados e a tomada de decisões baseada nos valores amostrados acima do threshold definido.
*/



#include <stdio.h>
#include <stdint.h>
#include <string.h>
#include "ti_msp_dl_config.h"

#define NUM_AMOSTRAS 5 // Valor máximo de amostras 300
#define THRESHOLD 0 // Threshold de tensão para iniciar a conversão ADC (25 = 0,5004V

volatile bool gCheckADC = false;
volatile uint16_t gAdcResult = 0;
uint16_t adcArray[256] = {0}; // Array para contar as ocorrências de cada valor ADC


// Função para salvar amostras em CSV
static void salvarCSV(){
const char *caminhoAbsoluto = "C:/Users/verga/OneDrive/Desktop/ADC_resultados/histograma.csv";
FILE *file = fopen(caminhoAbsoluto, "w");
if (file == NULL){
printf("Erro ao abrir o arquivo.\n");
return;
}

fprintf(file, "Valor ADC,Ocorrencias\n");
for(int i = 0; i < 255; i++){
fprintf(file, "%d,%d\n", i, adcArray[i]);
}

fclose(file);
}

// Função para limpar array
void limparArray(uint16_t array[], int tamanho) {
memset(array, 0, tamanho * sizeof(uint16_t));
}

void ADC12_0_INST_IRQHandler(void) {
switch (DL_ADC12_getPendingInterrupt(ADC12_0_INST)) {
case DL_ADC12_IIDX_MEM0_RESULT_LOADED:
gCheckADC = true;
break;
default:
break;
}
}

//--------------------------------------------------------------------

int main(void) {

uint8_t sampleCount = 0;
uint16_t amostras[NUM_AMOSTRAS];
int soma = 0;
int media;
limparArray(amostras, NUM_AMOSTRAS); // Garante que o array esteja limpo antes de começar

SYSCFG_DL_init();
NVIC_EnableIRQ(ADC12_0_INST_INT_IRQN);

while (sampleCount < NUM_AMOSTRAS) {
DL_ADC12_startConversion(ADC12_0_INST);
//while (!gCheckADC); // Espera até a conversão estar pronta
gAdcResult = DL_ADC12_getMemResult(ADC12_0_INST, DL_ADC12_MEM_IDX_0) & 0xFF; // 8bits 256
//gAdcResult = DL_ADC12_getMemResult(ADC12_0_INST, DL_ADC12_MEM_IDX_0) & 0x200; // 10bits 512
//gAdcResult = DL_ADC12_getMemResult(ADC12_0_INST, DL_ADC12_MEM_IDX_0) & 0x3FF; // 10bits 1024
//gAdcResult = DL_ADC12_getMemResult(ADC12_0_INST, DL_ADC12_MEM_IDX_0) & 0xFFF; // 12bits 4096



if (gAdcResult > THRESHOLD) {
adcArray[gAdcResult]++; // Incrementa a contagem para o valor do ADC
soma += gAdcResult;
sampleCount++;
printf("ADC: %d\n", gAdcResult);
delay_cycles(10000000);
void uart();

} else {
printf("Valor menor: %d\n", gAdcResult);
}

gCheckADC = false; // Prepara para a próxima leitura
DL_ADC12_enableConversions(ADC12_0_INST);
}

media = (soma / NUM_AMOSTRAS);
printf("Média das amostras: %d\n", media);

salvarCSV();
limparArray(amostras, NUM_AMOSTRAS); // Limpa array após salvar os dados

while (1) {
// ---
}
}