Hallo
Ich würde gern in meinem Programm einen einzelnen Ausgangspin mit if
abfragen ob der Ausgang gesetzt ist oder nicht.
Ich habe es mit:
DDRB |= 0xff;
PORTB = buffer; //In buffer ist Wert 0 - 255
if ( PINB & (1<<PINB1) ) //Hier würde ich gern Wissen was geht
{
.....
}
versucht aber das ging nicht. Der komplette Port B ist als Ausgang
definiert und wird über ein Byte angesteuert.
Gruß
Ram99
Gast
#515334
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
Es reicht aber auch wenn dein Port eh als Ausgang definiert ist, das Register zu lesen. Etwa so:
1 | |
2 | |
3 | |
4 | |
GvH
Gast
#515771
Datenblatt lesen. Beim Meag32 steht z.B. "Independent of the setting of Data Direction bit DDxn, the port pin can be read through the PINxn Register bit." Also ist dein
1 | |
2 | |
3 | |
4 | |
eigentlich richtig. Woher weisst du denn, daß das nicht funktioniert? Oliver
Gast
#515813
> Ich würde gern in meinem Programm einen einzelnen Ausgangspin mit if > abfragen ob der Ausgang gesetzt ist oder nicht. An Hand des DDR Registers weisst du, ob ein Port als Eingang (Bit=0) oder als Ausgang (Bit=1) konfiguriert ist. Wenn du herausgefunden hast, dass der Port als Ausgang konfiguriert ist, kannst du bei PORT herausfinden, ob der Ausgang LOW (Bit=0) oder HIGH (Bit=1) gesetzt ist.
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 | |
Gast
#515884
>> Datenblatt lesen. >> >> Beim Meag32 steht z.B. >> >> "Independent of the setting of Data Direction bit DDxn, the port pin can >> be read through the PINxn Register bit." Macht bloß herzlich wenig Sinn. Aber klar dass das funktioniert. GvH
Gast
#515910
Über den "Sinn" zu diskutieren, ist müssig. So hat es ATMEL eingebaut, so steht es im Datenblatt, und so funktioniert es auch. Daher auch nochmal meine Frage an Thomas Webster: Woram merkst du dann, daß das anscheinend nicht funktioniert? Oliver
Oliver wrote: > Über den "Sinn" zu diskutieren, ist müssig. So hat es ATMEL eingebaut, > so steht es im Datenblatt, und so funktioniert es auch. > > Daher auch nochmal meine Frage an Thomas Webster: Woram merkst du dann, > daß das anscheinend nicht funktioniert? > > Oliver Danke erstmal für die vielen Antworten :) Ich habe es ja mit dieser Variante: if(PINB & (1<<PINB1)) versucht aber das Programm springt immer in die else {} Bedingung. Wenn ich es wie " Graf van Hirntot" mache mit: if (PORTB & (1 << 1)) funktioniert es sofort ohne Probleme. Weiß auch nicht warum die obere Variante nicht funktioniert. Hatte es ja erst versucht weil ich es so eigentlich kannte. Gruß Ram99
Gast
#516023
Mach doch mal bitte probehalber drei oder vier von diesen hier vor die if-schleife:
1 | |
Vielleicht ist ja mein Verdacht begründet - es würde mich aber überraschen. GvH
Gast
#516697
mit PORTB liest Du das Ausgangsregister, mit PINB den Pin, vermutlich ist der Ausgang auf low gezogen bzw. geht nicht schnell genug auf high
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.
