Der Prescaler ist auf DIV4 damit ich das maximum erziehle.
Die Frequenz habe ich mir am Oszilloskop angeschaut indem ich immer ein Port indemfall habe ich das port K auf low und high abwechselnd geschaltet.
auf das ergebnis komme ich mit RESH beim Debuggen. Mir fällt auf das es dauernd 0 dann 64 dann 128 und immer wieder von vorne aufnimmt.
Die Frequenz habe ich mir am Oszilloskop angeschaut indem ich immer ein Port indemfall habe ich das port K auf low und high abwechselnd geschaltet.
auf das ergebnis komme ich mit RESH beim Debuggen. Mir fällt auf das es dauernd 0 dann 64 dann 128 und immer wieder von vorne aufnimmt.
Code:
#include <avr/io.h>
#include "clksys_driver.h"
int main()
{
//Oszi Configure
/******************************************************************
* System Clock 32MHz (XOSC Quarz 16MHz, PLL Faktor 2)
******************************************************************/
/* Nach dem Reset ist die Quelle des Systemtaktes der interne
2MHz RC-Oszillator (System Clock Selection: RC2MHz)
*/
// Oszillator XOSC konfigurieren (12..16MHz, 256 clocks startup time)
CLKSYS_XOSC_Config( OSC_FRQRANGE_12TO16_gc, false, OSC_XOSCSEL_XTAL_256CLK_gc );
// Oszillator XOSC enable
CLKSYS_Enable( OSC_XOSCEN_bm );
// Warten bis der Oszillator bereit ist
do {} while ( CLKSYS_IsReady( OSC_XOSCRDY_bm ) == 0 );
// PLL source ist XOSC, Multiplikator x2
CLKSYS_PLL_Config( OSC_PLLSRC_XOSC_gc, 2 );
// Enable PLL
CLKSYS_Enable( OSC_PLLEN_bm );
// Prescalers konfigurieren
CLKSYS_Prescalers_Config( CLK_PSADIV_1_gc, CLK_PSBCDIV_1_1_gc );
// Warten bis PLL locked
do {} while ( CLKSYS_IsReady( OSC_PLLRDY_bm ) == 0 );
// Main Clock Source ist Ausgang von PLL
CLKSYS_Main_ClockSource_Select( CLK_SCLKSEL_PLL_gc );
// Nun ist der System Clock 32MHz !
//Variablen
uint16_t temp=0;
uint16_t max=0;
//uint16_t offset=0;
// Alle Pins des PORTE werden als Ausgang definiert
PORTK.DIR=0xFF; // Alle Pins des PORTE werden als Ausgang definiert
PORTK.OUT=0x00;
//ADC CONIFIGURE
ADCA.CTRLB = 0x08; //ADC_RESOLUTION_12BIT_gc;
ADCA.REFCTRL = 0x00; //internal 1.0V Reference
ADCA.PRESCALER = 0x00; // maximal clk/4 (2MHz/4=500kHz)
ADCA.CH0.CTRL = ADC_CH_INPUTMODE_SINGLEENDED_gc; //single ended
ADCA.CH0.MUXCTRL = ADC_CH_MUXPOS_PIN0_gc; //PORTA:0 input
ADCA.CTRLA = 0x01; //enable adc
//ADCA.CALCTRL = 0x01; //calibrate adc MAL SCHAUN OB ES AUCH VOR ENABLE CTRLA
/*// trigger single conversion
ADCA.CTRLA |= 0x4;
// wait for result
while(!ADCA.CH0.INTFLAGS); // wait for conversion complete flag
ADCA.CH0.INTFLAGS=ADC_CH_CHIF_bm; // clear int flags (cleared by writing 1)
offset = ADCA.CH0RES; // read 12 bit value and save as zero offset
*/
//eine Conversationszeit abwarten(24ADC-Clocks), hier kann auch eine feste Zeit gewartet werden
while(!ADCA.CH0.INTFLAGS) { }; //eine Conversationszeit abwarten(24ADC-Clocks)
// IF wieder löschen
ADCA.CH0.INTFLAGS = ADC_CH_CHIF_bm;
//dummy lesen
temp= ADCA_CH0RES-offset;
while(1){
/*while(!ADCA.CH0.INTFLAGS) { }; //eine Conversationszeit abwarten(24ADC-Clocks)
PORTK.OUT = ~PORTK.OUT;
// IF wieder löschen
ADCA.CH0.INTFLAGS = ADC_CH_CHIF_bm;*/
// Wert entnehmen
temp = ADCA_CH0RES;
if(temp > max)
max = temp;
PORTK.OUT = ~PORTK.OUT; /*Alle Bits werden auf High gesetzt*/
}
return 0;
}