www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ATtiny2313 analog comparator - nix tut sich


Autor: Jens (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also eigentlich ein einfaches Problem - man nehme eine Spannung und 
schließe sie an den analog comparator des Controllers an (AIN1), als 
Referenz dient ein Spannungsteiler, der ca. 2,1V liefert (AIN0). Zur 
Auswertung dient eine LED. So und dann schreibt man folgenden Code:

void main (void)
{
DDRD = 0b00000000;      // PD0,1,2,3,4,5 Eingang
PORTD = 0b00000010;    // Pull-up PD1
DDRB = 0b11100100;      // PB0,1 Eingang, PB2,5,6,7 Ausgang
ACSR = 0b01000000;
while(1)
  {
  if ((ACSR & 0b00100000) == 0b00100000)
    {
    PORTB = PORTB | 0b01000000;
    }
  else
    {
    PORTB = PORTB & 0b10100100;
    }
  }
}

Aber es passiert rein gar nix an meiner LED, egal wie sich die varibale 
Spannung verhält. Liegt das jetzt an meinem Code oder daran, daß es wenn 
überhaupt nur mit Interrupt funktionert?
Danke schonmal vorab.

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn das ACBG-Bit in ACSR gesetzt ist, wird die interne Bandgap-Referenz 
verwendet. Dein Spannungsteiler an AIN0 ist bei der Konfiguration 
nutzlos. Und nein, man braucht nicht unbedingt einen Interrupt, man kann 
ACO auch pollen.

Autor: Jens (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ja gut das mit ACBG-Bit weiß ich, am Anfang hab ich es ned benutzt aber 
weil sich nix tat hab ich probiert, erfolglos.
Aber wieso ist mein Spannungsteiler nutzlos?

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jens wrote:
> Aber wieso ist mein Spannungsteiler nutzlos?
Hab ich doch geschrieben: Weil Du das ACBG-Bit gesetzt hast!

Autor: Jens (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ahso ... aber mit :
ACSR = 0b00000000;

tut sich au nix, egal welche der beiden Spannungen größer zueinander 
ist, wenn ich nur wüßt warum ...

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn Du vielleicht mal erzählen könntest, an welchem Pin die LED hängt 
und was sonst noch so alles dranhängt...

Autor: Andreas K. (a-k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Funktioniert das Programm bzw. der Controller sonst irgendwie, oder hat 
der den Betrieb ganz eingestellt? Leuchtet/schaltet die LED basierend 
auf Taster statt AC? Stimmen die Spannungen an den Pins?

Autor: Jens (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
die LED hängt an PB6

Spannung VCC 5V, Vref (AIN0) 2,1V Vsig (AIN1) entweder ca.0V oder ca. 
3,1V

sonst macht der µC ja noch nix, aber wenn ich den Inahlt der if-Schleife 
vertausche dann leuchtet die LED

die LED über n Taster per Software einschalten geht ...

if((PIND & 0b00000010) == 0b00000010)

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Jens (Gast)

>if((PIND & 0b00000010) == 0b00000010)

Das kann man auch einfacher schreiben, siehe Bitmanipulation.

if(PIND & (1<<PD1))

MfG
Falk

Autor: Jens (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ja ich weiß daß das einfacher geht, aber der Mensch is n 
Gewohnheitstier, wobei das in dem Fall ausnahmsweise nicht das 
eigentliche Problem ist - wenn ich das gewußt hätte, hätte ich es mit 
nem OP gemacht

Autor: Jens (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
scheinbar ist das Problem der Menschheit ein Rätsel oder?

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jens wrote:
> scheinbar ist das Problem der Menschheit ein Rätsel oder?
Tja, in dem Code, den Du gepostet hast, kann ich keinen fatalen Fehler 
entdecken. Vielleicht schickst Du ja mal den kompletten Source-Code.

Autor: Jens (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
gut ... oder vielmehr schlecht ... um das Programm komplett zu machen 
fehlt nur:
#include <avr/io.h>
#include <avr/signal.h>

erstellt hab ich das ganze mit dem Atmel AVR Studio SP3

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jens wrote:
> erstellt hab ich das ganze mit dem Atmel AVR Studio SP3
Da das AVRStudio nur Assembler versteht, gehe ich mal davon aus, dass Du 
den WINAVR auch korrekt installiert hast...

Autor: Jens (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ja klar ... ist nicht mein erstes C-Programm und wenn ich anstatt des 
Komparators einen Taster zur Ansteuerung der LED verwende, dann 
funktioniert das Ganze ja reibungslos.
Mein Controller is übrigens SMD und neu aus der Stange.

Autor: AVRFan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was passiert, wenn Du AIN1 direkt mit VCC oder mit GND verbindest? 
Kannst Du so die LED zum Leuchten/Verlöschen bringen?

Wo in Deinem Code ist festlegt, für welchen Controller compiliert werden 
soll?

Autor: Jens (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
das muß ich ausprobieren - wird ne Fummellei - ist ne geätzte Platine 
mit SMD-Controller aber mal schauen.

im AVR-Studio habe ich ausgewählt, daß mein Controller ein Attiny2313 
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.