Forum: Mikrocontroller und Digitale Elektronik Analog Comparator des ATMega8 konfigurieren und in C verwenden


von Christian W. (christian_w)


Angehängte Dateien:

Lesenswert?

Hallo, ich werd leider über die Suche nicht fündig, wie ich nun genau 
den Analog Comparator vom ATMega8 verwende. Konkrete C-Beispiele gibts 
im technischen Datenblatt zum AC ja auch nicht. Zuviele verstreute Infos 
überall ;-)

Nun zum Thema:

Funktioniert der angehängte C-Code so, um den AC abfragen zu können?

Das spätere Programm läuft auf einem ATMega8L-8PU.

Danke

Christian
1
// Abfragen auf steigende Flanke
2
ACSR |= (1<<ACIS1);
3
ACSR |= (1<<ACIS0);
4
5
// Analog Comparator ein
6
ACSR |= (1<<ACD);
7
8
// Status vom AC abfragen
9
if ( (ACSR & (1<<ACO)) )
10
{
11
  // ...  
12
}

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Ich hatte das mal mit Interrupt gemacht. Als pos. Vergleichsspannung 
hatte ich die intere Bandgap benutzt, einfach um für das Beispiel nicht 
zwei Spannungen anlegen zu müssen
http://www.mikrocontroller.net/articles/Pollin_Funk-AVR-Evaluationsboard#Analog_Comparator

In deinem Code macht mich die Zeile
> ACSR |= (1<<ACD);
stutzig. ACD heisst Analog comparator disable

von Christian W. (christian_w)


Lesenswert?

hoppla, es sollte natürlich heißen:
1
// Abfragen auf steigende Flanke
2
ACSR |= (1<<ACIS1);
3
ACSR |= (1<<ACIS0);
4
5
// Analog Comparator ein
6
ACSR &= ~(1<<ACD);
7
8
// Status vom AC abfragen
9
if ( (ACSR & (1<<ACO)) )
10
{
11
  // ...  
12
}

geht das dann so?

die interne referenzspannung zu verwenden ist mir etwas zu unsicher da 
ich schon öfter gelesen habe dass die nicht immer gleich ist, mal bei 
1,23 und dann mal wieder anders...

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Ausprobieren.

Zwei Potis im 10K Bereich (unkritisch) jeweils zwischen 5V und GND, 
Schleifer an AIN0 und AIN1. Schleiferstellung vorher ausmessen und 
Hilfsskala anzeichen, damit du weisst, welche Spannung in etwa an den 
Pins anliegt. Oder Multimeter benutzen.

Eine LED mit Vorwiderstand an einen freien Pin. In die IF-Abfrage eine 
Anweisung zum Einschalten der LED und in den else-Fall eine Anweisung 
zum Ausschalten der LED.

Wenn alles funktioniert, Programm mit kurzer Beschreibung in den Artikel 
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#AC_.28Analog_Comparator.29 
posten (DANKE ;-)

von Stefan B. (stefan) Benutzerseite


Lesenswert?

ADD: Ich denke dass du die Flankentriggerung nur hast, wenn du mit dem 
Interrupt arbeitest. Ohne Interrupt hast du über das ACO-Bit einen 
statischen Vergleichswert IST<SOLL oder IST>SOLL. Ausgabe bei IST=SOLL 
müsste im Datenblatt spezifiziert sein (ACO-Bit 1?).

von Christian W. (christian_w)


Lesenswert?

klingt verständlich das mit dem interrupt. aber ich muss nicht zwischen 
steigender oder fallender flanke unterscheiden, sondern nur einen status 
wissen. außerdem: so zeitkritisch ist es bei mir nicht, dass es auf die 
mikrosekunde genau geht. eine abfrage alle paar millisekunden über eine 
if-schleife reicht da völlig aus. ich mach mal einen versuchsaufbau und 
werde berichten ;))) hab auch noch etwas angst vor interrupts, die hab 
ich bisher noch nicht verwendet, ist neuland.

von Karl H. (kbuchegg)


Lesenswert?

Dann gewöhn dich als Allererstes daran, dass ein if keine Schleife ist.
Das Wesen einer Schleife besteht darin, dass etwas wiederholt wird. 
Daher auch der Name. Klebt man ein Tonband zu einer Schleife zusammen 
und lässt es abspielen, so wird dieselbe Musik wieder und immer wieder 
wiederholt.
In einem if wird nichts wiederholt, sondern eine Auswahl aus 2 
Möglichkeiten getroffen. Daher ist der Ausdruck 'Schleife' hier nicht 
angebracht.

von Christian W. (christian_w)


Lesenswert?

ich weiß was eine if abfrage ist aber ich kann leider hier in diesem 
forum meine beiträge nicht mehr bearbeiten. warum auch immer!????

außenrum (im code oben nicht sichtbar) ist noch eine while-SCHLEIFE.

grins

Christian

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.