Not logged in. · Lost password · Register

bongo
Member since Oct 2011
4 posts
Subject: Steigende und fallende flanken an ein und der selben Quelle unterscheiden
Hallo,

bei den Aufgaben mit dem Tank (Juli 2009 und März 2010) muss man an ein und der selben Quelle steigende und fallende Flanken unterscheiden.
Mein vorgehen wäre die Interruptquelle auf eine beliebige Flanke scharf zu stellen und dann zu schauen ob am entsprechenden PIN eine null oder eine 1 steht.
Bin ich richtig in der Annahme, dass eine fallende Flanke eine 0 und eine steigende Flanke eine 1 hinterlässt???

Gruß Max
morty
SPiC-Meister
(Moderator)
Member since May 2011
331 posts
Der Ansatz ist richtig (und IMO der Bessere von den zwei möglichen). Aber der Interrupt wird ja nach dem Flankenwechsel ausgelöst. Bei einer steigenden Flanke hat der Pin danach zwangsläufig den Wert 1 (und umgekehrt).
Da der Anfangszustand bekannt ist, kann man davon ausgehen, dass bei jedem Interrupt ein Pegelwechsel stattgefunden hat. Hier besteht in der Praxis allerdings das Risiko, dass man aus irgendeinem dummen Grund doch mal einen Wechsel verpasst; was deutlich verheerender wäre, als wenn man "nur" etwas verzögert reagiert.
il66ifix
Member since May 2011
109 posts
auf alle Fälle entprellte Taster verwenden, sonst ist der Blödsinn vorprogrammiert :D
TW
Member since Jul 2012
9 posts
könnte man auch einfach bei jedem flankenwechsel einen interrupt auslösen, welcher dann das entsprechende bit invertiert? Denn auf eine fallende Flanke muss ja zwangsläufig eine steigende folgen? oder ist diese annahme falsch?
Christian St.
Member since May 2011
212 posts
@TW: Wenn du dann aber temporär Interrupts deaktivierst, funktioniert dein Programm nicht mehr. Die Flanken müssen sich immer gegenseitig abwechseln, aber es ist nicht garantiert, dass die Interrupts auch genau dann aktiv sind, wenn der 2. Flankenwechsel stattfindet.
Dr. House
Member since Dec 2011
6 posts
Wie würde das Auslesen des Pins denn funktionieren?
So?: Pin2 auslesen über: uint8_t zahl = (PIND & (1<<2))>>2?
also zuerst alle anderen auf null setzen und dann so shiften, dass ich die zahl da hab, wo ich sie haben will?(ganz rechts)
Für die Aufgabe vom März 2010 muss ich doch, um den Pull-Up Widerstand zu aktivieren, das entsprechende Bit auf 1 setzen?
PORTD |= (1<<2); oder?
DDRD &= (1<<2); brauch ich ja sowieso

Danke
This post was edited 2 times, last on 2012-07-26, 18:08 by Dr. House.
Christian St.
Member since May 2011
212 posts
@Dr. House:
Ja, so funktioniert das Auslesen des Pins 2. (wahrscheinlich meinst du aber PORTD statt PIND)

PORTD |= (1<<2); // setzt Pin 2 an PORT D, das ist so in der Angabe gefordert.
Dr. House
Member since Dec 2011
6 posts
nein ich meinte schon pind. portd setz ich doch auf 1, da muss doch dann nichts mehr ausgelesen werden oder?
morty
SPiC-Meister
(Moderator)
Member since May 2011
331 posts
In reply to post #5
Quote by TW:
könnte man auch einfach bei jedem flankenwechsel einen interrupt auslösen, welcher dann das entsprechende bit invertiert? Denn auf eine fallende Flanke muss ja zwangsläufig eine steigende folgen? oder ist diese annahme falsch?
Hab ich das nicht geschrieben... *grübel*

Quote by Dr. House:
Wie würde das Auslesen des Pins denn funktionieren?
So?: Pin2 auslesen über: uint8_t zahl = (PIND & (1<<2))>>2?
In der Übung solltest du eigentlich genug Pins ausgelesen haben. - Oder ich verstehe nicht worauf du hinaus willst.
Dr. House
Member since Dec 2011
6 posts
also entweder ich steh jetzt auf dem schlauch, oder ich bin zu doof dafür... wann haben wir denn pins ausgelesen??? wir haben doch immer alles auf ausgang gehabt?
morty
SPiC-Meister
(Moderator)
Member since May 2011
331 posts
Wenn ihr das PINx Register in den Übungen nicht hattet, dann kommt es auch in der Klausur nicht dran - wenn doch, wären die Übungen evtl nicht schlecht gewesen. Außerdem dürfte es doch im SPiC-Skript-Buch ausführlich erklärt sein.
Dr. House
Member since Dec 2011
6 posts
ich hab die übungen ja gemacht, da war das meines wissens nach nicht dran. aber würde es grundsätzlich stimmen, so wie ich es gemacht hab? laut folie 14-14 repräsentiert bit i den pegel an pin i unabhängig von der konfiguration als ein-/ausgang.
danke

p.s.: mini-evaluation: bitte gebt uns doch die lösungen. dass wir uns mehr mit gspic auseinandersetzen, wenn wir keine haben, ist meiner meinung nach utopisch. justmy2cents
morty
SPiC-Meister
(Moderator)
Member since May 2011
331 posts
Nope, es geht nicht darum, dass ihr euch mehr damit auseinandersetzt, sondern auch darum, dass wir unsere Musterlösungen mit mehr Sorgfalt machen müssten. Naja das kommt drauf an was du machen willst.
Den Rechtsshift kannst du dir z.B. bei einem if sparen, weil if ja nur die 0 als false interpretiert. Wenn du zahl auf 1 setzten willst, für den Fall das Pin D2 auf high ist, dann funktioniert das so.
Close Smaller – Larger + Reply to this post:
Verification code: VeriCode Please enter the word from the image into the text field below. (Type the letters only, lower case is okay.)
Smileys: :-) ;-) :-D :-p :blush: :cool: :rolleyes: :huh: :-/ <_< :-( :'( :#: :scared: 8-( :nuts: :-O :troll:
Special characters:
Go to forum
Powered by the Unclassified NewsBoard software, 20110527-dev, © 2003-8 by Yves Goergen