Forum: Mikrocontroller und Digitale Elektronik Negative Flanke mit Atmega 32 abfragen


von Sascha (Gast)


Lesenswert?

Hallo,
Ich habe ein kleines Problem und zwar habe ich mir bei Pollin das Atmel 
Evaluations Board Gekauft und einen Atmega 32.

Nun möchte ich ein Programm schreiben in dem Eine negative Flanke 
abgefragt werden soll die an PB0 ankommt und wen dan an PB4 ein High 
kommt möchte ich das er mir an PC1 ein Hihg rausgibt.
Allerdings weiß ich nicht wie ich die Neagtive flanke abfrage und mir 
diese dan speichern kann bis an PB4 ein High kommt.

Ich hoffe ihr versteht was ich meine.

Programmieren tuhe ich mit AVRstudio in C.

Habe zwar schon erfahrung mit dem Programmieren in C durch die Schule 
aber wir haben bis jetzt leider noch nicht gelernt eine Flanke 
abzufragen.

Habe auch schon im Forum gesucht aber irgendwie nicht das gefunden was 
ich suche.

Schon mal im vorraus danke für eure Hilfe!!

von Steffen (Gast)


Lesenswert?

könntest du auch andere Ports verwenden?
Wenn du D2(INT0) und D3(INT1) benutzt kannst du das über Interrupts 
machen.
Ob auf steigende/fallende Flanke getriggert werden soll kannst du in den 
Registern einstellen ( Datenblatt S.66/67, Kapitel "External 
Interrupts")

von Sascha (Gast)


Lesenswert?

Nen auswechen auf nen andern Port ist leider nicht möglich da ich von 
dem Controllerboard auf ne Leiterkarte gehe die schon vorgefertigt ist 
und auf der habe ich nur den PB zur auswahl als eingang.

von Sascha (Gast)


Lesenswert?

kann mir keiner weiterhelfen ich komme einfach nicht weiter!!!!

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Was meinst du mit negativer Flanke genau?

              Die
               V
+x V -------+
            |
 0 V        +------


oder

              Die
               V
 0 V ----------+
               |
-x V           +------

Wie groß ist x?

Je nach dem muss man eine Eingangsschaltung benutzen. Negative oder zu 
hohe Spannungen tun dem AVR aua. Die muss man zuerst in einen 
verträglichen Bereich bringen.

Wie oft kommen die Flanken (Frequenz)?

Die Frequenz ist wichtig für die Auswahl der Eingangsschaltung und für 
die Auswahl der passenden Programmstruktur.

Bei niedrigen Frequenzen kann man mit Polling ("Abfragen") arbeiten. 
Laufend den Zustand der Leitung abfragen und wenn sich der Zustand alt = 
HIGH zum Zustand neu = LOW geändert hat, hast du eine Flanke entdeckt.

Bei hohen Frequenzen ist Interruptbetrieb angesagt, d.h. du bereitest 
die Hardware des AVR so vor, dass diese unabhängig von deinem Programm 
auf die Flanke reagiert.

Ein Zwischending ist die Überwachung der Leitung in einer Timerroutine. 
Der Timer läuft öfter als dein Hauptprogramm und unabhängig "neben" 
deinem Hauptprogramm. In der Timerroutine wird dann Polling gemacht.

Für sauberen Interruptbetrieb gibt es verschiedene Möglichkeiten. Je 
nach Möglichkeit, muss aber das Signal an einem bestimmten Pin 
angeschlossen sein.

Der Analog Comparator vergleicht ein Signal mit einem Vorgabewert und 
kann einen Interrupt erzeugen, wenn der Vergleich so oder so ausfällt. 
Beispiel: Vergleiche Signal mit 2,56V (interne Referenz). Eingestellt 
wird Interrupt schmeissen, wenn Signal < Referenz. Das wird eine 
HIGH-LOW Flanke erkennen.

Die Input Capture Unit kann ebenfalls benutzt werden. Hier kann man 
direkt den Trigger (Auslöser) einstellen, ob eine steigende Flanke oder 
eine fallende Flanke den Interrupt auslöst.

Spielt bei der Signalquelle Prellen eine Rolle?

Wenn ja ist eine Entprellung notwendig.

von Sascha (Gast)


Lesenswert?

Also die flanke ist imprinzip keine Negative Flanke sondern eine 
Fallende Flanke as beudet sie sieht wie folgt aus:

+5V         _
           |   |
           |   |
OV    _____|   |______

Das signal ist normeler weise 0V-24V habe aber alle eingehenden und 
ausgehenden Singnale des controllers mit Opptokoplern galvanisch 
getrennt und so aufgabeut das am Controller 5 V Signale ankommen.

Das signal ist nur zum Auslösen einer schleife gedacht in der dan eine 
Funktion ausgführt wird.

Das signal kommt wenn es hoch kommt villeicht alle 10s also keine hohe 
frequenz.

Es sind insgesamt 4 solcher signale die jeweils etwas anderes auslösen 
sollen und wenn möglich sollten sie am PB0-PB3 angeschlossen werden.

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Als Anfänger würde ich dann ein Programm mit Polling schreiben.

Es hängt von der tolerierbaren Reaktionszeit auf ein ankommendes Signal 
ab, wie oft du abfragen musst bzw. wie viel Rechenzeit deine Funktionen 
zwischen den Abfragen verbrauchen dürfen. Wenn die Rechenzeit in den 
Funktionen länger ist, musst du die in kürzere Routinen umschreiben.

Und weil es jetzt schon vier Signale sind, würde ich mir die Infos zu 
Statemachine ansehen. Das kann helfen wenn man keinen schwer zu 
pflegenden Spagetticode haben möchte.

Der Optokoppler hilft beim Thema Entprellung nicht. Wenn das 0..24V 
Signal vor dem Optokoppler prellt, wird auch das Signal hinter dem 
Optokoppler prellen.

von Sascha (Gast)


Lesenswert?

Ne das Signal prellt nicht das wir mir von eriner SPS übergeben.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.