Forum: Mikrocontroller und Digitale Elektronik ATtiny1616 Multiplexer Pinzuweisung für ADC


von Marko R. (marko_rocznik)


Angehängte Dateien:

Lesenswert?

Der ATtiny1616 (20 pin Gehäuse) hat 2 ADCs. Im Datenblatt auf Seite 18 
findet man, dass ADC0-AIN8 auf Pin 6 geht und ADC1-AIN8 auf Pin 14.

Im Abschnitt "ADC" (ab Seite 356) findet man aber nicht, wie man 
zwischen beiden ADCs umschaltet. Es gibt nur 1 Ergebnisregister, nur 1 
Controllregister usw.

Ich brauche 10 analoge Eingänge, daher muss ich beide ADCs nutzen. 
Schaltplan ist angehängt.

Was habe ich übersehen?

Viele Grüße!
 Marko

: Bearbeitet durch User
von Patrick J. (ho-bit-hun-ter)


Lesenswert?

Hi

Datenblatt zum ATtiny1614  ATtiny1616  ATtiny1617
http://www.mouser.com/ds/2/268/40001893B-1116230.pdf
Seite 372
MUXPOS
Damit stellst Du den geünschten ADC ein - geht immer nur nacheinander, 
weshalb hier die Quelle eingestellt werden muß.

MfG

PS: Datenblatt nur überflogen, war auch 'nur' der erste Google-Treffer.

von Achim S. (Gast)


Lesenswert?

Marko R. schrieb:
> Im Abschnitt "ADC" (ab Seite 356) findet man aber nicht, wie man
> zwischen beiden ADCs umschaltet. Es gibt nur 1 Ergebnisregister, nur 1
> Controllregister usw.

Den Registersatz, der ab S. 356 beschrieben wird, gibt es für jede 
Instanz des ADCs einmal. Du musst den Adressoffset zur jeweiligen 
Basisadresse des gewünschten ADC dazuzählen.

Alos: x610 ist Ergebnisregister für ADC0, 0x650 ist das Ergebnisregister 
für ADC1

von Marko R. (marko_rocznik)


Lesenswert?

Nur dass das Datenblatt darüber nicht sagt. Wenn ich eine Suche nach 
"610" mache ist die ergebnislos. Wo hast du die her?

: Bearbeitet durch User
von P. M. (mikro23)


Lesenswert?

Seite 33

7.1 Peripheral Module Address Map

0x0600 ADC0 Analog to Digital Converter/Peripheral Touch Controller
0x0640 ADC1 Analog to Digital Converter instance 1

von Achim S. (Gast)


Lesenswert?

P. M. schrieb:
> Seite 33
>
> 7.1 Peripheral Module Address Map

So isset, da findet sich die Basisadresse im Datenblatt.


Die header-Datei iotn1616.h wäre auch eine gute Quelle:

#define ADC0                  (*(ADC_t *) 0x0600) /* Analog to Digital 
Converter */
#define ADC1                  (*(ADC_t *) 0x0640) /* Analog to Digital 
Converter */
...
typedef struct ADC_struct
{
    register8_t CTRLA;  /* Control A */
    register8_t CTRLB;  /* Control B */
....

oder wenn man nicht mit dem ADC_struct arbeiten mag:
#define ADC0_RES  _SFR_MEM16(0x0610)
#define ADC1_RES  _SFR_MEM16(0x0650)


Auch die Code-Vervollständigung im Atmel-Studio hilft weiter, wenn man 
einfach mal AD eingibt und sich die Auswahlmöglichkeiten anschaut.

von Peter D. (peda)


Lesenswert?

Figure 3-1. ATtiny1614/1616/1617 Block Diagram
AIN[11:0] gehen auf ADC0 und auf ADC1.
Jeder ADC hat sein eigenes MUXPOS-Register.

von Gerhard (Gast)


Lesenswert?

Peter D. schrieb:
> AIN[11:0] gehen auf ADC0 und auf ADC1.
> Jeder ADC hat sein eigenes MUXPOS-Register.

Ich stelle an einem ATTiny1614 Rev.A gerade etwas anderes fest.
An sämtlichen ADC-Pins AIN0-AIN0B (ADC1_MUXPOS= 0-0bH) lese ich mit ADC1 
nur irgendwas Nähe 3FFH aus (dasselbe wie bei ADC1_MUXPOS 0bH= Internal 
Reference). ADC0 mit der Source-Auswahl in ADC0_MUXPOS funktioniert 
normal lt. Beschreibung im Datenblatt.

von Gerhard (Gast)


Lesenswert?

Gerhard schrieb:
> Peter D. schrieb:
>> AIN[11:0] gehen auf ADC0 und auf ADC1.
>> Jeder ADC hat sein eigenes MUXPOS-Register.
>
> Ich stelle an einem ATTiny1614 Rev.A gerade etwas anderes fest.

Hab mich etwas vertan, sorry.
Die physischen analogen Portpins sind außerdem den Muxpositionen AINx 
bei ADC0 und ADC1 sehr unterschiedlich zugeordnet. Das hatte ich so 
intuitiv wie irrtümlich bei beiden ADCs als gleich vorausgesetzt.

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.