www.mikrocontroller.net

Forum: Compiler & IDEs analogen Ports beim Mege 8 und Mega 16


Autor: GCCDow (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie spricht man denn die analogen Ports beim Mege 8 und Mega 16 an? Hat
jemand ein Beispiel?

Autor: Peter Fleury (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Siehe Beispiel Anhang.

Autor: GCCDow (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Funktioniert das auch auf Mega16? Sieht ja reichlich komplex aus für
eine einfache analoge Messung.

#include<avr/io.h>

int main (void)
{
  DDRB = 0xFF;      // port B output

  int x = 0;

  // Activate ADC with Prescaler 16 --> 1Mhz/16 = 62.5kHz
  ADCSRA = _BV(ADEN) | _BV(ADPS2);

  for (;;) {
    // Select pin ADC0 using MUX
    ADMUX = 0;

    //Start conversion
    ADCSRA |= _BV(ADSC);

    // wait until converstion completed
    while (ADCSRA & _BV(ADSC) ) {}

    // get converted value
    x = ADC;

    // output the higher 8 bits
    PORTB = ~x>>2;
  }

}

Autor: Fiffi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo GCCDow,

>Sieht ja reichlich komplex aus für eine einfache analoge Messung.

Ich glaube du hast noch keinen komplexen Code gesehen ...


Gruß

Fiffi

Autor: GCCDow (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi
gibt es auch ein Beispiel das etwas besser erklärt wird?

Was ist denn was? Die
 "ADCSRA = _BV(ADEN) | _BV(ADPS2)" ;
...

für den Einsteiger sind es erst mal etwas wirre Bezeichnungen

Autor: Fiffi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo GCCDow,

>Was ist denn was? Die "ADCSRA = _BV(ADEN) | _BV(ADPS2)" ;

"_BV()" ist folgendermaßen in der Datei "avr/sfr_defs.h"
definiert:
"#define _BV(bit) (1 << (bit))"

"ADEN" ist mit 7 definiert, und "ADPS2" mit 2.

D.h. "_BV(ADEN)" ergibt "(1 << (7))" und das ergibt 0x80 oder
1000000 binär.

"_BV(ADPS2)" ergibt "(1 << (2))" und das ergibt 0x04 oder 100
binär.


0x80 | (oder) 0x04 ergibt 0x84 oder 10000100 binär.

Reicht daß als Erklärung ?


>für den Einsteiger sind es erst mal etwas wirre Bezeichnungen

Wir haben alle mal klein angefangen ...


Gruß

Fiffi

Autor: Malte Marwedel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der folgende Code führt eine Wandlung durch: kanal, ist der zu wandelnde
A/D Anschluss und temp01 ist die Variable für das Ergebnis.

outp(kanal, ADMUX); //Kanal wählen
outp(inp(ADCSR) | BV(ADSC), ADCSR); //setzt das ADSC Bit
while (inp(ADCSR) & BV(ADSC)); //wartet, bis die Wandlung komplett ist
temp01 = ADCW;  //das Ergebnis der Wandlung wird in temp01 geschrieben


Zum A/D Wandler Initialisieren (einmal nach dem Start des MCUs
ausführen) verwende ich folgenden Code:
outp(BV(ADEN) | BV(ADSC) | BV(ADPS0) | BV(ADPS1) | BV(ADPS2), ADCSR);
while (inp(ADCSR) & BV(ADSC));//wartet, bis der erste Konvertierung
komplett ist

Ich hab den Code mit einem AT90S4433 mit 8MHZ getestet. Angenommen, die
Registernamen haben sich nicht geändert, dürfte der Code mit jedem AVR
mit A/D Ports laufen können.

www.mikrocontroller.net/forum/read-1-2718.html#2761
war meine Grundlage für den obrigen Code.

Autor: GCCDow (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Danke, die beiden letzten Postings waren schon viel klarer! Aber wozu
muss man den A/D Wandler initialisieren ?

Und gibt es irgendwo ne Doku über die seltsamen Makros im GCC? Wer hat
sich nur so seltsamme Bezeichnungen ausgedacht, da wäre es ja mit
Zahlen verständlicher als mit Makro.

Und welche Zahl kann bei welchem Controller für Kanal stehen?

Autor: Fiffi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo GCCDow,

>Aber wozu muss man den A/D Wandler initialisieren ?

Lies dir mal das Kapitel "A/D Wandler" in dem Datenblatt deines
AVR's durch ...


>Und gibt es irgendwo ne Doku über die seltsamen Makros im GCC?

Ich finde die Doku auch nicht so toll ...

Es gibt das avr-libc Manual. (Wird von WinAVR mitinstalliert.)
Und dann gibt es irgendwo im Internet noch generelle Hilfe zu GCC.

Meiner Meinung nach müssten viel mehr Beispiele dazu. z.B. einen
Bootloader usw. ...


Gruß

Fiffi

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.