#include <stdio.h>
#include <stdint.h>
#include <stdbool.h>
#include "inc/hw_memmap.h"
#include "inc/hw_types.h"
#include "inc/hw_ints.h"
#include "driverlib/sysctl.h"
#include "driverlib/adc.h"
#include "driverlib/interrupt.h"
#include "driverlib/gpio.h"
bool isAdcReadOk=false;
uint32_t voltage;
void Int_Adc(void)
{
uint32_t pot[1];
ADCIntClear(ADC0_BASE,3);
ADCSequenceDataGet(ADC0_BASE,3, pot);
voltage=(pot[0]*0.8);
isAdcReadOk=true;
}
int main(void){
SysCtlClockSet(SYSCTL_USE_PLL | SYSCTL_OSC_MAIN | SYSCTL_XTAL_16MHZ | SYSCTL_SYSDIV_5);
SysCtlPeripheralEnable(SYSCTL_PERIPH_ADC0 /*|SYSCTL_PERIPH_GPIOF*/);
//GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE, GPIO_PIN_1 |GPIO_PIN_2 |GPIO_PIN_3);
//GPIOPadConfigSet(GPIO_PORTF_BASE,GPIO_PIN_1 |GPIO_PIN_2 |GPIO_PIN_3, GPIO_STRENGTH_12MA, GPIO_PIN_TYPE_STD);
//GPIOPinTypeADC(GPIO_PORTE_BASE, GPIO_PIN_3);
//GPIOPadConfigSet(GPIO_PORTF_BASE,GPIO_PIN_3, GPIO_STRENGTH_12MA, GPIO_PIN_TYPE_ANALOG);
ADCHardwareOversampleConfigure(ADC0_BASE, 64);
ADCSequenceDisable(ADC0_BASE,3);
ADCSequenceConfigure(ADC0_BASE,3,ADC_TRIGGER_PROCESSOR,0);
ADCSequenceStepConfigure(ADC0_BASE,3,0,ADC_CTL_CH0| ADC_CTL_IE | ADC_CTL_END);
ADCSequenceEnable(ADC0_BASE,3);
ADCIntEnable(ADC0_BASE,3);
ADCIntRegister(ADC0_BASE,3, Int_Adc);
IntEnable(INT_ADC0SS3);
while(1)
{
ADCProcessorTrigger(ADC0_BASE,3);
isAdcReadOk=false;
while(!isAdcReadOk)
{
}
//if(voltage<=1024) {GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_1,GPIO_PIN_1); }
//else if(1024<voltage<=2048) {GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_2,GPIO_PIN_2); }
//else if(2048<voltage<=4096) {GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_3,GPIO_PIN_3); }
}
}
Yapmak istediğim: 3.3V'u kesme kullanarak pot ile okuyup 0-3300 arası değerler elde etmek. Bu değerlere göre de board üzerindeki R,G veya B ledleri yakmak.
Çalışan kısım: 0-3300 arası değer okumak.
Sıkıntılı kısım: okuduğum bu değere göre belirlediğim aralıkta istediğim ledleri yakamıyorum. pin tanımlamalarında sıkıntı var ama nerede olduğunu çözemedim. hatalarım nerelerde ?
@saucompeng yardımcı olabilir misiniz ?