Setzen der analogen Referenz für die ADC's des ATmega328P

OP #4733525
Lesenswert?
• ▲
▼
Hallo Community,

ich habe meinen ATmega328P neu geflasht, sodass er mit einem internen 
Takt von 8MHz läuft. Der Sinn dahinter war, dass ich den µC unabhängig 
vom Arduino Uno Board betreiben kann. Das hat auch soweit funktioniert 
und er reagiert auf digitale Signale etc. Das Arduino Uno Board benutze 
ich dabei als ISP, um meine Programme auf den geflashten µC zu laden.
Nun möchte ich analoge Spannungswerte von einem Spannungsteiler an 2 der 
6 ADC's einlesen. Dies konnte ich auf dem Arduino Uno Board problemlos 
realisieren, da für die ADC's standardmäßig eine Referenzspannung von 5V 
vordefiniert ist.
Wie ist das nun bei dem geflashten µC? Reicht es, wenn ich ein Programm 
hochlade, in dem der Befehl analogReference(EXTERNAl) steht, oder muss 
ich das spezifisch mit Register setzen machen, also z.B.:

void setup()
{
 // Select Vref=AVcc
 ADMUX |= (1<<REFS0);
 //set prescaller to 128 and enable ADC
 ADCSRA |= (1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0)|(1<<ADEN);
}

Und falls ich die Register so setzen muss, kann ich dann diese Befehke 
in die setup-Funktion der Arduino IDE schreiben, oder muss ich dafür 
noch Bibliotheken includen?

Vielen Dank.
#4733618
Lesenswert?
• ▲
▼
Simon H. schrieb:
> Wie ist das nun bei dem geflashten µC?

Also DU hast den Bootloader entfernt beim flashen und den Takt 
verändert. Das Ändert an der Hardware ja erstmal nichts und 
analogReference(EXTERNAl) sollte ausreichen / lässt sich ja auch einfach 
testen.

Nur mal INteressehalber, weil ich ein paar R3-Clones rumliegen habe: Wie 
flasht Du denn jetzt Dein Programm .hex auf den Chip? Mit einem externen 
ISP?
OP #4733658
Lesenswert?
• ▲
▼
Hallo Rainer,

Rainer U. schrieb:
> Nur mal INteressehalber, weil ich ein paar R3-Clones rumliegen habe: Wie
> flasht Du denn jetzt Dein Programm .hex auf den Chip? Mit einem externen
> ISP?


Ich verwende das Arduino Board als ISP. Ich habe mich dabei an die 
Anleitung auf folgender Seite gehalten: 
https://www.arduino.cc/en/Tutorial/ArduinoToBreadboard

Auf dieser Seite ist einmal das Flashen beschrieben, woraufhin der µC 
mit einem externen 16 MHz Quarz betrieben werden kann und einmal das 
Flashen, woraufhin der µC mit einem internen Takt von 8MHz läuft. Das 
Problem ist nur, dass einem diese Vorgehensweise wenig Eigenspielraum 
zur Verfügung stellt, da man auf diese zwei Optionen festgesetzt ist, 
obwohl ja der ATmega328 mit einigen anderen internen oder externen 
Takten laufen könnte.

Rainer U. schrieb:
> analogReference(EXTERNAl) sollte ausreichen / lässt sich ja auch einfach
> testen.

Hättest du eine Idee, mit der man überprüfen kann, ob die Einstellungen 
übernommen wurden?
OP #4733662
Lesenswert?
• ▲
▼
Arduino F. schrieb:
> Beim UNO ist es auch nicht EXTERNAL sondern DEFAULT.

Ja beim Uno ist DEFAULT eingestellt. Das ist richtig. Das Problem ist 
nur, dass die DEFAULT-Einstellung eine 5V-Referenzspannung für 
ADC-Funktionen festlegt. Wenn der ATMega-Chip vom Board getrennt und 
"selbstständig" läuft, dann kann allerdings maximal 1,1V als chipinterne 
Referenzspannung gewählt werden. Wenn ich nun 5V Referenzspannung haben 
möchte, muss ich diese extern hinzuschalten (am Besten von AVCC auf 
AREF). Deshalb brauche ich den Code zur Einstellung einer externen 
Referenz.
Gast #4733685
Lesenswert?
• ▲
▼
Simon H. schrieb:
> Arduino F. schrieb:
>> Beim UNO ist es auch nicht EXTERNAL sondern DEFAULT.
>
> Ja beim Uno ist DEFAULT eingestellt. Das ist richtig. Das Problem ist
> nur, dass die DEFAULT-Einstellung eine 5V-Referenzspannung für
> ADC-Funktionen festlegt. Wenn der ATMega-Chip vom Board getrennt und
> "selbstständig" läuft, dann kann allerdings maximal 1,1V als chipinterne
> Referenzspannung gewählt werden. Wenn ich nun 5V Referenzspannung haben
> möchte, muss ich diese extern hinzuschalten (am Besten von AVCC auf
> AREF). Deshalb brauche ich den Code zur Einstellung einer externen
> Referenz.

Du sprichst in Rätseln....
Warum tut es DEFAULT nicht?
Deine Begründung verstehe ich nicht...

Tipp:
Wenn der µC auf 3,3V o.ä. läuft, solltest du Aref keinesfalls mit einer 
höheren Spannung beaufschlagen. Also keine 5V anklemmen.
#4733692
Lesenswert?
• ▲
▼
Wer sucht, der wird im Datenblatt fündig, meinst Du nicht?

Ich, an Deiner Stelle, würde mich schnellstens von der Arduino-IDE 
entfernen und das Atmel Studio mit AVR-GCC nehmen.

Du hast dann zwar keine schicken Bibliotheken mehr, bist aber auch nicht 
auf die Funktionalitäten dieser "festgenagelt". Du kannst Dir für 
sämtliche Funktionalitäten selbst Deine Bibliotheken schreiben. Nach 
einiger Zeit hast Du auch den Dreh raus, dass Du die Bibliotheken so 
schreibst, dass sie nur noch irgendwo eine external Timer-Variable oder 
ähnliches brauchen und mit ein paar Defines die Anschlüsse festgelegt 
werden.

Nicht irgendwelche Tutorials oder Webseiten sind Dein 
Hauptnachschlagewerk im Umgang mit dem Controller, sondern das 
Datenblatt und die Application Notes zum Controller. Dort steht wirklich 
alles sehr gut beschrieben.

Viele Grüße!

Sven
Gast #4733699
Lesenswert?
• ▲
▼
Sven L. schrieb:
> Ich, an Deiner Stelle, würde mich schnellstens von der Arduino-IDE
> entfernen und das Atmel Studio mit AVR-GCC nehmen.
>
> Du hast dann zwar keine schicken Bibliotheken mehr, bist aber auch nicht
> auf die Funktionalitäten dieser "festgenagelt".

Hier hast du ein "Projektionsproblem".

Mit der Arduino IDE ist man keinesfalls auf die Nutzung der Arduino Libs 
festgelegt. Mit einem "Fingerschnipps" hat man der IDE beigebogen, den 
Kram draußen zu halten.

Also:
Es gibt auch mit der IDE ein Leben neben delay() und digitalXXXX().
#4733705
Lesenswert?
• ▲
▼
Hallo Fanboy! ;)

Ja, das ist mir schon klar! Aber die Arduino-IDE als "IDE" zu bezeichnen 
ist ja schon fast eine L*ge! Das ist ein Texteditor mit 
Syntax-Highlighting, mehr nicht!

Von einer IDE erwarte ich einfach viel mehr Dinge! Mit einer 
vernünftigen IDE, sei es Atmel Studio oder Eclipse, bist Du einfach 
deutlich produktiver.

Viele Grüße!

Sven
Gast #4733720
Lesenswert?
• ▲
▼
Sven L. schrieb:
> Mit einer
> vernünftigen IDE, sei es Atmel Studio oder Eclipse, bist Du einfach
> deutlich produktiver.

Teil 1:
DU vielleicht.
Für mich gilt dein DU nicht.

Teil 2:
Zum Thema "Arduino bashing"...
Wenns dich glücklich macht, weiter so..


----------------------

Wenne auch sonst etwas verbohrt erscheinst, in einem haste recht:
Welche IDE auch immer, wenns ans Eingemachte geht, sollte man schon 
Datenblätter lesen können.

----------------------------

Sven L. schrieb:
> ist ja schon fast eine L*ge!
Hast du nicht gerade gelogen?
#4733750
Lesenswert?
• ▲
▼
Simon H. schrieb:
> Ich verwende das Arduino Board als ISP. Ich habe mich dabei an die
> Anleitung auf folgender Seite gehalten:
> https://www.arduino.cc/en/Tutorial/ArduinoToBreadboard

Ach so meinst Du, ich dachte Du lässt den Chip auf dem Board - ja dann 
musst Du noch den ARef -Pin beschalten, wie oben schon erwähnt.

Aber warum soll man das tun - auf dem Arduinp ist doch schon ein Quarz 
fertig mit drauf?
Gast #4733755
Lesenswert?
• ▲
▼
Rainer U. schrieb:
> Aber warum soll man das tun -

Da kann ich nur für mich sprechen....
Der Aufbau des UNO ist für Prototypaufbauten schon nicht schlecht. Nutze 
ich gerne. Am Ende kommt dann meist ein Standalone ATMega, mit internem 
Takt zum Einsatz. Oder ein Pro Mini, denn der ist meist billiger, als 
einzelne ATMegas.
OP #4733784
Lesenswert?
• ▲
▼
Rainer U. schrieb:
> Aber warum soll man das tun - auf dem Arduinp ist doch schon ein Quarz
> fertig mit drauf?

Das ist richtig, aber wie Fanboy schon sagt

Arduino F. schrieb:
> Am Ende kommt dann meist ein Standalone ATMega, mit internem
> Takt zum Einsatz.

So ist es bei mir auch. Erstens ist das Arduino Uno Board viel zu groß, 
um es in das Gehäuse meines Projektes zu integrieren und zweitens 
verbraucht der µC deutlich weniger Strom (ca. 20mA), als auf dem Arduino 
Board (ca. 120 mA).
Gast #4734533
Lesenswert?
• ▲
▼
Arduino F. schrieb:
> Der Aufbau des UNO ist für Prototypaufbauten schon nicht schlecht. Nutze
> ich gerne. Am Ende kommt dann meist ein Standalone ATMega, mit internem
> Takt zum Einsatz. Oder ein Pro Mini, denn der ist meist billiger, als
> einzelne ATMegas.

Ich setze den Nano ein, na gut, kostet 50ct mehr als ein Pro Mini. Dafür 
habe ich USB permanent verfügbar und kann diesen bei Bedarf auch am 
Gerät verfügbar machen: 
http://www.aliexpress.com/item/5PCS-Mini-USB-5pin-Male-to-USB-B-Female-panel-mount-type-Cable-20cm-with-screws/32375947985.html

Simon H. schrieb:
> So ist es bei mir auch. Erstens ist das Arduino Uno Board viel zu groß,
> um es in das Gehäuse meines Projektes zu integrieren

Der Uno hatte zu Zeiten des DIL-Gehäuses noch einen Sinn, aber das 
versetzte Raster der Steckverbinder ist eine Unverschämtheit. Mit dem 
(China-SMD) habe ich meine ersten Gehversuche gemacht, mehr nicht.

> und zweitens
> verbraucht der µC deutlich weniger Strom (ca. 20mA), als auf dem Arduino
> Board (ca. 120 mA).

Was machst Du verkehrt? Ich klemme meinen China-Uno samt 16x2-Display 
ans Labornetzteil und bekomme unter 35mA, nix 120mA.

Vom ProMini habe ich die Power-LED und den Spannungsregler abgelötet, da 
bleiben mir 15mA, wenn der mit Nichtstun in der Loop rennt - Deine 20mA 
passen also.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren