Für welche Applikation brauchst du die 64 MHz eigentlich? Wenn ich heute Nachmittag etwas Zeit habe, mach ich mal ein zwei Fotos von den Boards.
Jap hab auch zwei ATXmega-Boards. Beide mit 128A1. An den 3V3-Pegel muss man sich gewöhnen, aber so schlimm ist es auch nicht. L293D mit 3,3V (IO-Level) macht momentan noch nicht so den Spaß, aber wird schon.
Grüße,
Daniel
Für welche Applikation brauchst du die 64 MHz eigentlich? Wenn ich heute Nachmittag etwas Zeit habe, mach ich mal ein zwei Fotos von den Boards.
Grüße,
Daniel
Schaut ruhig mal auf meiner Homepage vorbei :
http://kampis-elektroecke.de
Oder folge mir auf Google+:
Daniel Kampert
Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.
Gruß
Daniel
AVR Studio meckert bei diesem Programm rum:
Als Fehler kommt das hier:Code:/* * XMega.c * * Timer C0 wird ist auf 1 Sekunde eingestellt. * * Created: 22.03.2012 19:42:07 * Author: Daniel */ #include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h> void Clock_init(void); void PLL_init(void); void Int_init(void); void Port_init(void); void UART_init(void); void DAC_init(void); void ADCA_init(void); void TimerC0_init(void); void Send_UART(void); void ADC_Cal(void); void Start_Conversion(void); int main(void) { // Variablen volatile int ADC_Value = 0x00; volatile int Calibration_Value_ADC; // Buffer für ADC Kalibrationswert Clock_init(); // Konfiguriert die Clock PLL_init(); // PLL konfigurieren Int_init(); // Interrupts konfigurieren DAC_init(); // DAC konfigurieren ADCA_init(); // ADC konfigurieren ADC_Cal(); // ADC kalibrieren TimerC0_init(); // Timer C0 konfigurieren Port_init(); // Ports konfigurieren UART_init(); // UART konfigurieren while(1) { } } void DAC_init() { DACA.CTRLC = ~(DAC_REFSEL_gm | DAC_LEFTADJ_bm); // Interne 1V Referenz, right adjust (12 Bit); DACA.CTRLA = (DAC_CH0EN_bm | DAC_ENABLE_bm); // 1CLK Takt, Refresh 16CLKs // DACA.TIMCTRL = 0x00; // DAC aktivieren } void ADCA_init() { ADCA.CTRLA = 0x01; // ADC Enable ADCA.CTRLB = 0x04; // Unsigned Mode / 8 Bit ADCA.REFCTRL = 0x00; // Interne 1.0V Referenz } void Clock_init(void) { OSC.CTRL |= OSC_RC32MEN_bm; // Oszillator auf 32Mhz stellen while(!(OSC.STATUS & OSC_RC32MRDY_bm)); // Warten bis der Oszillator bereit ist CCP = CCP_IOREG_gc; CLK.CTRL = 0x01; // Clock auf 32MHz stellen } void PLL_init(void) { } void Int_init(void) { PMIC.CTRL |= PMIC_LOLVLEN_bm | PMIC_MEDLVLEN_bm | PMIC_HILVLEN_bm; // Interrupts (Highlevel,Mediumlevel und Lowlevel freigeben) sei(); // Globale Interruptfreigabe } void Port_init(void) { PORTB.DIR = 0xFF; // Kompletten PortB auf Ausgang stellen } void TimerC0_init(void) { TCC0.CTRLA = TC_CLKSEL_DIV1024_gc; // Vorteiler einstellen TCC0.PER = 31249; // Timer-Topwert einstellen TCC0.CTRLB = 0x00; // Timer in Normalmodus stellen TCC0.INTCTRLA = 0x03; // Interrupt konfigurieren } void UART_init(void) { } void Send_UART(void) { } void Start_Conversion(void) { ADCA.CH0.CTRL = 0x81; // Messung starten und Input-Mode auf Singleended stellen ADC_Value = ADCA_CH0RES; } void ADCA_Cal(void) { Calibration_Value_ADC = 0x00; ADCA_CAL = Calibration_Value_ADC; } ISR(TCC0_OVF_vect) { PORTB.OUT ^= 0x01; }
Bild hier
Dabei habe ich die Variablen doch deklariert....
Hat jemand ne Lösung für das Problem?
Danke schonmal!
Schaut ruhig mal auf meiner Homepage vorbei :
http://kampis-elektroecke.de
Oder folge mir auf Google+:
Daniel Kampert
Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.
Gruß
Daniel
Ja aber lokal in der main.
Grüße,
Daniel
Schaut ruhig mal auf meiner Homepage vorbei :
http://kampis-elektroecke.de
Oder folge mir auf Google+:
Daniel Kampert
Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.
Gruß
Daniel
Na du hast zwei ADCs im XMega. Den ADCA und ADCB. Beide hängen auch an PortA und PortB. Wenn du jetzt ADCA.CH0 nimmst ist es also PortA.Pin0.
Grüße,
Daniel
Danke für die Antwort. Aber ich habe mir vorhin im Datenblatt die Stelle nochmal durchgelesen.
Wenn ich es richtig verstehe (und ich weiß nicht ob es so ist ), hat der XMega 2 ADCs (wie du schon sagtest). Jeweils einen an PortB und A. Diese ADCs sind in 4 Kanäle unterteilt. Und dann kann man mittels des Mux Registers diesem Channel nochmal nen Pin zuweisen.
Das sieht man in dem Bild aus dem Datenblatt recht gut:
Bild hier
Schaut ruhig mal auf meiner Homepage vorbei :
http://kampis-elektroecke.de
Oder folge mir auf Google+:
Daniel Kampert
Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.
Gruß
Daniel
Das mit den MUX-Registern gibt es auch bei den Megas und Tinys schon. Der ADC tastet ja nur immer einen Port-Pin ab. Damit er weiß welchen, musst du ihm das natürlich sagen. Frei wählen wie bei den externen Interrupts (was ich neben TWI, SPI und USART immer noch am Schärfsten finde ). Dort kannst du explizit per Pin-Maske einen Pin auswählen. Was bei den ADCs nicht in der Funktionalität geht. Dort wird via Multiplexer zwischen den Quellen geschaltet. Daher auch der Name Mu(ltiple)x-Register.
Die Grafik ist für mich so zu deuten, dass man mit den MUX-Registern eine Kanalauswahl trifft. Entweder die differentiellen mit oder ohne Verstärkung oder aber die Single-Ended-Eingänge. Dann folgt die Konfiguration hinsichtlich Auflösung, Referenzspannung und Events. Da mit relativ hoher Wahrscheinlichkeit mehrere Kanäle zum Messen verwendet oder aber die Daten für den DMA gehalten werden müssen, gibt es dann pro Kanal ein Register wo man das Ergebnis abholen kann.
Man kann im Übrigen auch 4 virtuelle Kanäle deklarieren. Das geht über das MUXCTRL-Register.
Code:ADCA.CH0.MUXCTRL
Geändert von ePyx (25.03.2012 um 10:39 Uhr)
Grüße,
Daniel
Ich habe mir gerade mal eine Application Note von Atmel angesehen.
Dort habe ich diese Grafik gefunden:
Bild hier
Ich finde die erklärt das ein bischen besser als die im Datenblatt
Das mit den Virtuellen Kanälen habe ich noch gar nicht gesehen ^.^ und bisher hab ich nichtmal ne Ahnung wofür ich das brauchen könnte.
Schaut ruhig mal auf meiner Homepage vorbei :
http://kampis-elektroecke.de
Oder folge mir auf Google+:
Daniel Kampert
Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.
Gruß
Daniel
Lesezeichen