Forum: Mikrocontroller und Digitale Elektronik Problem beim Vergleich von ADwandlerwerte zwischen Master und Slave


von smith (Gast)


Angehängte Dateien:

Lesenswert?

Hallo

Ich habe ein Problem wenn ich die Werte von Adwandler zwischen Master 
und Slave vergleiche.
ich wollte wenn  eine von beide Adwandler kaputt geht dass es in diesem 
Fall ein LED Leuchtet.darüberhinaus lege ich lege ich gleiche spannung 
an ADC von Master uns Slave und dann wird in reihenfolge zwischen ADC(0) 
von Master mit ADC(0) von Slave verglichen dann ADC(1) und soweiter und 
sofort.

wenn ich nur ein kanal von adwandler vergleichen will dann funktioniert 
das aber wenn ich mehrere kanäle vergleichen will dann funktioniert 
nicht.

funktioniert nicht heisst wenn ich gleiche Spannung an ADC(0) und andere 
Spannung an ADC(1) anlege dann leucht den LED obwohl der Differenz ist 
immer kleiner als 150

ich habe meine funktionen angehängt.hoffe dass mir jemand helfen kann
und entschuldigung für meine schlechte Deutsch

danke im voraus

von Karl H. (kbuchegg)


Lesenswert?

smith schrieb:

> funktioniert nicht heisst wenn ich gleiche Spannung an ADC(0) und andere
> Spannung an ADC(1) anlege dann leucht den LED obwohl der Differenz ist
> immer kleiner als 150
1
  if ( maxi > 150 ) 
2
        
3
    PORTC |= (1<<PC3);
4
    else PORTC &= ~ (1<<PC3);

Und deine LED ist sicher so verschaltet, dass sie leuchtet wenn der Pin 
auf 1 gezogen wird?

Meistens ist das nämlich genau anders rum verschaltet: eine LED wird zum 
leuchten gebracht, indem man den Pin auf 0 setzt.


PORTC: Welchen Prozessor benutzt du? Hat der ein JTAG? Liegt das 
zufällig am PORTC und ist nicht ausgeschaltet?

von smith (Gast)


Lesenswert?

ich benutze atmega16.habe es auch mit PortA probiert und immer das 
gleiche problem.
ja es ist verschaltet wenn der Pin ein 1 aufgezogen wird

von Karl H. (kbuchegg)


Lesenswert?

smith schrieb:
> ich benutze atmega16.

Gut.
Mega16 bedeutet auf jeden Fall mal JTAGEN per Fuse abschalten

> habe es auch mit PortA probiert und immer das
> gleiche problem.
> ja es ist verschaltet wenn der Pin ein 1 aufgezogen wird

Auch gut.

Woher weißt du, dass deine Differenzen kleiner als 150 sind?

von Karl H. (kbuchegg)


Lesenswert?

Hast du eine Möglichkeit dir mal die Zahlenwerte anzusehen?

von Karl H. (kbuchegg)


Lesenswert?

Ach

Die Differenz 2er unsigned short Werte kann per Definition niemals 
negativ sein, da ein unsigned nicht negativ sein kann.

Du kannst das daher nicht so machen
1
   x = abs ( SlaveValue - adcValue );
1
  if( SlaveValue > adcValue )
2
    x = SlaveValue - adcValue;
3
  else
4
    x = adcValue - SlaveValue;

dann ist x immer positiv.

von smith (Gast)


Lesenswert?

weil ich lege den gleichen Spannung an ADC sowol an Master als auch an 
Slave.
das ganze funktioniert das problem taucht nur wenn ich zum beispiel 4v 
an ADC(0)an Master und Slave und 1v an ADC(1) von Master und Slave.also 
zwie verchieden Spannung aber der Differenz ist immer klein

von smith (Gast)


Lesenswert?

Karl heinz Buchegger schrieb:
> if( SlaveValue > adcValue )
>
>     x = SlaveValue - adcValue;
>
>   else
>
>     x = adcValue - SlaveValue;

die habe ich auch probiert vorhin aber und immer das gleiche

von Karl H. (kbuchegg)


Lesenswert?

smith schrieb:
> weil ich lege den gleichen Spannung an ADC sowol an Master als auch an
> Slave.

Das überzeugt mich nicht.
Der programmtechnische Weg von den gleichen Spannungen bis dann endlich 
die beiden Zahlenwerte miteinander verglichen werden ist weit. Da gibt 
es jede Menge Fehlerquellen.

Sieh zu, dass du einen Blick auf die Zahlen werfen kannst! Alles andere 
ist Stochern im Nebel.

> das ganze funktioniert das problem taucht nur wenn ich zum beispiel 4v
> an ADC(0)an Master und Slave und 1v an ADC(1) von Master und Slave.also
> zwie verchieden Spannung aber der Differenz ist immer klein

von smith (Gast)


Lesenswert?

ich habe die werte geändert und das mit zwei LEDS gesteurt damit ich 
sehen kann ob dass überein stimmt.
die werte stimmen schon.
aber was ich nicht verstehe dass wenn ich eine wert von 2,48V die 
enstprechend 991 leuchtet den LED von Slave wenn ich schreibe das LED 
soll leuchten wenn die Wert größer als 1000 was das nicht dem Fall ist.
Ad wandler eingestellt für interne ReferenzSpannung 2,56V

von Karl H. (kbuchegg)


Lesenswert?

smith schrieb:

> Ad wandler eingestellt für interne ReferenzSpannung 2,56V


Vorsicht, die interne Referenzspannung ist nicht exakt 2.56V!
Die streut ganz schön um diesen Wert von µC Exemplar zu µC Exemplar.

Die interene Referenzspannung ist hauptsächlich stabil!
Aber sie ist nicht hauptsächlich 2.56V.

von smith (Gast)


Lesenswert?

Ich habe bemessen und das programm vergleicht die werte zwischen ADC(0) 
und ADC(1) und nicht zwischen ADC(0) Master und ADC(0) Slave!!!!!
weiss nicht woran das liegt

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.