Hallo, ich habe da mal eine Frage. Angenommen ich habe eine Reihe von Dip-Schaltern an meinem Atmega angeschlossen und will nun in C diese Pins benutzten um eine Zahl zu bestimmen, mit der ich dann rechnen kann. Binär oder Dezimal ist ja jetzt erstmal egal. Dann würde ich normalerweise hingehen und den Zustand meines Ports mit sowas wie i = PinX & Maske; irgendwas = irgendwasanderes * i; auslesen. Ich nehme die Pins, die ich brauche, die anderen maskiere ich weg und kann dann mit meinen Dip-Schaltern eine binäre Zahl codieren, um damit zu rechnen. Wie mache ich das aber, wenn die Dipschalter über mehere Ports verteilt sind und ich eine zusammenhängenden Binärzahl will? Ich brauche also irgendwas in der Form von. if (!(PINB &(1<<2))) { LSB von i; } if (!(PINC &(1<<5))) { 1. Bit von i; } if (!(PIND &(1<<0))) { 2. Bit von i; } usw. Wie aber macht man sowas konkret und in elegant? Gruß Tom
Hi C is nicht, aber vielleicht ein Lösungsansatz: Register 1 mit Portwert A belegen. unwichtige Bits mit Und-Verknüpfung ausblenden (Masierung) Bit in Position schieben und register in Variable schreben Nächsten Portwert laden unwichtige Bits ausblenden Auf Position schieben Mit abgelegtem Wert verodern usw..... Gruß oldmax
Sowas geht nicht mit Bitoperationen in C? Was für eine Enttäuschung. Na dann halt alle Ports einlesen, wichtige Bits rausmaskieren und alle zusammen verunden. Müsste ja auch gehen.
http://www.mikrocontroller.net/articles/Bitmanipulation da steht alles. Musst dir halt Wertigkeiten ausdenken. z.B. Wertigkeiten immer 2^n. Bsp. Pin7 Wertigkeit 2^0 = 1 Pin 12 Wertigkeit 2^1 = 2 Pin 329 Wertigkeit 2^2 = 4 Pin 2 Wertigkeit 2^3 = 8 deine Dezimalzahle ist die Summe der Wertigkeiten (wenn der Pin log. high ist dann gilt die Wertigkeit ansonsten 0)
Servus, > > usw. Wie aber macht man sowas konkret und in elegant? > Sich vorher darueber Gedanken machen und nicht einfach drauflos loeten. > Was für eine Enttäuschung. was kann den C dafuer, dass du deine Schalter so konfus anklemmst, obwohl sie offensichtlich eine logische Einheit bilden sollen?
Tom schrieb: > Sowas geht nicht mit Bitoperationen in C? Sicher gehts. Aber es gibt nicht für jeden Fall von "Hole dir aus 25 Variablen die Bits mit den Nummern x, y, z und schiebe alle gemeinsam in eine neue Variable" ein Spezialzeichen. Da würde die Tastatur schnell zu klein werden. C stellt dir den Baukasten zur Verfügung. Der Bauskasten ist vollständig genug, dass man jede Operation daraus zusammenstellen kann. So wie das bei Lego früher auch mal war: Ein überschaubarer Satz von Bausteinen mit denen man gebaut hat. Heute besteht Lego ja nur noch aus Spezialteilen für jeden möglichen Furz.
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.