Witam
Od pewnego czasu walczę z uruchomieniem ADC w Xmega 128D4 na zbudowanej płytce. Napisałem poniższy kod
#include "PMSM.h"
void Config32MHzClock(void)
{
CCP = CCP_IOREG_gc; //Security Signature to modify clock
// initialize clock source to be 32MHz internal oscillator (no PLL)
OSC.CTRL |= OSC_RC32MEN_bm; // enable 32MHz oscillators
while(!(OSC.STATUS & OSC_RC32MRDY_bm)); // wait for oscillator ready
CCP = CCP_IOREG_gc; //Security Signature to modify clock
CLK.CTRL = 0x01; //select sysclock 32MHz osc
};
int main (void)
{
float wyswietl ;
char bufor2[10] ;
volatile double Result ;
Config32MHzClock() ;
lcd_init();
PORTA.DIR =0x00 ;
PORTD_DIR = 0xFF ;
PORTF_DIR = 0xFF;
ADCA.CTRLA = 0b00000001 ;
ADCA.CTRLB = 0b00001000 ;
ADCA.REFCTRL = 0b00010000 ;
ADCA.PRESCALER = 0b00000100 ;
ADCA.CH0.CTRL = 0b00000001 ;
ADCA.CH0.MUXCTRL = 0b00000000 ;
ADCA.CH0.INTCTRL = 0b00000011 ;
while(1)
{
wyswietl = wyswietl + 1 ;
if(wyswietl == 1000)
{
Result = ADCA.CH0RES;
utoa(Result, bufor2, 10);
lcd_clear_and_home();
lcd_line_one();
lcd_write_string(bufor2,10);
wyswietl = 0 ;
} ;
}
return 0;
}
Na płytce z procesorem Xmega 128D4 ciągle jako wynik pomiaru uzyskuję wartość 360 niezależnie od tego czy na pin A0 podam masę czy jakieś napięcie. Mam drugą płytkę zbudowana na procesorze Xmega 128A3 i na niej ten sam kod działa. Wejście A0 nie podłączone pokazuje około 2000 podłączone do masy pokazuje około 150 podłączone do 3,3V pokazuje 4095. Próbowałem różnych konfiguracji przetwornika ADC, przy zmianie źródła napięcia referencyjnego na zewnętrzne otrzymuję wartość 0 niezależnie od napięcia.
Proszę o pomoc
Od pewnego czasu walczę z uruchomieniem ADC w Xmega 128D4 na zbudowanej płytce. Napisałem poniższy kod
Kod: C / C++
#include "PMSM.h"
void Config32MHzClock(void)
{
CCP = CCP_IOREG_gc; //Security Signature to modify clock
// initialize clock source to be 32MHz internal oscillator (no PLL)
OSC.CTRL |= OSC_RC32MEN_bm; // enable 32MHz oscillators
while(!(OSC.STATUS & OSC_RC32MRDY_bm)); // wait for oscillator ready
CCP = CCP_IOREG_gc; //Security Signature to modify clock
CLK.CTRL = 0x01; //select sysclock 32MHz osc
};
int main (void)
{
float wyswietl ;
char bufor2[10] ;
volatile double Result ;
Config32MHzClock() ;
lcd_init();
PORTA.DIR =0x00 ;
PORTD_DIR = 0xFF ;
PORTF_DIR = 0xFF;
ADCA.CTRLA = 0b00000001 ;
ADCA.CTRLB = 0b00001000 ;
ADCA.REFCTRL = 0b00010000 ;
ADCA.PRESCALER = 0b00000100 ;
ADCA.CH0.CTRL = 0b00000001 ;
ADCA.CH0.MUXCTRL = 0b00000000 ;
ADCA.CH0.INTCTRL = 0b00000011 ;
while(1)
{
wyswietl = wyswietl + 1 ;
if(wyswietl == 1000)
{
Result = ADCA.CH0RES;
utoa(Result, bufor2, 10);
lcd_clear_and_home();
lcd_line_one();
lcd_write_string(bufor2,10);
wyswietl = 0 ;
} ;
}
return 0;
}
Kod: C / C++
Na płytce z procesorem Xmega 128D4 ciągle jako wynik pomiaru uzyskuję wartość 360 niezależnie od tego czy na pin A0 podam masę czy jakieś napięcie. Mam drugą płytkę zbudowana na procesorze Xmega 128A3 i na niej ten sam kod działa. Wejście A0 nie podłączone pokazuje około 2000 podłączone do masy pokazuje około 150 podłączone do 3,3V pokazuje 4095. Próbowałem różnych konfiguracji przetwornika ADC, przy zmianie źródła napięcia referencyjnego na zewnętrzne otrzymuję wartość 0 niezależnie od napięcia.
Proszę o pomoc