Hallo miteinander, Ich wollte mal fragen wie ich ein Register abfragen kann um dann eine Funktion auszuführen. laden wandlung1 = ADCH; if (wandlung1 == 1) ich habs auf die Weise versucht aber der Kontroller (atmega128) nimmt des einfach ned er ignoiert es kann mir da jemand helfen. Vielen Dank schonmal! Gruß Thomas
Hallo Bin C zwar auch noch so fit, aber man lernt ja nie aus. Was willst du denn mit der Abfrage abfragen. Gehe mal davon aus, das wandlung1 eine Variable ist. Du fragst also jetzt ab, ob der Wert deiner AD Wandlung zwischen 256 und 511 liegt. Weiß nicht, ob du das willst. Außerdem muß erst ADCL ausgelesen werden, dann ADCH. Schreib mal genauer, was du genau willst. MFG Dieter
Hallo Dieter, Ja genau des will ich machen hab die Wandkung jetzt gemacht und natürlich als erstes das ADCL ausgelesen jetzt will ich den Wert auslesen und ausgeben soll von 0 bis 5 V ausgegeben werden jetzt will ich die letzten zwei Bit von der 10 Bit Wandlung abfragen und dementsprechend dann die Werte dazuaddieren wenn die Bits gesetzt sind damit ich den richtigen Wert ausgebe hier is mein Programm . read_adc(0x00); wandlung = ADCL; wandlung1 = ADCH; if (wandlung1 == 1) { wandlung = wandlung + 512; if (wandlung1 == 3) { wandlung = wandlung + 1024; } else {;} } else { if (wandlung1 == 2) { wandlung = wandlung + 1024; } else {;} } kommazahl = wandlung * 0.00244; sprintf (buf," Laser AN SPG: %2.2f V " ,kommazahl); textlcd (buf,1); So hab ich mir des zumindest gedacht villeicht gibts auch ne andere Möglichkeit Vielen Dank schonmal. Gruß Thomas
Hallo Probier es doch mal so unsigned int wandlung; wandlung = (ADCH<<8) + ADCL; Damit steht der Wert der AD Wandlung in wandlung. MFG Dieter
hm danke schonmal; aber wenn ich mir den Befehl (ADCH<<8) anschau dann bedeutet des ja des ich um 8 Stellen nach links scheibe wenn ich jetzt z.B. 00000011b in dem Resgister stehen hab dann hab ich ja danach 00000000b dirn stehn und damit sind meine 2 Bit die ich mit einrechnen will verlohren gegangen oder seh ich des falsch ? MFG Thomas
Hallo Mit (ADCH<<8) schiebst du den Wert von ADCH ( 8 Bit) um 8 Stellen nach links, in der 16 Bit Variablen wandlung ( Bits 9 bis 16) . Dann addierst du ADCL dazu, die aber ja nur auf den unteren 8 Bits "landen" können, da es ja nur eine 8 Bit Variable ist. Das Ergebnis ist ja eine 16 Bit Variable, damit stimmt dein Wert ja. Hoffe es kommt jetzt so besser rüber. Die Variable Wandlung kann jetzt Werte von 0 bis 1023 annehmen. Probier das im Simunlator mal aus, da sieht man dann, das es klappt. MFG Dieter
wenn schon in C, warum denn nicht gleich als int-Variable lesen? unsigned int AD; AD=read_adc (0); unsigned int read_adc (unsigned char channel){ . . return (ADCW) }
@crazy horse Danke für den Tip. Habe mir die datei io4433.h nochmal genau angeschaut und die define gefunden. Hatte es damals mal mit ADC probiert, ging aber nicht. Dachte es wäre wie beim TCNT1, einfach L oder H weglassen. Ist für mich aber nicht nachzuvollziehen, warum bei ADC ein W daran muß, bei allen "Doppelregistern" jedoch nicht. MFG Dieter
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.