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


von Jens (Gast)


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.

von Johannes M. (johnny-m)


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.

von Jens (Gast)


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?

von Johannes M. (johnny-m)


Lesenswert?

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

von Jens (Gast)


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 ...

von Johannes M. (johnny-m)


Lesenswert?

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

von Andreas K. (a-k)


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?

von Jens (Gast)


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)

von Falk B. (falk)


Lesenswert?

@ Jens (Gast)

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

Das kann man auch einfacher schreiben, siehe Bitmanipulation.

1
if(PIND & (1<<PD1))

MfG
Falk

von Jens (Gast)


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

von Jens (Gast)


Lesenswert?

scheinbar ist das Problem der Menschheit ein Rätsel oder?

von Johannes M. (johnny-m)


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.

von Jens (Gast)


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

von Johannes M. (johnny-m)


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...

von Jens (Gast)


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.

von AVRFan (Gast)


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?

von Jens (Gast)


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

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.