Forum: Mikrocontroller und Digitale Elektronik Comparator 2313


von TOSCHO (Gast)


Lesenswert?

Hallo,

ich versuche hier schon seit über einer Woche ein Problem mit dem 
Comparator des Attiny 2313 zu lösen.
Ich möchte zwei Spannungen an AIN0 und AIN1 vergleichen und dann einen 
Ausgang setzen.

ACD:=0  Komparator einschalten
PORTB.0:=0  Pullup aus
PORTB.1:=0  Pullup aus

PortD.3:= ACO;

leider geht gar nichts. Kann mir vielleicht jemand helfen. Vielen Dank 
schon mal.

TOSCHO

von peter-neu-ulm (Gast)


Lesenswert?

Na, erst mal die Reihenfolge ändern: den Komparator erst dann 
einschalten, wenn die pull-up-Manipulationen vorbei sind.

Vielleicht sogar einige NOP's vor das Einschalten des Komparators 
stellen damit die Spannungen die Spannungen an AIN1 und AIN0 
einschwingen können.

von TOSCHO (Gast)


Lesenswert?

Hallo,

erst Mal Danke für die schnelle Antwort.

Ich habe die Anweisung jetzt umgestellt.
und die Abfrage in einer Schleife und trotzdem geht bei mir nichts.

ACD:=0            //Komparator einschalten
DDRB:=$00;        //set direction to be input
PORTB:=$FF;       //Pull up Widerstände einschalten
Nop
Nop
Nop
PORTB.0:=0  //Für ANI0 Pullup aus
PORTB.1:=0  //für ANI1 Pullup aus

while true do
    begin
      PortD.3:= ACO;
    end;

von Frank L. (hermastersvoice)


Lesenswert?

Lesen scheint auch nicht seine Stärke zu sein....

von TOSCHO (Gast)


Lesenswert?

o.k.
hab mich hier vertippt. Im Listing sieht es so aus.
Oder hast Du etwas anderes gemeint!
Trotzdem funzt nichts.


DDRB:=$00;        //set direction to be input
PORTB:=$FF;       //Pull up Widerstände einschalten
PORTB.0:=0        //Für ANI0 Pullup aus
PORTB.1:=0         //für ANI1 Pullup aus
Nop
Nop
Nop
ACD:=0            //Komparator einschalten


while true do
    begin
      PortD.3:= ACO;
    end;

von spess53. (Gast)


Lesenswert?

Hi

>PortD.3:= ACO;

So etwas kann nicht funktionieren. 'ACO' ist eine Konstante, nämlich die 
Bitposition des ACO-Bits im ACSR-Register . Der Compiler dürfte etwa 
'PortD.3:= 5' daraus machen.
Also wenn BASCOM so etwas klaglos schluckt, dann Gute Nacht.

MfG Spess

von Sinusgeek (Gast)


Lesenswert?

Das sieht nicht nach BASCOM aus, eher nach Pascal...

ACD ist der Name eines Bits und repräsentiert einen Zahlenwert (die 
Bitnummer). Mit ADC:=0 wirst Du das Bit im Register ACSR nicht 
ansprechen können, da wirst Du wohl den Registernamen mit angeben 
müssen. Mit ACO ist es genauso, das hat Dir Spess aber bereits erklärt.

von spess53 (Gast)


Lesenswert?

Hi

>Das sieht nicht nach BASCOM aus, eher nach Pascal..

Jetzt wo du es sagst. Dann beschimpfe ich ab jetzt den anderen Compiler, 
unbekannterweise.

MfG Spess

von TOSCHO (Gast)


Lesenswert?

Hallo zusammen,

der Compiler ist Mikropascal for AVR;
und .....  ich wäre im Leben nicht draufgekommen.
Ich habe im lst File jetzt mal nachgeschaut:


Hier ein Auszug was der Compiler aus folgenden Anweisungen macht

aus
ACD:=0            //Komparator einschalten
wird:

LDI   R16,0
STS   7,R16

aus
ACSR.ACD:=0            //Komparator einschalten
wird:

LDS   R0,ACSR
LDI   R16,127
LDI   R17,255
AND   R0,R16
Out   ASCR,R16


Vielen Dank an Spess53 und Sinusgeek.
Das Ganze ist ein kleiner Auszug aus einem Programm für einen 
Leerlaufregler eines KFZs. Den originalen LLR gibt es bei Bosch leider 
nicht mehr zu kaufen.

Noch etwas. Ich bin kein AVR Spezialist, aber ein klein wenig Ahnung 
(glaub ich) hab ich schon. Manche die hier im Forum antworten, 
sollten... jetzt hör ich aber besser auf. Aber lesen kann ich schon.



mfg

TOSCHO

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.