Forum: Mikrocontroller und Digitale Elektronik Spannung über ADC des C167 messen


von Friederike B. (bluemchen)


Lesenswert?

Hallo,

ich möchte eine Temperaturmessung über den C167 auswerten. Aus meinem 
Temperatursensor kommt ein Strom (273 µA bei 0°C und dann konstant 
steigend 1µA / °C), den ich über einen Widerstand in eine Spannung 
zwischen 0 und 4 V wandel. Die Spannung schließe ich an den Port 5.4 des 
C167 an. Im Programm soll dann aus der Spannung wieder die Temperatur 
berechnet werden und an einer 7-Segment-Anzeige, die an Port 1 
angeschlossen ist, angezeigt werden.
Die Referenzspannung ist 5 V, der Widerstand 11,3 kOhm. (4 V sollen ca. 
bei 80 °C abfallen)

Im Moment schaut das Programm so aus:
1
void Ports_Init(void)
2
{
3
  DP1L = DP1H = 0xFF; //Port1 as output
4
  P1L = 0x00;
5
  P1H = 0x00;
6
}
7
8
void ADC_Init(void)
9
{
10
  ADCON = 0x0014;   //Fixed Channel (P5.4), Continuous Conversion
11
  ADDAT = 0x0000;   //Start value
12
  P5DIDIS = 0xffff; //Digital Input disable
13
  ADST = 1;
14
}
15
16
 void main(void) 
17
{
18
  float temperatur;
19
  int iwert;
20
  float strom;
21
  float u_ein;
22
  Project_Init();
23
24
  
25
  while (TRUE)
26
  {
27
    while (ADBSY);
28
    iwert = (ADDAT & 0x03FF);
29
    u_ein = iwert*(5.0/1023.0);
30
    strom = u_ein / 11300.0;
31
    temperatur = strom - 273;
32
    P1L = temperatur;

An der 7-Segment-Anzeige wird aber nur 00 angezeigt.. Der ADC müsste 
funktionieren, da ich "iwert" auch für eine PWM benutze, die auch 
funktioniert...

Wär lieb wenn mir hier jemand weiterhelfen könnte. Danke!

von Guido (Gast)


Lesenswert?

Friederike B. schrieb:
> u_ein = iwert*(5.0/1023.0);
>     strom = u_ein / 11300.0;

u_ein ist 0 .. 5.0. Da bleibt in strom doch nicht viel übrig.

von B.A. (Gast)


Lesenswert?

Weshalb nutzt du hier float-Werte?

Setze in deine Formel mal Beispielwerte ein (0 und 1023), jetzt rechne 
es mal selbst durch und schaue ob du mit dem Ergebnis zufrieden bist.

von Friederike B. (bluemchen)


Lesenswert?

Danke für die Antworten !

Ja das mit den Werten einsetzen habe ich dann auch gemacht und den 
Fehler gleich gefunden... jetzt funktionierts!

Die float-Werte nehme ich, da die Spannungen immer 3,8.... betragen, 
also von den hinteren kommastellen abhängen (bzw. der strom in µA ... ). 
bei int-werten würde er ja immer die selbe temperatur anzeigen

von wsp (Gast)


Lesenswert?

Noch ein kleiner Nachtrag

Programm mit Debugger durchsteppen, dann siehst Du sehr schoen an 
welcher Stelle es hakt, bzw. das Programmverhalten sich von Deinem 
gedachten Verhalten unterscheidet.

Leider kommt "diese Art des Testens" in den meisten Vorlesungen,... zu 
kurz.

Viele Gruesse
Winfried

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.