Hallo erstmal,
ich fange ambesten zuerst mit den Daten an.
MCU: atmega 168 + STK500 mit 16MHZ Crystal (habe den Teiler 8 für die
Frequenz ausgeschaltet)
Ziel:
Ich möcht den AD-Wandler benutzen mit externer Rerferenzspannung von
10V.
das habe ich schon geschaft:
Wandlungen über den interen Spannung (Vcc) mit dem Eingang VBG=1.1 hat
schon geklappt.
Problem:
1) ich habe eine Spannung von 23V, die habe ich mit einem
Spannungsteiler (R1= 1,3K OHM und R2= 1K Ohm) auf ca. 10 V gebracht
sobalt ich es den Pin "REF" (STK500) anlege sinkt die Spannung am R2,
warscheinlich weil der Widerstand vom Pin viel kleiner ist
als R2= 1K Ohm (parallel Schaltung). Zurstabilität habe ich einen
Kondensator mit 10nF angelegt(hatte keinen Anderen da).
Frage:
Kann ich dies mit einem Op-Verstärker (positive Verstärkung)
realisieren, ohne das die Spannung einbricht? -> (OP-Verstärker kleiner
Ausgangswiderstand)Oder liegt es doch an etwas Anderm?
2) ich habe es geschaft an Pin "Ref" 7V anzulegen und habe die
Referenzspannung vo STK500 auf 0 gestzt und die Aref brücke geschlossen,
aber alle Messungen waren Falsch. Als Fehler habe ich 3LSB
angenommen,aber
die Werte waren nicht mal inder nähe.
Frage:
Woran kann das Liegen? Kann ich überhaupt Referenzspannungen über 6V
benutzen?
3) Trotz der Schleife (sehe unten Code) wandelt anscheinend der
AD-Wanlder nur einmal.
Frage:
Woran kann das Leigen, muss ich den ADIF löschen obwohl ich kein
Interrupt benutze?
Ich bin dankebar für jede Hilfe.
PS. der Code und Doku liegt im Anhang als zip :
.include "m168def.inc"
.def temp_1 = r16
.def temp_2 = r17
.def data_H = r18
.def data_L = r19
.cseg
MAIN:
;Stackpointer initialisieren
ldi temp_1,low(ramend)
out spl,temp_1
ldi temp_1,high(ramend)
out sph,temp_1
;PortD liegt an LED's an
ldi temp_1,0xFF
out DDRD,temp_1
;Init AD-Wandler
;Reverenz Spannung und Mux-Eingang einstellen
ldi temp_1,(0<<REFS1)|(0<<REFS0)|0x0E
ldi XH,high(ADMUX)
ldi XL,low(ADMUX)
st X,temp_1
;Alle Digitalbuffer ausschalten für PortC
ldi temp_1,0xff
ldi XH,high(DIDR0)
ldi XL,low(DIDR0)
st X,temp_1
;
ldi temp_1,0x00
ldi XH,high(ADCSRB)
ldi XL,low(ADCSRB)
st X,temp_1
loop:
;Start ADC, Single
ldi temp_1,(1<<ADEN)|(1<<ADSC)|0x03
ldi XH,high(ADCSRA)
ldi XL,low(ADCSRA)
st X,temp_1
;Warten bis messung vertig
ldi XH,high(ADCSRA)
ldi XL,low(ADCSRA)
w_L_1:
ld temp_1,X
sbrc temp_1,ADSC
rjmp W_L_1
;Daten lessen
ldi XH,high(ADCH)
ldi XL,low(ADCH)
ld data_H,X
ld data_L,-X
;Invertieren und an Ergebnisausgeben, LED leuchtet bei 0
com data_L
out PORTD,data_L
rjmp loop
Hallo, wie wäre es mit einem Blick ins Datenblatt? Dort wirst Du die Anhaben zur Referenzspannung finden. Häher als die Betriebsspannung darf sie bei keinem mir bekannten AVR sein. Gruß aus Berlin Michael
Doku. konnte ich nicht hochladen weil es zu gross ist. Adresse: -STK500: www.controllersandpcs.de/pdfs/STK500.pdf -atmega168: www.robotshop.ca/PDF/ATmega168.pdf
Habe mir im Datenblatt den Bereich AD-Converter durch gelesen, habe nichts gefunden darüber wie hoch die Spannung sein darf. Grüße aus Berlin Anfänger
Hi Keine Spannung am AVR darf höher wie VCC sein. Datenblatt: Min Max VREF Reference Voltage 1.0 AVCC V VIN Input Voltage GND VREF V MfG Spess
Vielleicht sollte jemand mal einen ähnlichen Satz wie diesen ins Tutorial schreiben, der, bis auf ein paar Ausnahmen, immer gilt: Keine Eingangsspannung DARF größer sein als die Versorgungsspannung, keine Ausgangsspannung KANN größer sein als die Versorgungsspannung.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.