Gast
#3264080
Hallo Kann mir mal einer sagen wieso diese if-bedingung bei meiner Schaltung plotzlich wahr wird :(
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
|
Anzeige
|
UHR- if-bedingung
Gast
#3264080
Hallo Kann mir mal einer sagen wieso diese if-bedingung bei meiner Schaltung plotzlich wahr wird :(
Gast
#3264082
Weil an PINC5 Low angelegt wird?
Gast
#3264087
Wiel wichtiger ist doch die Frage, warum du uns eine C# Projekt angehangen hast.
Gast
#3264089
Gast
#3264093
>Wiel wichtiger ist doch die Frage, warum du uns eine C# Projekt >angehangen hast. :(
Gast
#3264103
> PINC & ( 1 << PINC5) und > PORTC = (1 << PC3); passt nicht wirklich zusammen. Du darst nur die Ausgänge manipulieren. Außerdem fehler noch die volatiles bei den ganzen ISR variablen.
Gast
#3264104
Wenn C.5 auf GND (oder LOW) gelegt wird, schaltest du deinen PORTD auf 0xFF (alles HIGH) und das machst du so lange, bis du dem µC den Strom wegnimmst. Alles, was darunter steht, wird niemals erreicht. Die ISR wird zwar arbeiten, aber die verändert ja nur stunde, minute, sekunden. Die Ausgabe erfolgt nie.
Gast
#3264108
Ich würde es mal mit 0-Pegel an Pin C5 Probieren - oder auch nicht.
Gast
#3264114
>Die ISR wird zwar arbeiten, aber die verändert ja nur stunde, minute, >sekunden. Die Ausgabe erfolgt nie. Wenn die Taste gedrückt wird soll keine ausgabe mehr erfolgen.
Gast
#3264115
> PINC & ( 1 << PINC5) >und > PORTC = (1 << PC3); >passt nicht wirklich zusammen. Du darst nur die Ausgänge manipulieren. kannst du mir das bitte genauer erklären?
Gast
#3264119
Azubi schrieb: >> PORTC = (1 << PC3); > >>passt nicht wirklich zusammen. Du darst nur die Ausgänge manipulieren. > > kannst du mir das bitte genauer erklären? wenn ein PullUP eingeschaltet ist, dann wird diese mit PORTC = (1 << PC3); wieder abgeschaltet. Man sollte einfach nur das Bit ändern, was man braucht. Und nicht den kompletten port zuweisen.
Gast
#3264127
> DDRC = 0x0F; > PORTC = ( 1 << PC4)|( 1 << PC5); Die Datenrichtung ist: Ausgang für C0 bis C3 und Eingang für C4 bis C7 C4 und C5 erhalten einen Pullup. > wenn ein PullUP eingeschaltet ist, dann wird diese mit PORTC = (1 << > PC3); wieder abgeschaltet. Ein Ausgang hat keinen Pullup! C3 ist ein Ausgang, er wird durch "PORTC = (1 << PC3);" auf HIGH gesetzt.
Gast
#3264128
>wenn ein PullUP eingeschaltet ist, dann wird diese mit PORTC = (1 << >PC3); wieder abgeschaltet. Nur zum Verständnis: PORTC = ( 1 << PC0); entspricht PORTC = b'0000 0001' dadurch schalte ich mein Pull-up Widerstand ab, also muss ich PORTC = ( 1 << PC0); durch PORTC = b'00100001' ersetzen um meinen Pull-up Widestand eben nicht abzuschalten. Ich hoffe ich habe es jetzt richtig verstanden
Gast
#3264139
DDRC ist das Datenrichtungs-Register. Dort, wo eine 1 steht, ist ein Ausgang, bei einer 0 ist das Bit ein Eingang. Für die Eingangsbits: Wenn du auf PORTC schreibst, bedeutet ein 1-Bit, daß der Pullup eingeschaltet wird und ein 0-Bit, daß der Pullup aus ist. Für die Ausgangsbits: Ein 1-Bit bedeutet, daß der Ausgang auf 1 (also HIGH) geht, ein 0-Bit, daß der Ausgang auf LOW geht. Also erstmal sagen, was Eingang und was Ausgang ist mit DDRC. Und dann bei Eingängen die Pullups und bei Ausgängen die Ausgangspegel setzen, ok? hilmar schrieb: >> DDRC = 0x0F; >> PORTC = ( 1 << PC4)|( 1 << PC5); > > Die Datenrichtung ist: Ausgang für C0 bis C3 und Eingang für C4 bis C7 > C4 und C5 erhalten einen Pullup. > >> wenn ein PullUP eingeschaltet ist, dann wird diese mit PORTC = (1 << >> PC3); wieder abgeschaltet. > > Ein Ausgang hat keinen Pullup! > C3 ist ein Ausgang, er wird durch "PORTC = (1 << PC3);" auf HIGH > gesetzt. Schon. Was er sagen wollte. Durch die Zuweisung wird nicht nur PC3 auf High gesetzt. Als Nebeneffekt werden alle anderen BIts in PORTC auf 0 gesetzt. Und damit ist dann der schöne Pullup, der hier eingeschaltet wurde >> PORTC = ( 1 << PC4)|( 1 << PC5); nur noch Geschichte.
Gast
#3264144
>ok?
Danke, das habe ich schon verstanden
Azubi schrieb: >>wenn ein PullUP eingeschaltet ist, dann wird diese mit PORTC = (1 << >>PC3); wieder abgeschaltet. > > Nur zum Verständnis: > > PORTC = ( 1 << PC0); entspricht PORTC = b'0000 0001' > > dadurch schalte ich mein Pull-up Widerstand ab, also muss ich > PORTC = ( 1 << PC0); durch PORTC = b'00100001' ersetzen um meinen > Pull-up Widestand eben nicht abzuschalten. > > Ich hoffe ich habe es jetzt richtig verstanden Im Prinzip ja. Nur mahct man das nicht so. Du willst dir doch nicht ewig und immer und überall merken, welche anderen Pins du in welchem Portregister du zusätzlich auch noch mit berücksichtigen musst! Hier
hast du es doch so schön geschrieben: In TIMSK ausschliesslich und nur das OCIE1A Bit setzen. Alle anderen Bits bleiben so wie sie sind.
Gast
#3264146
Azubi schrieb: > dadurch schalte ich mein Pull-up Widerstand ab, also muss ich > PORTC = ( 1 << PC0); durch PORTC = b'00100001' ersetzen um meinen > Pull-up Widestand eben nicht abzuschalten. ja aber nicht sehr komfortabel. du sollte einfach nur ein Bit setzen und die andere einfach nicht anfassen! PORTC |= ( 1 << PC0) http://www.mikrocontroller.net/articles/Bitmanipulation Ein Bit setzen
Ein Bit löschen
ein Bit auf 1 abfragen
ein Bit auf 0 abfragen
Bitmanipulation
Gast
#3264152
>PORTC |= ( 1 << PC0)
jetzt dämmerts :D
Gast
#3264153
danke euch allen fÜr die Hilfe Antwort schreibenBitte melde dich an, um einen Beitrag zu schreiben. |
Anzeige
|