Forum: Compiler & IDEs ADMUX für ADC0 und ADC1 bei ATTiny45


von mgolbs (Gast)


Lesenswert?

Hallo,

ich will am ATTiny45 an den ADC0 sowie ADC1 messen. Bei der 
Initialisierung für ADCO müsste ich doch folgendes im Code angeben
1
ADMUX =
2
            (1 << ADLAR) |     
3
            (0 << REFS1) |     
4
            (0 << REFS0) |     
5
            (0 << MUX3)  |     // use ADC0 for input (PB5) bit 3
6
            (0 << MUX2)  |     // use ADC0 for input (PB5) bit 2
7
            (0 << MUX1)  |     // use ADC0 for input (PB5) bit 1
8
            (0 << MUX0);       // use ADC0 for input (PB5) bit 0
9
10
  ADCSRA = 
11
            (1 << ADEN)  |
12
            (1 << ADPS2) | 
13
            (1 << ADPS1) |
14
            (1 << ADPS0);     // Division Factor 128 ADC Prescaler Bits

beim ADC1
1
ADMUX =
2
            (1 << ADLAR) |     
3
            (0 << REFS1) |     
4
            (0 << REFS0) |     
5
            (0 << MUX3)  |     // use ADC1 for input (PB2) bit 3
6
            (0 << MUX2)  |     // use ADC1 for input (PB2) bit 2
7
            (0 << MUX1)  |     // use ADC1 for input (PB2) bit 1
8
            (1 << MUX0);       // use ADC1 for input (PB2) bit 0
9
10
  ADCSRA = 
11
            (1 << ADEN)  |
12
            (1 << ADPS2) | 
13
            (1 << ADPS1) |
14
            (1 << ADPS0);     // Division Factor 128 ADC Prescaler Bits

Nun zur eigentlichen Frage. Muss ich die wechselnde Initialisierung nach 
jeder Messung am jeweiligen Kanal widerholen?

Über Tipps und Infos wäre ich sehr dankbar.

Gruß Markus

von Karl H. (kbuchegg)


Lesenswert?

mgolbs schrieb:

> Nun zur eigentlichen Frage. Muss ich die wechselnde Initialisierung nach
> jeder Messung am jeweiligen Kanal widerholen?

Die komplette INitialisierung nicht, aber die MUX Bits musst du 
umschalten (und zwar ohne, dass du was anders im Register veränderst)

Du hast nun mal nur einen ADC. Und mit den MUX Bits legst du fest, auf 
welchen Pin der geschaltet werden soll.
Du MUX Bits kannst du allerdings zwischendurch wechseln, wie es dir 
passt. Wenn der ADC das nächste mal gestartet wird, dann sampelt er den 
Pin, der mittels MUX Bits als Eingang festgelegt wurde.

von Michael S. (mikel_x)


Lesenswert?

Hi,

Nein, natürlich nicht. Du hast ja bei beiden Messungen identische 
Initialisierungen.

Nach der Init. den Mess-Pin mit den Mux-Bits auswählen und dann die 
Conversion starten... wenn abgeschlossen, auslesen per Polling, oder 
Int... etc...

von Floh (Gast)


Lesenswert?

Du weißt ja, das ADC0 auf dem Resetpin liegt, oder? Um den nützen zu 
können, müsstest du den Reset deaktivien.

von mgolbs (Gast)


Lesenswert?

Hallo,

danke für die Informationen.

Würde es schaden, wenn ich jedes mal die komplette Initialisierung nach 
der erfolgten Messung machen würde?

Das würde doch auch reichen?
1
ADMUX |= (0 << MUX0); //use ADC0 on PB5

oder
1
ADMUX |= (1 << MUX0); //use ADC1 on PB2

Den Reset muss ich per "Fuse" abschalten?

Was gehe ich für ein Risiko ein, den Reset disabled zu haben?

Zurück bekomme ich diesen doch wieder? 12V an PB5...?

Gruß und Dank Markus

von Karl H. (kbuchegg)


Lesenswert?

mgolbs schrieb:
> Hallo,
>
> danke für die Informationen.
>
> Würde es schaden, wenn ich jedes mal die komplette Initialisierung nach
> der erfolgten Messung machen würde?

Nein.
Wenn du willst kannst du auch das machen.

>
> Das würde doch auch reichen?
>
>
1
> ADMUX |= (0 << MUX0); //use ADC0 on PB5
2
>

wie löscht man denn ein Bit?

Bitmanipulation

> Den Reset muss ich per "Fuse" abschalten?

Lass den Reset in Ruhe!

> Was gehe ich für ein Risiko ein, den Reset disabled zu haben?

Dass du den µc nur noch per HV-Programmierung programmieren kannst (oder 
per Bootloader). ISP ist dann nicht mehr.

von mgolbs (Gast)


Lesenswert?

Hallo,

danke für die Informationen. Löschen oder auf 0 seten, was ist da der 
Unterschied?

Geht so was?
1
ADMUX &= ~(1<<1);

Ich werde die Pins noch mal tauschen. Als AD's ADC2 und ADC3 nutzen und 
als IO dann die PB0 und PB1 beim ATTiny45.


Gruß und Dank Markus

von Karl H. (kbuchegg)


Lesenswert?

mgolbs schrieb:
> Hallo,
>
> danke für die Informationen. Löschen oder auf 0 seten, was ist da der
> Unterschied?

Keiner. Sind nur 2 unterschiedliche Sprechweisen für dasselbe.

> Geht so was?
>
>
1
> ADMUX &= ~(1<<1);
2
>

lies den Link.
Deshalb hab ich ihn dir gegeben.


> Ich werde die Pins noch mal tauschen. Als AD's ADC2 und ADC3 nutzen und
> als IO dann die PB0 und PB1 beim ATTiny45.

vernünftig.

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.