Hallo an alle,
meine Frage bezieht sich auf die angehängten Dateien.
In der Tabelle aus dem Datasheet des Tiny45 steht unter "X00" "VCC used
as voltage Reference, disconnected from PB0(AREF)".
Bedeutet für mich ich wähle diesen Modus und muss an AREF nichts
anschließen.
Im AVR-Tutorial von Mikrocontroller steht allerdings -wie angemarkt- das
ich immer (mindestens) einen 100nF Kondensator zwischen AREF und Ground
schalten muss.
Jetzt meine Frage:
Wie soll ich das jetzt anschließen mit oder ohne Kondensator?
Bzw welche Schaltung benutzt ihr zum wandeln?
Viele Grüße
Michael
Michael schrieb:> Bedeutet für mich ich wähle diesen Modus und muss an AREF nichts> anschließen.
Würde ich auch so deuten.
-> Wenn der ADC nicht verwendet oder VCC als VREF verwendet wird, hat
der ADC mit PORTB.0 nichts am Hut und kann anderweitig verwendet werden.
-> Wenn eine interne VREF (1.1V / 2.56V) verwendet wird, muss der
AREF-Pin mit einem Kondensator beschaltet werden.
-> Wenn eine externe VREF über den AREF-Pin verwendet wird, muss dort
sowieso die entsprechende Schaltung angeschlossen werden.
Michael schrieb:> Bzw welche Schaltung benutzt ihr zum wandeln?
Meist eine externe Präzisions-Referenz, da uns die internen nicht genau
genug sind.
Michael schrieb:> Bedeutet für mich ich wähle diesen Modus und muss an AREF nichts> anschließen.
Ja.
> Im AVR-Tutorial von Mikrocontroller steht allerdings -wie angemarkt- das> ich immer (mindestens) einen 100nF Kondensator zwischen AREF und Ground> schalten muss.
Wo? Aber nicht für den Attiny45, oder?
Michael schrieb:> Hallo an alle,>> meine Frage bezieht sich auf die angehängten Dateien.>> In der Tabelle aus dem Datasheet des Tiny45 steht unter "X00" "VCC used> as voltage Reference, disconnected from PB0(AREF)".>> Bedeutet für mich ich wähle diesen Modus und muss an AREF nichts> anschließen.
Exakt, der hängt frei und Vcc wird intern als Referenz verwendet.
> Im AVR-Tutorial von Mikrocontroller steht allerdings -wie angemarkt- das> ich immer (mindestens) einen 100nF Kondensator zwischen AREF und Ground> schalten muss.
Nee, nicht immer. Aber er schadet nie und erspart dem Forum tausende
Threads die sich alle auf das Fehlen dieses Kondensators zurückführen
lassen.
> Jetzt meine Frage:> Wie soll ich das jetzt anschließen mit oder ohne Kondensator?> Bzw welche Schaltung benutzt ihr zum wandeln?
Was willst du wohin wandeln und wie oft pro Sekunde und warum. Ich hab
sowohl schon 20kHz Audio als auch Gleichspannung von nem Potiabgriff
durch den ADC gejagt.
Die Schaltung ist natürlich nicht jedesmal gleich.
@THOR
Okay dann hab ich des wohl richtig verstanden.
Bei mir geht es nur um einen Bewegungsmelder der bei Bewegung an seinem
Datenpin zu wenig Volt ausgibt, sodass der µC es nicht als HIGH erkennt.
Also muss ich es selbst auswerten. Das ist weder Zeit noch wirklich
Pegelkritisch, also kann mir auch ein relativ große Ungenauigkeit der
Referenzspannung egal sein.
Vielen Dank an alle
Michael
Da das immernoch das selbe Problem betrifft füg ich es einfach mal hier
an...
Ich habe mir das jetzt alles so zurecht gebaut wie ich es brauche (denke
es sollte so klappen) aber in der Abfrage kommt leider nie ein "erfolg"
raus
Könntet ihr mal drüber schauen ob ich irgend einen dummen Fehler im Code
gemacht hab?
1
.include "tn45def.inc" ; Definitionsdatei für den AtTiny45 einbinden
Michael schrieb:> Bei mir geht es nur um einen Bewegungsmelder der bei Bewegung an seinem> Datenpin zu wenig Volt ausgibt, sodass der µC es nicht als HIGH erkennt.
Dann könnte man den Analog-Komparator einsetzen. U.a. für sowas ist der
gedacht...
c-hater schrieb:> Dann könnte man den Analog-Komparator einsetzen. U.a. für sowas ist der> gedacht...
Oh danke für den Tipp den hatte ich bisher total außer Acht gelassen :D
Walter S. schrieb:> VIA schrieb:>> -> Wenn eine interne VREF (1.1V / 2.56V) verwendet wird, muss der>> AREF-Pin mit einem Kondensator beschaltet werden.>> nein!
Erklärung wäre gut gewesen...
Okay, es "muss" nicht zwangsläufig ein Kondensator angeschlossen werden,
wenn die interne Referenz verwendet werden soll.
Bei interner Referenz von 1,1V hat der AREF-Pin scheinbar keine Funktion
bzgl. Entkopplung ("disconnected from PB0")
Bei 2,56V int. Referenzspannung hat man die Option (REFS0 im
ADMUX-Reg.), die VREF an PB0 zwecks Kondensator herauszuführen.
Ich würde es aber tun, wenn der Pin nicht unbedingt anderweitig
verwendet werden muss:
"Optionally the internal 2.56V voltage reference may be decoupled by an
external capacitor at the AREF pin to improve noise immunity."
Michael schrieb:> ADC_ISR:> push r16> in r16, ADCH> cpi r16, 50> BRLT aus> ein:> sbi PORTB, PORTB4> rjmp adc_ende> aus:> cbi PORTB, PORTB4> rjmp adc_ende> adc_ende:> pop r16> reti
Du musst in einer ISR auf Assembler Ebene auch immer das Statuswort
sichern, weil sonst dein Hauptprogramm ins Schleudern kommt. Im Moment
noch nicht wichtig, weil deine Hauptschleife leer ist, aber sobald da
was passiert, zerstört dir die ISR den SREG Wert.
Also z.B.
1
ADC_ISR: IN r12,SREG
2
3
; lots of isr here
4
END_ISR: OUT SREG,r12
5
reti
> BRLT aus
Kann bei Vergleiche ohne Vorzeichen lustig sein und nicht das gewünschte
Ergebnis bringen, Benutze lieber
1
CPI r16,50 ; carry set if 50 > r16
2
BRCS aus
Die richtige Funktion solltest du mit einem variablen Spannungswert and
ADC1 prüfen können.
Matthias S. schrieb:> Du musst in einer ISR auf Assembler Ebene auch immer das Statuswort> sichern, weil sonst dein Hauptprogramm ins Schleudern kommt.
Nein. Das gilt nur, wenn es überhaupt ein "Hauptprogramm" gibt. Wenn
dieses nur aus:
1
main:
2
rjmp main
besteht, dann entfällt eine solche Restriktion.
Und tatsächlich können die allermeisten Anwendungen problemlos komplett
als ISRs implementiert werden. "Main" wird dann allenfalls benötigt, um
geordnet schlafen zu gehen. Und das kann man dann so implementieren,
dass keine Auswertung irgendwelcher SREG-Flags erforderlich ist. Damit
entfällt dann in allen ISRs natürlich die Notwendigkeit zum sichern von
SREG. Jedenfalls solange man alle ISRs vollständig "exklusiv"
implementiert (was allerdings oft auch nicht möglich oder zumindest
nicht optimal ist). Dann natürlich sieht die Sache gleich wieder anders
aus, dann wird auch die Sicherung von SREG wieder Thema. Aber auch dann
noch nicht zwingend in jeder ISR...
Bei den ISRs bin ich zwar anderer Meinung, da ich keine anderen
Vergleiche im Hauptprogramm hab, die die SREG Benötigen, aber danke für
den Hinweis mit BRCS, damit hats jetzt geklappt
DANKE !!
c-hater schrieb:>> Du musst in einer ISR auf Assembler Ebene auch immer das Statuswort>> sichern, weil sonst dein Hauptprogramm ins Schleudern kommt.>> Nein. Das gilt nur, wenn es überhaupt ein "Hauptprogramm" gibt.
Du hast ja auch wieder nur das zitiert, was dir gepasst hat. Lies
einfach mal weiter:
Matthias S. schrieb:> Im Moment> noch nicht wichtig, weil deine Hauptschleife leer ist, aber sobald da> was passiert, zerstört dir die ISR den SREG Wert.
Hi
Das Sreg ist das Byte, wo die Status-Flags enthalten sind.
Wenn Du im ISR z.B. mit einem INC auf Null überläufst, wird Z gesetzt,
sonst gelöscht.
Wenn Du im Hauptprogramm z.B. einen Test (TST Rd) hast, wird Z,N,V dort
verändert.
Nun schlägt der Interrupt zu (zwischen Test und Prüfung) und verbiegt
Dir die Flags.
Dein jetzt folgender Test im Hauptprogramm schlägt fehl oder macht Mist
- und Keiner weiß, warum - kommt ja nur ab und zu vor ... man mag dann
sogar die Mondphasen dafür verantwortlich machen :)
Selber nutze ich ein Register als itemp (Temp Interrupt, Register
16-31), lese darin das Sreg ein und pushe Das auf den Stack, oder nehme
ein eigenes Register und nenne es rSreg - wird auch nur in den ISR
benutzt, um das Sreg zu sichern.
Zurück zu Deinem Programm:
Liegt das Signal am richtigen Pin an?
In der Versuchsschaltung gerne erst auch mit Vss und Vdd probieren, ob
das Kerlchen überhaupt reagiert.
MfG