Hallo, Wie kann ich den Zustand von 2 Pins (PORTB0 und PORTB1) in einer variablen abspeichern? Muss 2 Schleifen abfragen. und erst nach 3 sekunden soll etwas passieren. Desswegen wollte ich den zustand einmal abfragen und abspeichern und das ganze nach 3 sekunden nochmal tuen. (In der zwischenzeit läuft anderer Code ab). Diese beiden abgespeicherten werte. was ja nur 00 01 10 oder 11 sein kann, möchte ich dann auf gleihcheit überprüfen. sind die beiden variablen unterschiedlich. soll das programm fortgeführt werden, wenn sie aber gleich sind UND 01 oder 10 sind. soll in ein entsprechendes UP gesprungen werden. bei gleihcheit von 00 und 11 soll normal im code weiter gegangen werden. Dachte da irgendwie an eine Überprüfung und dann eine case anweisung? Vielen Dank
Tobias xxx schrieb: > Hallo, > > Wie kann ich den Zustand von 2 Pins (PORTB0 und PORTB1) in einer > variablen abspeichern? indem du dir eine Variable machst (welch Überraschung) und dort einfach den PIN Wert reinspeicherst uint8_t Variable; Variable = PINB; wenn du nur an 2 Bits interessiert bist, ist es vielleicht ganz hilfreich, sofort mal alle anderen Bits definiert auf 0 zu setzen Variable = PIND & ( 1 << PB7 | 1 << PB6 ); > Dachte da irgendwie an eine Überprüfung und dann eine case anweisung? was du immer mit deinem case hast :-)
> wenn du nur an 2 Bits interessiert bist, ist es vielleicht ganz > hilfreich, sofort mal alle anderen Bits definiert auf 0 zu setzen > > Variable = PIND & ( 1 << PB7 | 1 << PB6 ); Dein PIND wird warscheinlich ein PINB sein schätze ich mal. und alle anderen Bits auf 0 setzen? Die anderen Pins darf ich nicht verändern. Oder verstehe ich das falsch? Und ja was hab ich mit meiner case anweisung. Das ist halt eine der sachen, diewir in der schule schon genutzt haben und simpel ist. kann es natürlich auch mit if schleifen wieder abfragen.
Schon wieder übersehen das das ja quasi eine Maskierung ist ^^ Klappt alles supi. Jetzt kommt meine case anweisung oder if anweisung noch. mal schauen ob das auch was wird Vielen DANK
Hallo, ich habe dochnoch ein problem: Ich will 2 PINS abfragen und speichern, um sie hinterher zu vergleichen.
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
38 | |
39 | |
40 | |
41 | |
42 | |
43 | |
44 | |
45 | |
46 | |
47 | |
Kann mir wer sagen, warum meine Abfrage nie in den Elsezweig springt, obwohl ich die eingänge ändere und somit meine variablen mit unterschiedlichen Werten fülle. Vielen Dank
Tobias xxx schrieb: > if (induk1 == induk2) //sind induk1 und induk2 gleich Solche Kommentare sind UNNÖTIG und VERWIRREND und UNLESERLICH! > indukzwischen = (PINB & ( 1 << PB0 )) | (PINB & ( 1 << PB1 )); Das geht kürzer: indukzwischen = PINB & (1<<PB0 | 1<<PB1); > nie in den Elsezweig springt In welchen? Da sind so viele...
Hi,
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
hier wird nie in den elsezweig gesprungen, obwohl ich die beiden variablen unterschiedlich beschreiben lassen habe. Danke für den Tipp, das das speichern auch mit weniger code geht.
Habe gerade deine Kürzung des abspeicherns umgesetzt, und jetzt scheint es zu funktionieren. leider weiß ich nicht woran das liegen kann. Werde das nochmal auif herz und nieren testen. Danke
Tobias xxx schrieb: > hier wird nie in den elsezweig gesprungen Wie stellst du das fest? > obwohl ich die beiden variablen unterschiedlich beschreiben lassen habe. Wie stellst du das fest? > beschreiben lassen habe. Von wem? > Danke für den Tipp, das das speichern auch mit weniger code geht. Keine Ursache. Was ich da angewendet habe sind nur Kenntnisse von Bitmanipulation und Operatorenprioritäten http://de.wikibooks.org/wiki/C-Programmierung:_Liste_der_Operatoren_nach_Priorität
Ich habe das programm gedebugt mit dem avr studio im step betrieb also schritt für schritt. Und kurz vor der Abspeicherung habe ich das eine Bit manuell geändert. und vor der nächsten abspeicherung nochmal geändert, sodass die beiden variablen ja nicht gleihc sein können. Ne andere möglichkeit weiß ich nicht, da ich nicht weiß wo ich mir den Inhalt der von mir erstellten variablen mal angucken kann wärend ich das programm debugge. Aber habe jetzt ein bisschen was getestet und es scheint zu funktionieren.
Tobias xxx schrieb: > wo ich mir den Inhalt der von mir erstellten variablen mal angucken kann Im Watch-Fenster sollte das gehen...
Also unter watch 1 und watch2 steht garnix- und in der i/o view stehen ja sonstwas für bezeichnungen. Da weiß ich nicht wo ich unter den bits meine variable finden soll.
Gast
#2562579
Hi >Also unter watch 1 und watch2 steht garnix- Klar. Da trägt man ja auch die Variablen ein, die man sehen möchte. >...und in der i/o view stehen ja sonstwas für bezeichnungen. Wenn dir das, was dort steht nichts sagt solltest du dich erst mal mit den Grundlagen beschäftigen. MfG Spess
Im Debugmodus: Variable markieren, rechtsklick-> "Add Watch" Gruß Jonas
Vielen Dank
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.