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.