Forum: Mikrocontroller und Digitale Elektronik Frage zur Initialisierung des Analog Comperators


von H. G. (ledi)


Lesenswert?

Hallo!

Ich möchte den Analog Comperator des AT90PWM316 für eine Überwachung der 
Akkuspannung verwenden.
Über einen Spannungsteiler prüfe ich am ACMP1 (PC6) die aktuelle 
Spannung und möchte sie mit der internen Referenzspannung (2,56V / 1,6) 
vergleichen.
Bei Unterschreitung soll ein Interrupt ausgelöst werden.

Wie kann ich dem Controller nun mitteilen, das ich die int. 
Referenzspannung / 1,6 verwenden möchte?

Hier meine derzeitige Initialisierungsroutine:
1
void ACMP1_Init (void)
2
{
3
  DDRC &=    ~(1<<PC6);  // ACMP1 = input
4
  AC1CON |=  (1<<AC1EN)  // Analog Comperator1 enable
5
  AC1CON |=  (1<<AC1IE)  // Analog Comperator1 Interrubt enable
6
  AC1CON |=  (1<<AC1IS1)  // Analog Comperator1 Interrupt sensitivity on falling edge
7
}

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Bits AC1M2, AC1M1, AC1M0 im Analog Comparator 1 Multiplexer register 
AC1CON definieren den Teiler von Vref.

Vref selbst stellt man über die Bits REFS1, und REFS0 im ADC Multiplexer 
Register – ADMUX ein.

2.56V/1,6 wäre IMHO

ADMUX  |= (1<<REFS1)|(1<<REFS0);
AC1CON |= (1<<AC1M1)|(1<<AC1M0);

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Heimo G. schrieb:
> Comperator
Jawoll mein Imparator.
Oder wars doch andersrum?  Comp-A-rator / Imp-E-rator

> möchte sie mit der internen Referenzspannung (2,56V / 1,6) vergleichen.
Hast du mal geschaut, wie genau diese interne Referenz ist?
VINT Internal Voltage Reference   min 2.52   typ 2.56   max 2.6 V
Das solltest du beachten...

> Wie kann ich dem Controller nun mitteilen, das ich die int.
> Referenzspannung / 1,6 verwenden möchte?
Such mal im Datenblatt nach AC1M2..0

von G.Mischnix (Gast)


Lesenswert?

...da haben es die Italiener heute einfach:

comperare = kaufen
comparare = vergleichen

...immer die Roemer

hai capito ?

von H. G. (ledi)


Lesenswert?

OK! Das habe ich soweit.

Jetzt habe ich "nur" mehr das Problem, das ich am Eingangspin (hier wird 
über den Spannungsteiler der zu vergleichende Wert gemessen) permanent 
0V habe.
1
DDRC &=    ~(1<<PC6);  // ACMP1 = input

Wie schalte ich den Pin hochohmig (auf Tristate)?

von Stefan B. (stefan) Benutzerseite


Lesenswert?

DDRC  &= ~(1<<PC6); // ACMP1 Input
PORTC &= ~(1<<PC6); // Interner Pullup aus

Schaltung?
                       Vx = ?
                       |
                       # R1 = ?
                       #
                       |
ACMP1 (PC6) o----------+
                       |
                       # R2 = ?
                       #
                       |
                      ---
                      GND
                                    |
Vx fehlt? Multimeter nehmen und an -+ messen, wenn ACMP1 nicht 
angeschlossen ist.                  |

Falscher Pin am µC genommen? Lupe nehmen.

Lötbrücke des µC Pins zum Nachbarpin? µC aus Fassung nehmen und 
Isolationswiderstand der Pins an der Fassung messen. Wenn Fassung fehlt 
Lupe nehmen. Benachbare Pins als IO-Pin betreiben und auf Coreaktion bei 
PC6 achten.

Schutzdiode gegen GND an ACMP1 geschossen? Funktioniert der Pin noch als 
IO-Pin?

von H. G. (ledi)


Lesenswert?

So sieht die Schaltung aus.
Am PC6 messe ich 0V.

Schaltungsaufbau ist sicher OK! Keine Lötbrücken od. vertauschte Pins.

Schaltung:
                       Vx = 16V
                       |
                       # R1 = 800k
                       #
                       |
ACMP1 (PC6) o----------+  Vy = 0V !!!
                       |
                       # R2 = 150k
                       #
                       |
                      ---
                      GND

von Karl H. (kbuchegg)


Lesenswert?

800k zu 150k ist schon recht heftig.
Kannst du das nicht mindestens 1 Zehnerpotenz niedriger machen?

von H. G. (ledi)


Lesenswert?

Ja, ginge schon.
Aber wird das mein Problem lösen?

von Karl H. (kbuchegg)


Lesenswert?

Heimo G. schrieb:
> Ja, ginge schon.
> Aber wird das mein Problem lösen?

Möglich.
Du gibst ja Information immer nur in kleinen Häppchen frei, so das man 
nicht überprüfen kann, welche anderen Fehler/Probleme da noch vorhanden 
sind.

Typisches Newbie Verhalten: Die Software kanns nicht sein und die 
Hardware kanns auch nicht sein. Also brauch ich dazu auch nichts posten. 
Und wenn ich etwas posten muss, dann nur infinitesimale Ausschnitte, 
damit man bloss nichts erkennen kann. Ein guter Baumeister kann 
schliesslich auch aus eine Mikroskopaufnahme des verwendeten Sandes 
erkennen, warum der Dachstuhl eingestürzt ist.

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.