- Labornetzteil AliExpress         
Seite 2 von 3 ErsteErste 123 LetzteLetzte
Ergebnis 11 bis 20 von 21

Thema: Erste Versuche mit einem XMega128

  1. #11
    Erfahrener Benutzer Roboter Experte Avatar von ePyx
    Registriert seit
    14.05.2008
    Ort
    Falkensee
    Beiträge
    700
    Anzeige

    Praxistest und DIY Projekte
    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

  2. #12
    Erfahrener Benutzer Roboter Experte Avatar von ePyx
    Registriert seit
    14.05.2008
    Ort
    Falkensee
    Beiträge
    700
    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

  3. #13
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    34
    Beiträge
    3.501
    Blog-Einträge
    9
    Zitat Zitat von ePyx Beitrag anzeigen
    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.
    Erstmal für gar nichts
    Wollte nur ein bischen mit dem Oszillator rumspielen
    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

  4. #14
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    34
    Beiträge
    3.501
    Blog-Einträge
    9
    AVR Studio meckert bei diesem Programm rum:

    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;    
    }
    Als Fehler kommt das hier:

    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

  5. #15
    Erfahrener Benutzer Roboter Experte Avatar von ePyx
    Registriert seit
    14.05.2008
    Ort
    Falkensee
    Beiträge
    700
    Ja aber lokal in der main.
    Grüße,
    Daniel

  6. #16
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    34
    Beiträge
    3.501
    Blog-Einträge
    9
    Zitat Zitat von ePyx Beitrag anzeigen
    Ja aber lokal in der main.
    Danke.....dummer Fehler :/
    Ne Frage zum Thema ADC....bei der Zeile "ADCA.CH0.CTRL = 0x81;" bezieht sich "CH=0" ja auf Channel 0.
    Ist damit PinA.0 gemeint oder wie muss ich das verstehen?
    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

  7. #17
    Erfahrener Benutzer Roboter Experte Avatar von ePyx
    Registriert seit
    14.05.2008
    Ort
    Falkensee
    Beiträge
    700
    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

  8. #18
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    34
    Beiträge
    3.501
    Blog-Einträge
    9
    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

  9. #19
    Erfahrener Benutzer Roboter Experte Avatar von ePyx
    Registriert seit
    14.05.2008
    Ort
    Falkensee
    Beiträge
    700
    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

  10. #20
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    34
    Beiträge
    3.501
    Blog-Einträge
    9
    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

Seite 2 von 3 ErsteErste 123 LetzteLetzte

Ähnliche Themen

  1. [ERLEDIGT] Probleme mit einem XMega128
    Von Kampi im Forum AVR Hardwarethemen
    Antworten: 10
    Letzter Beitrag: 22.03.2012, 00:19
  2. erste versuche mit dem asuro
    Von Nordwind im Forum Asuro
    Antworten: 19
    Letzter Beitrag: 25.09.2011, 10:11
  3. erste Versuche mit Timer
    Von MSP430start im Forum C - Programmierung (GCC u.a.)
    Antworten: 6
    Letzter Beitrag: 01.07.2009, 14:31
  4. Erste Schritte: Probleme mit einem ATmega32
    Von Bääääär im Forum Elektronik
    Antworten: 6
    Letzter Beitrag: 09.07.2007, 17:19
  5. RS232 versuche
    Von HelgeG im Forum PC-, Pocket PC, Tablet PC, Smartphone oder Notebook
    Antworten: 7
    Letzter Beitrag: 22.02.2007, 22:21

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Solar Speicher und Akkus Tests