mikrocontroller.net

Forum: Compiler & IDEs zu blöd für Analog Komparator?


Autor: Philipp Cochems (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich würde gern den Analog Komparator aus dem 2313 nutzen. Zum testen
habe ich folgendes gemacht:

PINB1 (AIN1) gegen Masse
PINB0 (AIN0) gegen +5V

und an PINB3 (OC1) eine LED

das Programm sieht folgendermassen aus:


ACSR = 0x00;
ACSR |= (1<<ACO) | (1<<ACIC);
ACSR &= ~(1<<ACD);

DDRB = 0x00; PORT B als Eingang
DDRB |= (1<<PINB3); PINB3 als Ausgang

nun sollte doch der Komparartor Ausgang an PINB3 liegen oder? Aber egal
was ich mit PB0 und PB1 mache PB3 bleibt auf 0.

Hat jmd eine Idee was ich falsch mache?

Vielen Dank schonmal Philipp

Autor: sven (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ok, blöd vielleicht nicht, aber sehr unwissend :-)

dein code schritt für schritt:

1.)
PINB1 (AIN1) gegen Masse
PINB0 (AIN0) gegen +5V
----> so weit, so gut

und an PINB3 (OC1) eine LED
----> hier liegt denke ich dein erster denkfehler. unten schreibst du,
das hier jetzt der ausgang des komparator sein sollte... wie kommst du
da drauf???? OC1 steht für output compare und gehört weder zum analog
comparator, noch ist er dessen ausgang!!!! er gehört zu einm timer und
du kannst ihn zb zur pwm-erzeugung nutzen... immer das datenblatt
gründlich lesen... sinnvoll programmieren kann der, der seine
zielplattform gut kennt ;-)

ACSR = 0x00;
----> ok

ACSR |= (1<<ACO) | (1<<ACIC);
----> 1.) wie du im DATENBLATT erkennen kannst, ist ACO ein readonly -
bit... spar dir es zu beschreiben... ausserdem: ACO ist dein ersehnter
ausgang des comparator ;-)
2.) hier dämmert die idee, wie der zusammehang zu timer1 zustande
kommt, dessen ausgang du benutzen möchtest... aber auch hier klärt das
datenblatt auf, und verrät, das nun der comparator einen capture im
timer1 auslösen kann... dh: er friert den aktuellen zählerstand ein und
kopiert ihn ins input-capture register des timer1... damit kannst du zb
pulsweiten messen... aber oc1 bleibt davon eigentlich unbeeindruckt
;-)

ACSR &= ~(1<<ACD);
----> ok, obwohl du zwei zeilen früher eh schon gelöscht hast...
speicherfressender pragmatismus :-)

DDRB = 0x00; PORT B als Eingang
DDRB |= (1<<PINB3); PINB3 als Ausgang
----> ok

nun sollte doch der Komparartor Ausgang an PINB3 liegen oder?
----> NEIN

Aber egal
was ich mit PB0 und PB1 mache PB3 bleibt auf 0.
----> KLAR

Hat jmd eine Idee was ich falsch mache?
----> versuchs mal damit:

/////////////////////////////////////////////////
unsigned char tmp;

DDRB = 0x00; PORT B als Eingang
DDRB |= (1<<PINB3); PINB3 als Ausgang

ACSR = 0;
for(;;){
    tmp = ACSR;
    tmp = (tmp >> 2);
    tmp &= 0x08;
    PORTB &= 0xf7;
    PORTB |= tmp;
}
///////////////////////////////////////////////////

...es gibt aber noch tausend andere wege :-)

Autor: Philipp (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja danke, habe das Problem inzwischen anders gelöst. Wollte ohnehin den
Compare Int nutzen um den Komparator auszuwerten, deshalb übersprang
ich die Idee aus meinem Posting und das klappte sofort.

Ich war irgendwie mit einem Brett vor dem Kopf davon überzeugt das
dieser PIN OC der Ausgang sein könnte. Deshalb schrieb ich auch ACO :)

War echt blind, jetzt gibt das Datenblatt auch wieder Sinn. Vielen Dank
das du mir die Augen geöffnet hast.

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.