Ja also ich hab ein paar Probleme mit dem internen ADC: Ich programmiere das ganze mit Keil in C, und wenn ich dann probiere ADCON = xxxxxxxx zu schreiben, meckert der Compiler dass er ADCON nicht kennt... weis jemand wie ich den sonst beschreiben kann? Und ein weiteres Problem ist, dass ich nicht weis, wie ich das busy abfragen kann.... es ist ja im ADCON enthalten aber wie frage ich ein einzelnes Bit eines Bytes ab?? Danke für Antworten
Hallo, du musst den richtigen Header-File einbinden, wie der bei Keil genau für den 80535 heisst kann ich dir nicht sagen. Schau mal im Installtionsverzeichnis nach .h Dateien, eine davon wird für den 80535 sein. Darin steht dann: sfr ADCON = 0xD8; Gruß Volker
Hallo diese Routine benutze ich für eine Temperaturmessung mit einem KTY nach +5V und einem 1k5 Widerstand nach GND: messen() { /* Rt=1400+24*T Uref=5V Umess= Uref*(Rt/(1k5+Rt)) */ /* Rt(25)=2k Bereich des AD-Wandlers auf 2,5V -3,125V entspr. ca. 5 -45 Grad C */ /* 0..255 /5.6212 -0,5 liefert Temp */ /* Fehler 15 - 45 Grad < 1 Grad */ ADCON=0x07; /* AD-Kanal 7 */ DAPR=0xa8; /* Bereich 2,5 V -3,125V */ while((ADCON&0x10)!=0); /* Warten bis Wandlung fertig (15us ) */ tempmwert1=(int)((float)ADDAT/5.6212-0.5); /* Umrechnen */ ADCON=0x06; /* AD-Kanal 6 */ DAPR=0xa8; /* Bereich 2,5 V -3,125V */ while((ADCON&0x10)!=0); /* Warten bis Wandlung fertig (15us ) */ tempmwert2=(int)((float)ADDAT/5.6212-0.5); /* Umrechnen */ ADCON=0x05; /* AD-Kanal 5 */ DAPR=0xa8; /* Bereich 2,5 V -3,125V */ while((ADCON&0x10)!=0); /* Warten bis Wandlung fertig (15us ) */ tempmwert3=(int)((float)ADDAT/5.6212-0.5); /* Umrechnen */ }
hmmm aber ich versteh den ausdruck while((ADCON&0x10)!=0) funktioniert.... fragt das while in diesem Fall nur das eine Bit ab... weil wenn er das gesamte ADCON!=0 abfragt is die Bedingung doch immer erfüllt....
@blawa es wird zunächst eine Bitweise Und-verknüpung mit 0x10 gemacht. 0x10 ist binär 00010000 Das ADOCN Register ist so aufgebaut: Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 ? BD CLK BSY ADM MX2 MX1 MX0 X X X 1 X X X X wenn AD nicht fertig 0 0 0 1 0 0 0 0 und Verkn. mit 0x10 -------------------------------------------- 0 0 0 * 0 0 0 0 das * Bit im Ergebnis wird erst dann 0, wenn das BSY-Bit 0 wird, und somit das gesamte Ergebnis. while ((ADCON&0x10)!=0); prüft also solange bis das BSY-Bit 0 wird. Anmerkung: Wenn du die richtige Header-Datei eingebunden hat kannst du auch direkt das BSY bit prüfen. while (BSY); Volker
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.