Forum: Mikrocontroller und Digitale Elektronik AD-Wandler + Portfunktionen bei Atmega8 verwenden


von Philipp P. (putzer_philipp)


Lesenswert?

Hallo Allerseits!

Ich habe gerade folgendes Problem: Ich will am Kanal 0 (PC0) des ADU 
eine Spannung einlesen. Soweit funktioniert das Ganze. Nur habe ich am 
PORTC, welchen auch der ADU verwendet, bei PC4 und PC5 zwei Relais, 
angesteuert mit zwei FET's, hängen.

Setze ich nun bei DDRC DDC4 und DDC5, also Relais als OUT, so bekomme 
ich vom Wandler total unsinnige Werte. Und das für mich seltsamste, die 
Spannung an PC0 steigt auf etwa 1,4V circa.

Kann ich eignetlich den ADU und die anderen freien I/O Pins in der 
selben Schaltung nutzen? Wenn nein, brauche ich nicht mehr lange 
Programmfehler suchen...im DB habe ich nichts treffendes gefunden

Vielen Dank!
Philipp

von 2921 (Gast)


Lesenswert?

PortC ? Scheint kein PC zu sein....

von 2921 (Gast)


Lesenswert?

Die AD kanaele sollte unabhaengig sein. Welches sind den die anderen 
Funktionalitaeten am PortC ? Allenfalls bestehen Abhaengikeiten. zB muss 
ARef irgendwo sein.

von Alex (Gast)


Lesenswert?

ARef und AVCC verbunden???

von Philipp P. (putzer_philipp)


Lesenswert?

Also:

Avcc hängt mit einer Spule zu 10µH auf 5V, Aref ebenfalls, dazu noch ein 
100nF Ker.Kond auf Masse. Laut DB sind PC0 -> ADC0 PC1 -> ADC1 ... PC4 
-> ADC4/SDA PC5 -> ADC5/SCL

Die Relais schalten tadellos ein und aus; nur sobald es schaltet spinnt 
der ADC.

Werde nachher mal probieren das Gate vom FET vom µC zu trennen, schauen 
was dann passiert.

von Spess53 (Gast)


Lesenswert?

Hi

Datenblatt S.202

4. If any ADC [3..0] port pins are used as digital outputs, it is 
essential that these do not switch while a conversion is in progress. 
However, using the Two-wire Interface (ADC4 and ADC5) will only affect 
the conversion on ADC4 and ADC5 and not the
other ADC channels.

Noch Fragen?

MfG Spess

von Philipp P. (putzer_philipp)


Lesenswert?

Die Wandlung mache ich in einem Unterprogramm.

Auszug aus dem Hauptprogramm, wo der ADU abgefragt wird:
...
if(takt==0)
{  takt=RELOAD;
   zeit_gesamt--;
   if(zeit_gesamt==0)
   {    cli();
        //PUMPE_AUS;
        //HEIZUNG_AUS;
  PORTC&=~(1<<PC4);
  PORTC&=~(1<<PC5);

  takt=RELOAD;
  hh_menue   = hh_read;
  mm_menue   = mm_read;
  ss_menue   = ss_read;
  zeit_gesamt = hh_menue*3600 + mm_menue*60 + ss_menue;
  startbit=0;
  lcd_cls();
  break;
    }

    temp_in = (int)(CONST_TEMP*ADU_ch(ANALOGIN_KANAL));   //Kanal 0

    if( (temp_in < aetztemp-HYSTERESE)&&bit_heiz==0)
    {  PORTC|=(1<<PC4);
        bit_heiz=1;
  //HEIZUNG_EIN;
    }
    if( (temp_in > aetztemp+HYSTERESE) &&bit_heiz==1)
    {  PORTC&=~(1<<PC4);
        bit_heiz=0;
  //HEIZUNG_AUS;
    }
...

Auszug aus dem UP zur Wandlung:

int ADU_ch(unsigned char mux)
{   char i;    //Indexvariable
    int result =0;  //Ergebnis

    ADCSRA = (1<<ADEN) | (1<<ADPS2) | (1<<ADPS1);  //Wandler
                                                   //einschalten,125kHz
    ADMUX = mux;                   //Gewünschter Kanal
    ADCSRA |= (1<<ADSC);      //Wandlung starten (single
                                                //step)
    while (ADCSRA & (1<<ADSC));      //Warten bis Wandlung
                                                //abgeschlossen
    for (i=0; i<4; i++)        //4 Wandlungen
    {  ADCSRA |= (1<<ADSC);      //Wandlung starten (single
                                                //step)
  while (ADCSRA & (1<<ADSC));          //Warten bis Wandlung
                                                //abgeschlossen
  result += ADCW;        //Ergebnisse aufsummieren
     }
     ADCSRA &= ~(1<<ADEN);      //Wandler wieder
                                                //ausschalten
     result /=4;        //Mittelwert
     return result;        //Rückgabewert
}

Habe auch schon versucht die Timer-Ints im UP zu deaktivieren und am 
Ende wieder zu aktivieren, hat aber nix gebracht.
Aber kaum kommentiere ich den Befehl zu setzten des DDRC aus, geht der 
Wandler normal, so wie er sollte!

So, jatzt gehe ich mal schnell die Gates trennen, schun wasser da sagt

grüße
philipp

von Philipp P. (putzer_philipp)


Angehängte Dateien:

Lesenswert?

So, jetzt bin ich noch etwas ratloser.

Trenne ich die Gates vom µC, lasse aber den DDRC so, wie er sein sollte 
mit PC4 und 5 als OUT, so gehts.

Schalte ich nun irgendwann während der Programmlaufzeit das Gate an den 
gesetzten µC PC4 oder 5, dann geht die Spannung am Eingang des ADU 
aufwärts.

Kann es sein, dass ich vom Port zu viel Strom ziehe? dass er deswegen 
spinnt?
Anbei auch der Schaltplan, die Relais hängen aber nicht wie gezeichnet 
auf 5v sondern auf 12V

Hoffe mir kann jemand helfen, ich hab keine Idee mehr, warum das Zeug 
nicht funkt!

philipp

von Rahul D. (rahul)


Lesenswert?

Hast du schon mal die Spannung an den Pins im beschalteten und im 
unbeschalteten Zustand gemessen?

von Hubert G. (huvogs)


Lesenswert?

Es kann sein das sich AREF verschiebt, deine GND-Leitung ungünstig liegt 
und sich dadurch das Potential verschiebt usw. Also von einem fixen 
GND-Punkt, vielleicht beim Spannungsregler, die Spannungen in beiden 
Fällen messsen.

von Philipp P. (putzer_philipp)


Lesenswert?

So, habe gerade nochmals probiert, und kam zu folgendem Ergebniss:

Nehme ich 12V von einem externen Netzteil, um die Relais zu schalten, 
bleibt die Spannung am PC0 so wie sie soll.

Ursprünglich habe ich die Spannung, welche im Schaltplan mit 9V 
bezeichnet wurde als Schaltspannung fürs Relais hergenommen. Die habe 
ich gemessen, sie lag bei 13V. Die Relais brauchen 12V, also müsste das 
ja klappen

Der Trafo hat aber nur 6VA, ja ja im nachhinen hätti iach ihn auch auf 
20VA dimensioniert, desshalb wird warscheinlich die Spannung 
zusammensinken. Sinken, wohlgemerkt, weil das Teil hinter dem 
Gleichrichter im geschalteten Zustand immer noch 11,8V lieferte.

Jedenfalls werde ich jetzt sicher eine Trafo größerer Leistung und vor 
allem höherer Nennspannung einbauen; Lieber ein paar Watt an den 
Spannungsreglern verbraten, als den ganzen Tag soch dumme Fehler zu 
suchen!

So, vielen Dank nochmals an alle, jedenfalls weiß ich jetzt, dass ich 
den PORT und den ADC in der selben Schaltung verwenden kann. Ist ja 
immerhin auch was...

PS. Die Schaltung für die Konstanstromquelle ist nicht aktuell. Der 
317er hat eine Begrenzung, was den Einstell-Widerstand betrifft.

Grüße
Philipp

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.