Nicht angemeldet. · Kennwort vergessen · Registrieren

bongo
Mitglied seit 10/2011
4 Beiträge
Betreff: 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)
Mitglied seit 05/2011
331 Beiträge
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
Mitglied seit 05/2011
110 Beiträge
auf alle Fälle entprellte Taster verwenden, sonst ist der Blödsinn vorprogrammiert :D
TW
Mitglied seit 07/2012
9 Beiträge
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. (Moderator)
Mitglied seit 05/2011
196 Beiträge
@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
Mitglied seit 12/2011
6 Beiträge
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
Dieser Beitrag wurde 2 mal verändert, zuletzt am 26.07.2012, 18:08 von Dr. House.
Christian St. (Moderator)
Mitglied seit 05/2011
196 Beiträge
@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
Mitglied seit 12/2011
6 Beiträge
nein ich meinte schon pind. portd setz ich doch auf 1, da muss doch dann nichts mehr ausgelesen werden oder?
morty
SPiC-Meister
(Moderator)
Mitglied seit 05/2011
331 Beiträge
Antwort auf Beitrag #5
Zitat von 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*

Zitat von 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
Mitglied seit 12/2011
6 Beiträge
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)
Mitglied seit 05/2011
331 Beiträge
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
Mitglied seit 12/2011
6 Beiträge
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)
Mitglied seit 05/2011
331 Beiträge
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.
Schließen Kleiner – Größer + Auf diesen Beitrag antworten:
Prüfcode: VeriCode Gib bitte das Wort aus dem Bild ins folgende Textfeld ein. (Nur die Buchstaben eingeben, Kleinschreibung ist in Ordnung.)
Smileys: :-) ;-) :-D :-p :blush: :cool: :rolleyes: :huh: :-/ <_< :-( :'( :#: :scared: 8-( :nuts: :-O :troll:
Weitere Zeichen:
Gehe zu Forum
Powered by the Unclassified NewsBoard software, 20110527-dev, © 2003-8 by Yves Goergen