Hallo, ich möchte über den ADC0 des ATMEGA32 ein Stromsignal messen. Dazu liegt an diesem Pin ein 220 Ohm Shunt gegen Ground. Zudem verwende ich als externe 5V-Referenzspannung ein LM4040. Soweit funktioniert auch alles. Jetzt wollte ich zur Fehlerauswertung und -anpassung eine Kennlinie von Eingangsspannung 0-5V und ADC-Ausgang aufnehmen. Bis zu einer Spannung von 4,84V und einem ADC-Wert von 984 ist auch alles in Ordnung, danach springt der ADC-Wert jedoch sofort auf 1023. D.h. für die letzten 160mV bis zu 5V gibt der ADC nur noch 1023 aus. Hat jemand eine Idee woran das liegen könnte oder ähnliche Erfahrungen gemacht? Auf einem Testboard ohne Shunt und mit VCC als Referenzspannung gab es keine Probleme. MfG Marcus H.
Schaltung im Anhang und hier der entsprechende Programmausschnitt:
1 | void ADC_init (void) |
2 | {
|
3 | uint32_t Ergebnis; |
4 | DDRA &= ~0xFF; |
5 | PORTA &= ~0xFF; |
6 | ADMUX |= (1<<REFS0); |
7 | ADMUX &= ~(0<<REFS1); |
8 | ADCSRA = (1<<ADPS1)|(1<<ADPS0); |
9 | ADCSRA |= (1<<ADEN); |
10 | ADCSRA |= (1<<ADSC); |
11 | while (ADCSRA & (1<<ADSC) ); |
12 | Ergebnis = ADCW; |
13 | }
|
14 | |
15 | uint32_t ADC_lesen (uint8_t Kanal) |
16 | {
|
17 | ADMUX = (ADMUX & ~(0x1F)) | (Kanal & 0x1F); |
18 | ADCSRA |= (1<<ADSC); |
19 | while (ADCSRA & (1<<ADSC) ); |
20 | return ADCW; |
21 | }
|
22 | |
23 | int main (void) |
24 | {
|
25 | ADC_init (); |
26 | do
|
27 | {
|
28 | ADC_Wert = ADC_lesen (KANAL_0); |
29 | LCD_position (0,1); |
30 | LCD_text ("ADC:"); |
31 | LCD_position (0,2); |
32 | LCD_Info (ADC_Wert, 7, 7, 4, " LSB", 0); |
33 | }while(1); |
34 | return 0; |
35 | }
|
@ Marcus H. (darox) >Schaltung im Anhang und hier der entsprechende Programmausschnitt: Hmm, also mit einer 5V Referenz und 5V Vcc wird das wahrscheinlich nix. Denn du kannst nicht garantieren, dass die 5V von Vcc immer höher als die 5V der Referenz sind. Und das müssen sie. Mein Tip. Nimm die 4,096V Version vom LM4040 und alles ist in Butter. Oder dreh deine VCC auf 5,5V hoch. MfG Falk
Danke für den Hinweis, darüber werde ich nochmal nachdenken! Also müsste ja mein VCC 4,84V betragen? Denn die Referenz erkennt er ja korrekt wenn er bei dieser Spannung noch 984 ausgibt.
@ Marcus H. (darox) >Also müsste ja mein VCC 4,84V betragen? Denn die Referenz erkennt er ja >korrekt wenn er bei dieser Spannung noch 984 ausgibt. Kann sein.
Ok - noch eine Überlegung: Was wäre wenn Avcc = Aref ist? Avcc darf ja 0,3V von VCC abweichen wodurch Schwankungen in der Versorgung egal wären.
@ Marcus H. (darox) >Was wäre wenn Avcc = Aref ist? Avcc darf ja 0,3V von VCC abweichen >wodurch Schwankungen in der Versorgung egal wären. Theoretisch machbar. Aber dort hängt noch anderes Zeug dran, nämlich der gesamte PortA. Würde ich vermeiden wollen. Ach ja, 100nF an Aref wären auch nicht verkehrt. MFG Falk
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.