Forum: Mikrocontroller und Digitale Elektronik Problem mit Analog Comparator, arbeitet nicht atmega32,


von Benjamin P. (bennip)


Angehängte Dateien:

Lesenswert?

Hi,

ich programmiere erst seit einer Woche und stehe mal wieder vor einem 
Problem. Ich will ein kleines Programm schreiben um den Analog 
Comparator zu testen, benutze den Atmega32 und ein STK500 Board, habe 
ein Poti zwischen Pin19 (VTG) und PIN1 (GND) hängen mit dem 
Mittelabgriff an PIN27 (PB3/AIN1), mit dem ich meine IST-Spannung 
einstellen kann. Meine SOLL-Spannung ist die interne Referenzspannung 
(ca. 1,3V laut Datenblatt).
Das Programm habe ich als Anhang beigefügt.
Die LEDs gehen für 2s an, dann wieder aus, soweit ok. Nur bleiben sie 
dann aus und es passiert nichts mehr.
Wäre echt super wenn mir jemand helfen könnte.

Mfg

Benni

von Michael (Gast)


Lesenswert?

Ohne jetzt ins Datenblatt geschaut zu haben, aber ich denke, du 
aktivierst den AC schon nicht richtig:

ACSR &= 0<<ACD;      //AC aktivieren

Im Tutorial zu lesen ist:
 x |= (1 << Bitnummer);  // Hiermit wird ein Bit in x gesetzt
 x &= ~(1 << Bitnummer); // Hiermit wird ein Bit in x geloescht

Es müsste daher heißen, um das ACD Bit in ACSR zu setzen:

ACSR |= (1 << ACD);

Auch die nächsten Zeilen sollten diesbezüglich überarbeitet werden.

Viele Grüße
Michael

von Benjamin P. (bennip)


Lesenswert?

Danke für die schnelle Antwort, funktioniert leider immer noch nicht. 
Laut Datenblatt und Tutorial muss das ACD-Bit 0 sein, um den AC zu 
aktivieren. Habe dies nun mit der Zeile "ACSR &= ~(1<<ACD);" gemacht, es 
hat sich aber nichts verändert.

Grüße

von spess53 (Gast)


Lesenswert?

Hi

>ACSR |= (1 << ACD);

Im Gegensatz zu anderen Bits schaltet diese Zeile den Comparator ab:

 ACD: Analog Comparator Disable

Mir kommen allerdings diese Zeilen komisch vor:

if (ACO == 0)
else if (ACO == 1)

ACO steht eigentlich nur für eine Bitposition. In dem Fall 5.

MfG Spess

von spess53 (Gast)


Lesenswert?

Hi

Ändere mal deine Abfrage in

if (ACSR & (1<<ACO))
...
else
...

Ohne Gewähr, da ich kein C benutze.

MfG Spess

von Benjamin P. (bennip)


Angehängte Dateien:

Lesenswert?

So habe nun den neuen Code angehängt. Programm funktioniert nun 
teilweise.
Habe die Abfrage geändert, frage nun das Register ACSR ab. Was ich nicht 
verstehe ist folgendes:
1. Wenn ich im laufenden Betrieb das Poti verändere, ändern sich die 
LEDs nicht. Dazu muss ich immer erst resetten.
2. Wenn eine Spannung zw. 0,4 und 2,3 Volt an AIN1 anliegt leuchtet gar 
keine LED, bei Werten unter 0,4V und über 2,3V funktioniert es.
Hat jemand eine Ahnung woran das liegt?

von Benjamin P. (bennip)


Lesenswert?

So habe mittlerweile rausgefunden, dass sich, wenn ich einen Haken bei 
Fuses/Boden im AVR Studio setze, nur bei 1V - 2,3V nichts tut.

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.