www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik physikalischen Zustand der Ausgänge lesen


Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich hätte eine kurze Frage zur Pinabfrage.

Benutze AVR studio.

Ich möchte einen PIN setzten und danach erst im Programm weiter gehen,
wenn er wirklich physikalisch gesetzt. Welches Register muss ich dazu
auslesen?
geht das überhaupt?


Danke, Alex

Autor: Gabriel Wegscheider (gagosoft)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wie meinst Du das?
wenn Du einen Port mit einem Muster beschreibst ist der Ausgang 
spätestens in nächsten ClkCycle so wie Du ihn beschrieben hast (und 
davor kannst Du auch nicht im Programm weitergehen.

Oder meinst Du dass auf diesen Pin mehrere Ausgänge schreiben?

Autor: Sven P. (haku) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Brauchste garnich warten. Les doch einfach nach, wie das Timing des AVR 
ist.

Wenn du z.B. "sbi" machst, dauert diese Instruktion genau einen 
Prozessortakt. Und dann ist der Pin auch definitiv gesetzt...es sei 
denn, du hängst da riesige Kapazitäten dran...

Nochwas: PORTx und PINx-Register sind unabhängig. Wenn du einen Pin aus 
Ausgang einstellst (DDRx = 1), dann den Pin auf "High" ziehst (PORTx = 
1), und diesen Pin dann von außen auf "Low" zwingst (z.B. Kurzschluss 
nach Masse), dann ist PINx auch 0. Evtl. hastu das ja gemeint.

Autor: Bruno (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du mußt den Pin als Einganf setzen (DDRx) und dann zb in einer 
While-Schleife den Port bzw Pin abfragen. Wenn die Bedingung erfüllt 
ist, springst du aus der Schleife.

Autor: Sven P. (haku) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bruno wrote:
> Du mußt den Pin als Einganf setzen (DDRx) und dann zb in einer
> While-Schleife den Port bzw Pin abfragen. Wenn die Bedingung erfüllt
> ist, springst du aus der Schleife.

Er will doch einen Pin setzen, also muss er wohl als Ausgang 
konfiguriert werden.

Ab wie Gabriel und ich schon sagten, das is Käse, weils ein genau 
definiertes Timing gibt.

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich möchte ein Pin kurz high low togglen. vom 8051 kenn ich noch das 
problem, das wenn man das port schreibt und sofort "weiterrennt" im 
Programm, dass man schon zwei zeilen weiter ist im Code, der Pin aber 
noch gar nicht tatsächlich highpedel hat.
also

PORTC = 0x01;
PORTC = 0x00;

würde nicht wirkich was bewirken, weil bei der zweiten komandozeile der 
PIn noch gar nicht auf High ist. Ist das beim Atmel auch so oder würde 
das so funktionieren nund eine Impuls am Ausgang erzeugen?

Alex

Autor: Alexander Schmidt (esko) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, das würde funktionieren.
Auf diese Weise kannst du also bis die Hälfte des Prozessortakts am 
Ausgang herausführen.

Autor: Bruno (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habe es erst vertanden als ich auf absenden gedrückt habe.
Aber dein Problem hatte ich mit nem 8515 auch schon. Habe dazwischen ne 
kleine Schleife laufen lassen

Autor: Gabriel Wegscheider (gagosoft)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich denke der GCC optimiert das nicht weg, da es in sfr_defs.h als 
volatile gekennzeichnet ist und meines wissen nach alle volatile aufrufe 
vorm wegoptimieren bewahrt werden.
Bitte verbessert mich, wenn ich hier daneben liege.

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
genau das möchte ich auch mach, nur weiß ich nicht, wei ich den 
tatsächlich status des pins rausbekomme

Autor: Gabriel Wegscheider (gagosoft)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
und ein wichtiger Unterschied zwischen AVR und 8051 ist der, das der AVR 
die meisten Operationn in einen Takt abhandel, was beim 8051 nun 
wirklcih nicht der Fall ist

Autor: Gabriel Wegscheider (gagosoft)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
ok der tatsächliche Status ist (auch bei Ausgängen) am jeweiligen PIN 
abzufragen.

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
das mit den Takten wusste ich nicht, so fit bin ich noch nicht. Dann 
probier ich das mal mit Pin, Danke.

Autor: Gabriel Wegscheider (gagosoft)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
probiers doch einfach mal mit PORT und lass das mit dem Abfragen erst 
mal sein....
Du kannst ja auch eine andere Operation zwischen auf & abdrehen setzen, 
so quasi eine Angstoperation dann kann GCC die PORTx = Befhle nicht 
killen.

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich muss auf jeden fall warten zwischen EIN und AUS, weil sonst der Puls 
zu kurz wird. hab eben mal mit Oszi angeguckt. vielleicht einfach ein 
paar NOPs?

Autor: yalu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn der Puls nur um wenige Taktzyklen gedehnt werden soll, sind NOPs
sicher die beste Lösung. Die möglich Zeitauflösung ist hier 1 Takt-
zyklus, der Speicherplatzbedarf soviele Worte, wie NOPs eingefügt
werden.

Wenn's mehr sein soll, kannst du auch _delay_us aus der AVR-Libc
verwenden. Damit lassen sich Verzögerungen ab 3 Taktzyklen
realisieren. Die Zeitauflösung beträgt (bei Verzögerungen von bis zu
768 Zyklen) 3 Taktzyklen, der Speicherplatzbedarf unahbhängig von der
Verzägerungszeit 3 Worte.

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank an alle Ratgeber

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.