58 lines
1.3 KiB
C
58 lines
1.3 KiB
C
/*
|
|
Name: Schieder Fabian
|
|
Datum: 11.02.2026
|
|
Datei: ADC.c
|
|
|
|
Hardware: MDDS
|
|
|
|
Funktionsbeschreibung:
|
|
ADC konfigurieren und in eine Variable ADC_Wert übergeben
|
|
*/
|
|
#include "stm32f10x.h"
|
|
#include "armv40_frl.h"
|
|
#include "stdio.h"
|
|
#include "math.h"
|
|
|
|
int ADC_Wert = 0;
|
|
float ADC_Spannung = 0;
|
|
char buffer[30];
|
|
int L = 0;
|
|
|
|
int main(void)
|
|
{
|
|
uart3_init(9600);
|
|
//RCC -> APB2ENR |= (1 << 9); // Clock für ADC1 aktivieren
|
|
RCC -> APB2ENR |= RCC_APB2ENR_ADC1EN; // alternative Variante
|
|
RCC->APB2ENR |= RCC_APB2ENR_IOPAEN; // Clock für PA0
|
|
|
|
GPIOA->CRL &= 0xFFFFFFF0; // PA0 Analog Input
|
|
|
|
ADC1 -> SMPR2 = 0x00000005; // 55,5 cycles
|
|
|
|
ADC1 -> SQR1 = 0x00000000; // 1 conversion
|
|
ADC1 -> SQR2 = 0x00000000; // -//-
|
|
ADC1 -> SQR3 = 0x00000000; // -//-
|
|
|
|
ADC1 -> CR2 = 0x000E0001; // ADC wake up
|
|
|
|
while(1)
|
|
{
|
|
ADC1 -> CR2 |= 0x00500000; // Start conversion
|
|
|
|
while(!(ADC1 -> SR & 0x2));
|
|
|
|
ADC_Wert = ADC1 -> DR;
|
|
ADC_Spannung = (3.3 / 4095) * ADC_Wert;
|
|
L = (int)(26.337 * powf(ADC_Spannung, - 1.204));
|
|
wait_ms(1);
|
|
|
|
sprintf(&buffer[0], "ADCWert.val=%04d\xff\xff\xff", ADC_Wert);
|
|
uart3_put_string(&buffer[0]);
|
|
|
|
sprintf(&buffer[0], "ADCSpannung.txt=\"%02d cm\"\xff\xff\xff", L);
|
|
uart3_put_string(&buffer[0]);
|
|
}
|
|
|
|
return 0;
|
|
}
|