Tag, ich muss zum teil mit der veralteten gcc lib arbeiten, da teile meines codes mit dieser version gefertigt worden sind. jetzt möchte ich port b freischalten. macht man heutzutage ja so: DDRB = 0x00; da die alt lib mir hier aber ein invalid lvalue entgegenwirft muss ich outp benutzen. schreib ich jedoch outp(0x00,DDRB); bleibt der port geschlossen und ist kein eingang ???
ich seh gerade dass der port anscheinend doch freigeschaltet ist. so wies ausschaut klappt das hier nicht: while (PINB & (1<<PINB3)) wie heißt das auf "alt" also mit alten lib ? oder vielleicht kann mir jemand sagen wieso die schrittmotorsteuerung mit der alten lib funktioniert und bei der neuen lib der motor nur "rumzuckelt" als hätte er nich genügend leistung ?
sorry, nochmal ich. int main(void) { stepper_on(); outp(0X00,DDRB); // DDRB = 0x00; sens_setLED(1,0); uint8_t i; uint8_t x; uint8_t z; while(1){ sens_setLED(0,1); i=PINB; z=1; while (z<40){ x=PINB; if (i!=x) // pin 4 high ? { diese codestelle mit der neuen lib und entsprechend umgeschrieben und er geht in die if-abfrage rein und führt die nachfolgenden aktionen aus, wenn ich was sense und sich x von i unterscheidet da sich ja der port ändert. mit der alten lib klappt das nicht ? wo ist das problem ? was mache ich falsch ?
ok, ich habs jetzt geschafft mit inp die zustände abzufragen. jetzt muss ich nurnoch einzig und allein (HOFF) diese zeile if(PINB & (1<<PINB3)) so übersetzen, dass sie von der alten lib verstanden wird, wie mach ich das ?
Du liest mit inp den aktuellen Port-Status ein und testest mit & (1 << 3), ob Bit 3 gesetzt ist. PINB3 ist ja AFAIK nur ein define für die Zahl 3.
super danke euch, das klappt soweit. jetzt würde ich gerne ne aktion ausführen, wenn NUR PINB3 aus 1 gesetzt ist und PB0 bis PB2 auf 0. SO klappt das schonmal net: if (inp(PINB) & (1<<PINB3) & !(1<<PINB0) & !(1<<PINB1) & !(1<<PINB2)){.. auch so: if (inp(PINB) & (1<<PINB3) & (1>>PINB0) & (1>>PINB1) & (1>>PINB2)){.. komme ich zu keinem ergebnis ? :(
Ich fürchte, das funktioniert auch mit && nicht. @Phozz: Du solltest überlegen, was die Bitoperatoren und was der !-Operator bewirken. Dann erkennst du bestimmt schnell, dass deine if-Abfrage so ein wenig sinnlos ist. Zum Beispiel schiebt "(1>>PINB1)" die 1 um eine Stelle nach rechts. Dummerweise kommt da 0 raus, und "irgendwas & 0" ist in jedem Fall 0, also false. Du könntest das alles mit einer Kombination von & und == erschlagen. Du müsstest nur dazu übergehen, statt endloser (1<<PINBn)-Ketten direkt den passenden Hex-Wert, die Bitmaske, in den Code zu schreiben.
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.