Immer wieder stoße ich auf folgendes Problem. In einem Register möchte ich ein oder mehrere Bits setzen und den Rest unverändert lassen. Leider weiß ich nicht ob das jeweilige Bit eine 0 oder eins sein wird weil es z. B. aus einer Variablen kommt. Sonst könnte ich ja mit: x |= (1 << Bitnummer); // wird ein Bit in x gesetzt x &= ~(1 << Bitnummer); // wird ein Bit in x geloescht arbeiten. Im Aktuellen Fall möchte ich beim ATmega8 den Analogwert an belibigen Pins auslesen. Dazu soll dann nur noch der Pin in ADMUX angepasst werden. Der Rest zum einstellen des ADC´s wurde bereits in einer Init erledigt: unsigned int Read_ADC(unsigned char pin) { unsigned int AD_Result; ADMUX = ?????????; // Kanal / Pin einstellen ADCSRA |= (1<<ADSC); // ADC Starten while(ADCSRA & (1<<ADSC)); // AD Wandlung abwarten AD_Result = ADCL; // Unteren 8 Bit des Meßwertes auslesen AD_Result |= (ADCH<<8); // Oberen 8 Bit des Meßwertes auslesen return AD_Result; } Gesucht ist also für ????????? so was wie "pin<<0" aber ohne das der Rest (Bit7:4) des Registers verändert wird. Hat da jemand eine Idee?
So was kann man mit einer XOR-Verknüpfung erledigen. ADMUX ^= 1<<PIN negiert das Bit an der gewünschten Bitposition. Ist es das was du suchst???
@Sepp ADMUX ^= 1<<PIN toggelt das Bit an der gewünschten Bitposition!!
@Reiner: toggeln = 'negieren' = invertieren = umschalten...
Wenn die Nummer des auszuwählenden Kanals in einer Variablen steht und Du nen Einzeiler willst, dann müsste ADMUX = (ADMUX & 0xf0) | (kanal & 0x0f); funktionieren, wobei die 4 MSB (Bit 7:4) unverändert bleiben. In der Variablen 'kanal' steht die Nummer des auszuwählenden Kanals. Gruß Johnny
Perfekt, Ostern ist gerettet! ADCSRA = (ADCSRA & 0xf0) | ...; und ADMUX = (ADMUX & 0xf0) | (kanal & 0x0f); funktionieren! Danke und wünsche euch allen dicke Eier (-: Aurel
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.