Forum: Mikrocontroller und Digitale Elektronik Merkwürdiges Verhalten ADC MEGA16 auf STK500


von Thomas (Gast)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

ich bin gerade dabei ein Moodlight mit dem ATMEGA16 zu entwerfen und auf 
dem STK500 auszutesten.

Dabei habe ich ein unerklärliches Phänomen:

Ich habe ein Poti an ADC0, um die Geschwindigkeit des Farbwechsels zu 
steuern.

Die beiden Enden liegen an VTG und GND des STK500, der Schleifer an PA0 
(=ADC0). Zwischen Schleifer und PA0 geht noch ein 47nF gegen GND, um 
Störsignale abzuleiten. AREF ist gegen GND mit 100n abgeblockt.

Das Programm sollte auch i.O. sein, bis ca. 2,5 V (halbe 
Schleiferstellung) funktioniert alles bestens und ich bekomme saubere 
Werte entsprechend Spannung am ADC. Mit dem Oszi von PA0 gegen GND am 
STK 500 gemessen eine glatte Gleichspannung. Über 2,5V bricht in 
Abständen von 10 ms die Spannung um 1V (bei 5V) ein und ich habe ein 
Spannungsprofil wie im beigefügten Foto vom Oszi. Das gleiche passiert, 
wenn ich VTG direkt auf PA0 gebe.

Alle üblichen Fehlerquellen habe ich schon geprüft wie z.B. ADC nicht 
auf AVCC als Referenz eingestellt, Jumper AREF ist nicht gesetzt usw.

Wie gesagt, bis Mittelstellung funktioniert es tadellos, danach geht es 
los. Ich kann mir das nicht erklären.

Fällt Euch dazu etwas ein?

Viele Grüße und vielen Dank im Voraus

Thomas

von spess53 (Gast)


Lesenswert?

Hi

Welchen Widerstand hat denn dein Poti?

MfG Spess

von Thomas (Gast)


Lesenswert?

spess53 schrieb:
> Hi
>
> Welchen Widerstand hat denn dein Poti?
>
> MfG Spess

Hi Spess,

Poti hat 1 K gemäß Datenblatt (10k or less).

Müßte ich nicht auch die ADC direkt an 5V hängen können, ohne zu große 
Ströme zu bekommen?

VG Thomas

von Thomas (Gast)


Lesenswert?

Hallo zusammen,

hat keiner eine Idee?

Ich bin langsam am Verzweifeln und überlege, das ganze auf einem 
Steckbrett aufzubauen, um zu sehen ob das am STK500 liegt.

Wäre super, wenn jemand einfach mal mit dieser Funktion einen Mega 16 
auf einem STK500 beschreibt  und dann PA0 an VTG legt (Jumper AREF nicht 
gesetzt) - dann müssten ja 3FF stabil zurückgegeben werden.

Falls das bei Euch funktioniert und bei mir nicht könnte der Chip oder 
der STK bei mir eine Macke haben.

Wenn das dann läuft, gebe ich selbstverständlich das Projekt als 
Freeware ins Board hier zurück.

Viele Grüße

Thomas

uint16_t LeseADC(void)
{
  uint8_t i; // Variable für Schleifenzähler

  uint16_t result; // Variable, in die der ADC Wert eingelesen wird

  ADMUX = (1<<REFS0); // Kanal 0 und AVCC als Referenz

  ADCSRA |= (1<<ADPS1) | (1<<ADPS2)|(1<<ADPS0);

  ADCSRA |= (1<<ADEN);  // setzen von ADEN aktiviert den ADC

  ADCSRA |= (1<<ADSC);   // setzen von ADSC startet eine ADC-Wandlung 
(single conversion)

  while ( ADCSRA & (1<<ADSC) )
  { ; }

  result = ADCW;

  result = 0;

// in der nächsten Schleife werden 4 Konversionen durchgeführt und die 
Mittelwerte gebildet

  for( i=0; i<4; i++ )
  {
    ADCSRA |= (1<<ADSC); // setzen von ADSC startet eine ADC-Wandlung 
(single conversion)

    while ( ADCSRA & (1<<ADSC) ) // auf Abschluss der Konvertierung 
warten
    { ; }

     result += ADCW; // Wandlungsergebnisse aufaddieren
   }

   ADCSRA &= ~(1<<ADEN); // ADEN auf 0 setzen deaktiviert den ADC wieder

   result /= 4; // Summe durch vier teilen = arithm. Mittelwert

   return result;

}

von spess53 (Gast)


Angehängte Dateien:

Lesenswert?

Hi

Machen wir es anders herum. Lade mal das angehängte Hex-File. Wenn du 
dein Poti an PA0 anschliesst und PORTB mit den LEDs verbindest, zeigen 
die LEDs die oberen acht Bit des ADC-Wertes an.

Getestet auf einem STK500 mit ATMega16 (8MHz interner Oszillator).

MfG Spess

von Martin S. (sv_martin)


Lesenswert?

Thomas schrieb:
> Wäre super, wenn jemand einfach mal mit dieser Funktion einen Mega 16
> auf einem STK500 beschreibt  und dann PA0 an VTG legt (Jumper AREF nicht
> gesetzt) - dann müssten ja 3FF stabil zurückgegeben werden.

Tag,

also wenn du immer noch den Test brauchst, melde dich, ich hätte gern im 
Gegenzug auch einen Test 
"Beitrag "Re: Universelle Tastenabfrage"; [letzter Beitrag] 
ich steig auch nicht ganz dahinter.

Gruß

von Thomas (Gast)


Lesenswert?

Hallo Kollegen,

vielen Dank für Eure Unterstützung und die Testprogramme. Ich habe den 
Fehler jetzt eingekreist, das macht mich aber nicht unbedingt schlauer.

Das ASM hat zwar funktioniert, allerdings mit der gleichen Schwingerei 
am ADC Eingang. Um sicherzustellen, dass es sich nicht um eine 
Störeinstreuung am ADC handelt, habe ich mir schnell eine "steifere" 
Spannungsquelle mit einem 317 gebaut und eingeschirmtes Kabel verwendet. 
Das heisst, die nicht VTG über Poti für die ADC Ansteuerung verwendet, 
sondern externe Spannung. Und siehe da, die oben auf dem Oszilloskop zu 
sehende Störspannung kommt von VTG und nicht vom ADC. Die Spannung am 
ADC ist "sauber", dafür schwingt die gesamte Versorgungsspannung.
Genauer gesagt: wenn ich eine Spannung größer 3V auf den ADC Eingang 
lege, beginnt VTG alle 10 ms kurz einzubrechen und stabilisiert sich 
dann wieder. Bei Beginn des Phänomens bei 3v auf dem ADC ist der VTG 
Spannungseinbruch ca. 0,1 V; bei 5V auf dem ADC bricht VTG schon um bis 
zu 0,8 V ein und damit auch die Highs an den Ausgängen, was zu 
sichtbarem Flimmern an den angeschlossenen LEDs führt.

Jetzt hab ich zwar den Root Cause, bin aber kein Stück schlauer...

Falls jemand eine Idee hat, wäre ich dankbar.

Viele Grüße

Thomas

von spess53 (Gast)


Lesenswert?

Hi

Dann muss ich erst mal fragen, wo du AREF abgegriffen hast, und wie der 
AREF-Jumper gesetzt ist.

MfG Spess

von Thomas (Gast)


Lesenswert?

spess53 schrieb:
> Hi
>
> Dann muss ich erst mal fragen, wo du AREF abgegriffen hast, und wie der
> AREF-Jumper gesetzt ist.
>
> MfG Spess

Hi Spess,

AREF Jumper ist nicht gesetzt, Programm (siehe oben) nimmt AVCC als 
Referenz. AREF habe ich mit einer 2er Buchsenleiste an PORTE/AUX mit 
100nF gegen GND abgeblockt. Nach STK500 Schaltplan müsste damit HW 
seitig alles ok sein.

VG Thomas

von spess53 (Gast)


Lesenswert?

Hi

>AREF Jumper ist nicht gesetzt

Gut das passt.

Also, ich habe alles versucht, um deine Störung hinzubekommen. 
Vergeblich.
Im Moment bin ich mit meinen Ideen am Ende.

MfG Spess

von Thomas (Gast)


Lesenswert?

spess53 schrieb:
> Hi
>
>>AREF Jumper ist nicht gesetzt
>
> Gut das passt.
>
> Also, ich habe alles versucht, um deine Störung hinzubekommen.
> Vergeblich.
> Im Moment bin ich mit meinen Ideen am Ende.
>
> MfG Spess

Super, danke Dir - ich werde jetzt mal einen neuen Mega probieren und 
alle sonstigen lasten abklemmen - im aktuellen programm hängen an den 
timer ausgängen noch 3 mosfets (die laufen aber mit über 1kHz, das passt 
mit dem störsignal auf der versorgungsspannung um eine größenordnung 
nicht zusammen)

wenn ich mir VTG ansehe sieht das verdächtig nach nicht ausreichend 
gesiebter Versorgungsspannung aus (zu hohe last). kann  aber auch nicht 
sein, da ich vorn 12V gleichstrom dranhängen habe und was das  mit einer 
fremdspannung >3V am adc zu tun hat ist mir ebenso schleierhaft

trotzem vielen dank an alle, die geholfen haben!!!!

BTW spess: hast du mal VTG oszilloskopiert bei 5V an deinem asm 
programm?

von spess53 (Gast)


Lesenswert?

Hi

>BTW spess: hast du mal VTG oszilloskopiert bei 5V an deinem asm
>programm?

Ja. VTG, VREF und und ADC0. Nur die üblichen Störungen in der 
Grössenordnung von 100mV (Spitze-Spitze). Ich habe das Poti auch mal 
direkt an VREF betrieben. Keine Änderung.

>AREF habe ich mit einer 2er Buchsenleiste an PORTE/AUX mit
>100nF gegen GND abgeblockt.

Hatte ich auch nicht dran.

MfG Spess

von Thomas (Gast)


Lesenswert?

Hallo zusammen,

ich wollte mich bei Euch für die Antworten bedanken. Komme leider erst 
jetzt dazu.

Ich habe die Schaltung jetzt mal extern aufgebaut, ziemlich fliegend und 
frei verdrahtet. Funktioniert bestens, schwingt nichts.

Keine Ahnung was mein STK500 hat, zumal Ihr das Verhalten nicht 
replizieren konntet.

Also: vielen Dank nochmal und viele Grüße

Thomas G.

von Thomas (kosmos)


Angehängte Dateien:

Lesenswert?

im Datenblatt des ATTiny26 ist ein kleiner Filter für AVCC beschrieben. 
Denke das das auf die anderen AVR übertragbar ist, eigentlich hätten Sie 
ihre Empfehlung auch aufs STK500 übertragen sollen.

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
Noch kein Account? Hier anmelden.