Hallo,
wenn ich meinen ATtiny44 mit interner Referenz betreibe funktioniert
meine ADC-Wandlung fast ohne Probleme, bis auf die Toleranzen
natürlich.
Jetzt versuche ich vergeblich mit einer konstanten Spannung von 1,162V
an AREF das Ergebnis zu verbessern aber ADC-HIGH und ADC-LOW haben
hierbei jeweils 0xFF.
Prescaler /128 (wie bei interner Ref.):
LDI temp, (1<<ADEN)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0)
OUT ADCSRA, temp
Externe Referenz und Kanal 1 sind gesetzt:
ORI temp, (0<<REFS1)|(1<<REFS0)|(0<<MUX5)|(0<<MUX4)|(0<<MUX3)|(0<<MUX2)|
(1<<MUX1)|(0<<MUX0)
OUT ADMUX, temp
Schaltung:
Konstantspannung an AREF und 100nF gegen Masse.
Was mache ich nur falsch?
Gruß
Bernd
Hi
>ORI temp, (0<<REFS1)|(1<<REFS0)|(0<<MUX5)|(0<<MUX4)|(0<<MUX3)|(0<<MUX2)|>(1<<MUX1)|(0<<MUX0)>OUT ADMUX, temp
Was soll das 'ori'? Nimm 'ldi'.
MfG Spess
Hi
Was mich noch stutzig mach:
>Jetzt versuche ich vergeblich mit einer konstanten Spannung von 1,162V>an AREF das Ergebnis zu verbessern aber ADC-HIGH und ADC-LOW haben>hierbei jeweils 0xFF.
Geht eigentlich nicht. Wie stellst du das fest? Der höchste mögliche
Wert in ADCH/ADCL ist $3FF.
MfG Spess
Hallo Spess,
du wirst Recht haben aber hierbei bekomme ich immer
einen Wert der größer ist als OUTPUT_700mA.
Komisch ist doch das es bei interner Ref. einwandfrei funktioniert.
START_UP:
RCALL SET_CHANNEL_ADC1
LDI temp5, LOW(OUTPUT_700mA)
LDI temp6, HIGH(OUTPUT_700mA)
START_UP_LOOP:
RCALL GET_VOLTAGE
CP ADC_VAL_LOW, temp5
CPC ADC_VAL_HIGH, temp6
BRSH START_UP_FUNCTION_END
IN temp, OCR0B
INC temp
MOV OCR0B_VALUE, temp
OUT OCR0B, OCR0B_VALUE
RJMP START_UP_LOOP
START_UP_FUNCTION_END:
// INC CtrlStatus
RET
Hi
>ADCH/ADCL ist $3FF>STIMMT !!!
Und das bedeutet, das deine Eingangsspannung >= VREF ist. Mess mal deine
Spannungen direkt an den Controllerpins.
MfG Spess
Hallo Spess,
habe µC gewechselt und mit int. Ref. funktioniert es.
Bei extern. Ref. immer noch nicht.
Habe dann dein ;************* AD_CONVERTER *****************
zur Initialisierung genommen, auch ohne Erfolg.
Gruss
Hallo Spess,
>ldi r16,1<<ADEN|1<<ADIE|1<<ADATE|1<<ADPS2|1<<ADPS1|1<<ADPS0 >;ADEN,ADSC,ADATE,ADIF,ADIE,ADPS2,ADPS1,ADPS0
wenn ich 0<<ADATE statt 1<<ADATE initialisiere dann funktioniert es.
Vielen Dank!
Bernd
Hi
>wenn ich 0<<ADATE statt 1<<ADATE initialisiere dann funktioniert es.
Das war eigentlich nur für mich zum Testen (Autotrigger).
Diese 0<<xyz solltest du vermeiden. Das vewirrt nur und hat keine
Wirkung.
MfG Spess