Forum: Mikrocontroller und Digitale Elektronik XMEGA setzen der Register funktioniert nicht?!


von Michael (Gast)


Lesenswert?

Hallo Leute,

ich habe den Sprung zum XMEGA gewagt. Jetzt kämpfe ich gerade mit der 
Initialisierung des ADCs. Leider werden die (vermutlich) gesetzten Bits 
in den ADC-Register im IO-Viewer nicht angezeigt. Die Anzeige 
funktioniert im Simulator nicht und auch nicht auf der Hardware über 
PDI.

Zum Beispiel:
ADCA.CTRLB = ADC_RESOLUTION_12BIT_gc;          ADCA.REFCTRL = 
ADC_REFSEL_INT1V_gc;
ADCA.PRESCALER = 0x03;

Die Bits werden einfach nicht gesetzt oder nur nicht angezeigt?!

Verliere langsam echt die Lust an dem XMega. Vielen Dank für Eure Hilfe.

VG,
Michael

Atmel-Studio: 6.1.2730 - Service Pack 2
AVR-Dragon: aktuelles Update

von Stephan B. (matrixstorm)


Lesenswert?

Hallo.

Ich bin jetzt nicht sicher. Aber ggf. muss das CCP Register voerher 
beschrieben werden. Wenn du total ahnunglos bist, waere das eine 
Richtung in die du recherchieren koenntes.

MfG

von Timmo H. (masterfx)


Lesenswert?

Naja was erwartest du auch.
Schau dir mal an wie ADC_RESOLUTION_12BIT_gc und ADC_REFSEL_INT1V_gc 
definiert ist... richtig ist beides "0".
1
typedef enum ADC_RESOLUTION_enum
2
{
3
    ADC_RESOLUTION_12BIT_gc = (0x00<<1),  /* 12-bit right-adjusted result */
4
    ADC_RESOLUTION_8BIT_gc = (0x02<<1),  /* 8-bit right-adjusted result */
5
    ADC_RESOLUTION_LEFT12BIT_gc = (0x03<<1),  /* 12-bit left-adjusted result */
6
} ADC_RESOLUTION_t;
7
8
typedef enum ADC_REFSEL_enum
9
{
10
    ADC_REFSEL_INT1V_gc = (0x00<<4),  /* Internal 1V */
11
    ADC_REFSEL_VCC_gc = (0x01<<4),  /* Internal VCC / 1.6 */
12
    ADC_REFSEL_AREFA_gc = (0x02<<4),  /* External reference on PORT A */
13
    ADC_REFSEL_AREFB_gc = (0x03<<4),  /* External reference on PORT B */
14
    ADC_REFSEL_VCCDIV2_gc = (0x04<<4),  /* Internal VCC / 2 */
15
} ADC_REFSEL_t;
Prescaler erscheint bei mir auch im Simulator als "3".

Stephan B. schrieb:
> Hallo.
>
> Ich bin jetzt nicht sicher. Aber ggf. muss das CCP Register voerher
> beschrieben werden. Wenn du total ahnunglos bist, waere das eine
> Richtung in die du recherchieren koenntes.
>
> MfG
Nein CCP ist nicht notwendig. Nur bei Clock etc.

: Bearbeitet durch User
von Moby (Gast)


Lesenswert?

Meine Güte lies das Datenblatt gründlich und machs dann in Assembler. 
Ist schon ziemlich mühsam durch dieses Meer an Bezeichnern zu rudern- in 
Asm sprichst Du kürzestmöglichen Klartext!
Moby

von Michael (Gast)


Lesenswert?

Hallo zusammen,

vielen Dank für Eure Unterstützung.

Also ich habe jetzt noch folgenden Code aus dem ASF hinzugefügt:

sysclk_enable_module(SYSCLK_PORT_A, SYSCLK_ADC);

Erklärung:
Ich benutze zum Programmstart die ASF-Funktion sysclk_init(). Diese 
Funktion disabled erstmal alle Peripherial Clocks und dann funktioniert 
natürlich nichts mehr!

Sorry Atmel, aber das ASF ist wirklich das Letzte. Vorallem keine 
Beschreibung in den Header-Files. So dass man erstmal den Quellcode 
sichten muss.

VG,
Michael

@Moby: Manchmal sehne ich mich nach den Assembler-Zeiten zurück. Aber 
USB in Assmebler zu initialisieren und zu handeln entspricht einfach 
nicht mehr dem Zeitgeist, oder doch?

von Timmo H. (masterfx)


Lesenswert?

Michael schrieb:
> Sorry Atmel, aber das ASF ist wirklich das Letzte. Vorallem keine
> Beschreibung in den Header-Files. So dass man erstmal den Quellcode
> sichten muss.
Dann lass das mit dem ASF doch einfach bleiben. Den xmega kann man auch 
"ganz normal" programmieren und das ziehe ich auch vor.

von Moby (Gast)


Lesenswert?

> @Moby: Manchmal sehne ich mich nach den Assembler-Zeiten zurück. Aber
> USB in Assmebler zu initialisieren und zu handeln

Ging doch hier nur um den ADC... Ok mit dem USB hab ich mich just noch 
nicht befasst weil ich generell drahtlose Verbindungen bevorzuge. So 
schlimm wird das doch auch nicht sein !???

von Timmo H. (masterfx)


Lesenswert?

Drahtlos vielleicht nicht (je nach Modul), aber USB ist schon etwas 
umfangreicher. Da würde ich dann doch eher zu ASF und CDC greifen (was 
übrigens hervorragend funzt).
Aber du wirst so oder so nicht darum herum kommen mal das Datenblatt zu 
lesen.
Wenn du jetzt schon an so popeligen Sachen wie ADC und Clock scheiterst, 
dann wirst du beim USB, Funk und was du nicht alles noch vor hast 
sowieso scheitern.

: Bearbeitet durch User
von Stefan (Gast)


Lesenswert?

ist doch einfach, geh auf asf.atmel.com und da hast du die gesamte 
beschreibung, mit quick start guides, example codes und 
schritt-für-schritt erklärungen wie man was einbindet. du kannst auch 
eines der beispielprojekte nehmen und dir den code abgucken.

http://asf.atmel.com/docs/latest/xmegaau/html/group__udi__cdc__group.html

steht alles drin:
        Related Project(s)
In this section you can find all the projects related to the USB Device 
Interface (UDI) for Communication Class Device (CDC).

   Quick Start Guide(s)
In this section you can find a list of all Quick Start guides related to 
the USB Device Interface (UDI) for Communication Class Device (CDC).

   Interface with USB Device Core (UDC)
Structures and functions required by UDC.

   Implementation of UDI CDC
Class internal implementation.

   USB interface descriptors

The following structures provide predefined USB interface descriptors.
...


klickst nun auf den quick start guide, kommst du zu:
http://asf.atmel.com/docs/latest/xmegaau/html/udi_cdc_quickstart.html

also einfacher geht es nicht

du kannst dir auch eines der vielen videos auf atmel.com ansehen, da 
wird auch in ein paar min gezeigt wie man sowas einbindet---

oder du startest erst mal mit einer einführung in asf:
http://www.atmel.com/Images/Atmel-8431-8-and32-bit-Microcontrollers-AVR4029-Atmel-Software-Framework-User-Guide_Application-Note.pdf

von Michael (Gast)


Lesenswert?

Hallo zusammen,

vielen Dank für den vielen Input.

@Stefan: vielen Dank für die Linksammlung. Genau was ich benötige :-)


@Timmo: Keine Sorge ich scheitere nicht am ADC. Aber es ist schon etwas 
gemein, wenn Dir eine Funktion im "Hintergrund" alle Clocks abschaltet 
und man das auf den ersten Blick nicht gleich erkennen kann (z.B. Header 
Description).

VG,
Michael

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.