Dann mal den ganzen code:
/*
* Formel f�r die Baudrate. BSEL ist der Wert der in die
Baudratenregister kommt.
* (Takt / (2^0 * 16*Gew�nschte Baudrate)) - 1 = BSEL
*
*/
#include <avr/io.h>
#include <avr/interrupt.h>
#include <string.h>
#include <stddef.h>
#include <avr/pgmspace.h>
#include <stdlib.h>
// Funktionen
unsigned int ADCA_Conversion(ADC_CH_t *Channel, char Pin);
//Variablen
volatile int ADC_Value = 0;
char Ergebnis[5];
int i;
int main(void)
{
Init(&USARTF1, &PORTF, 0x80); //USART
C0 und die dazu geh�rigen Pins vom Port setzen - bei dir USARTF1, PortF
und 0x80
ADCA_init();
TimerC0_init();
TimerC0_Freq(0x7A12); //Timer f�r 1
Sekunde warten
Send_UART(&USARTF1, "ADC TEstprogramm");
while(1) //while(1) ist die
Mainloop
{
}
}
void Send_UART(USART_t *USART, char data[])
{
char Counter;
char lenght = 0;
lenght = strlen(data);
while(Counter < lenght)
{
while (!(USART->STATUS & USART_DREIF_bm));
USART->DATA = data[Counter];
Counter++;
}
Counter = 0;
while (!(USART->STATUS & USART_DREIF_bm));
USART->DATA = 0x0A;
while (!(USART->STATUS & USART_DREIF_bm));
USART->DATA = 0x0D;
}
void Init(USART_t *USART, PORT_t *Port, char Value)
{
//Takt auf 32MHz setzen
OSC_CTRL |= OSC_RC32MEN_bm;
while(!(OSC_STATUS & OSC_RC32MRDY_bm));
CCP = CCP_IOREG_gc;
CLK_CTRL = CLK_SCLKSEL_RC32M_gc; // 0x01
ersetzt durch den Ausdruck
//Konfiguration der USART F1
USART->BAUDCTRLB = 0; //Baudrate auf 19200@32MHz ge�ndert
//Baudrateneinstellung
USART->BAUDCTRLA = 0x68;
//Baudrateneinstellung f�r gro�e Werte 2 register
USART->CTRLA = USART_RXCINTLVL_HI_gc;
//Interruptpriorit�t (RX Interrupt H�chste)
USART->CTRLB = USART_TXEN_bm | USART_RXEN_bm;
//USART aktivieren RX und TX
USART->CTRLC = USART_CHSIZE_8BIT_gc; //8bit
�bertragung
Port->DIR = Value; //PF7 als
Ausgang, UART TX
}
//ADC initialisieren
void ADCA_init()
{
ADCA.CTRLB = ADC_RESOLUTION_12BIT_gc;
//Unsigned Mode / 8 Bit
ADCA.REFCTRL = ADC_REFSEL_INT1V_gc | 0x02;
//Interne 1V Referenz
ADCA.PRESCALER = ADC_PRESCALER_DIV512_gc;
//Prescaler auf 512 stellen
ADCA.CTRLA = ADC_ENABLE_bm; //ADC
Enable
PORTA.DIR = 0x00; //Port A als
Eingang setzen
}
//Messung starten
unsigned int ADCA_Conversion(ADC_CH_t *Channel, char Pin)
{
Channel->CTRL = ADC_CH_INPUTMODE_SINGLEENDED_gc;
//Single Ended Mode einstellen
Channel->MUXCTRL = (Pin << 3); //Pin
ausw�hlen
Channel->CTRL |= ADC_CH_START_bm; //Messung
starten und Input-Mode auf Singleended stellen
while(!Channel->INTFLAGS);
return Channel->RES; //Inhalt des
Datenregisters auslesen
}
void TimerC0_init()
{
TCC0.CTRLA = TC_CLKSEL_DIV1024_gc;
//Vorteiler einstellen
TCC0.CTRLB = 0x00; //Timer in
Normalmodus stellen
TCC0.INTCTRLA = 0x03; //Interrupt
konfigurieren
//Interrupts freigeben
PMIC.CTRL |= PMIC_LOLVLEN_bm | PMIC_MEDLVLEN_bm | PMIC_HILVLEN_bm;
//Interrupts (Highlevel, Mediumlevel und Lowlevel freigeben)
sei();
}
void TimerC0_Freq(int TTW)
{
TCC0.PER = TTW;
//Timer-Topwert(TTW) einstellen
}
//ISR von TimerC0
ISR(TCC0_OVF_vect)
{
ADC_Value = ADCA_Conversion(&(ADCA.CH0), 0);
itoa(ADC_Value, Ergebnis, 10);
Send_UART(&USARTF1, Ergebnis);
TimerC0_Freq(0x7A12); //Timerwert neu
laden
}
und meine frage ist wenn ich bei "ADCA_Conversion(&(ADCA.CH0), 0);"
hinschreibe hab ich trotzdem PA2 und nicht PA0