www.mikrocontroller.net

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


Autor: H. G. (ledi)
Datum:

Bewertung
0 lesenswert
nicht 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:
void ACMP1_Init (void)
{
  DDRC &=    ~(1<<PC6);  // ACMP1 = input
  AC1CON |=  (1<<AC1EN)  // Analog Comperator1 enable
  AC1CON |=  (1<<AC1IE)  // Analog Comperator1 Interrubt enable
  AC1CON |=  (1<<AC1IS1)  // Analog Comperator1 Interrupt sensitivity on falling edge
}

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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);

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: G.Mischnix (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
...da haben es die Italiener heute einfach:

comperare = kaufen
comparare = vergleichen

...immer die Roemer

hai capito ?

Autor: H. G. (ledi)
Datum:

Bewertung
0 lesenswert
nicht 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.
DDRC &=    ~(1<<PC6);  // ACMP1 = input

Wie schalte ich den Pin hochohmig (auf Tristate)?

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: H. G. (ledi)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

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

Autor: H. G. (ledi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, ginge schon.
Aber wird das mein Problem lösen?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

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.