Tiva C Launchpad ADC Sorunum Yardım

Başlatan swearer, 02 Aralık 2015, 17:19:26

swearer

#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 ?

saucompeng

#1
#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);
   
  //GPIO
   SysCtlPeripheralEnable(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);

  //ADC
  SysCtlPeripheralEnable(SYSCTL_PERIPH_ADC0);
   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);
			GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_2,!GPIO_PIN_2); 
			GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_3,!GPIO_PIN_3);			
		}
		else if(1024<voltage<=2048)
		{
			GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_1,!GPIO_PIN_1);
			GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_2,GPIO_PIN_2); 
			GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_3,!GPIO_PIN_3);
		}
        else if(2048<voltage<=4096) 
		{
			GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_1,!GPIO_PIN_1);
			GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_2,!GPIO_PIN_2); 
			GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_3,GPIO_PIN_3); 
		}     
   }    
}
www.teknikyazi.com --üşenme,erteleme,vazgeçme...

swearer