www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Frage abfrage ob ausgang geschaltet


Autor: Herbert,K (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,


Ich habe folgendes Problem.

Ich will die Ports C0-4 beim 128iger abfragen ob diese High oder Low 
sind.

DDRC|=(1<<PC0)|(1<<PC1)|(1<<PC2)|(1<<PC3);
PORTC&=~(1<<PC0)|(1<<PC1)|(1<<PC2)|(1<<PC3);

Portc 0-3 ausgang
Portc 0-3 low


wie kann ich abfragen

habe es mit if(PINC &(1<<PINC0))status=0;//LOW

geht aber nicht es ist immer 0 auch wenn ich Portc C0 auf high ziehe und 
die lED ANGEHT.


Mach ich da was falsch???

Danke

Autor: Michael M. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
C0 setzt du als ausgang...

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Herbert,K schrieb:

> Ich will die Ports C0-4 beim 128iger abfragen ob diese High oder Low
> sind.
>
> DDRC|=(1<<PC0)|(1<<PC1)|(1<<PC2)|(1<<PC3);
> PORTC&=~(1<<PC0)|(1<<PC1)|(1<<PC2)|(1<<PC3);
>
> Portc 0-3 ausgang
> Portc 0-3 low
>
>
> wie kann ich abfragen
>
> habe es mit if(PINC &(1<<PINC0))status=0;//LOW
>

In diesem Fall müsstest du nicht den PIN abfragen, sondern tatsächlich 
den PORT

Aber eigentlich ist das nicht notwendig. Denn wenn du den Port auf High 
ziehst und kein elektischer Kurzschluss vorliegt, dann ist der auch 
High. D.h. dein Programm 'weiß' an dieser Stelle, dass die Portpins High 
sind, sein müssen. Ganz einfach deswegen, weil es selbst die Pins auf 
High gezogen hat.

Autor: Herbert,K (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo

ich will den staus über i2c an den master senden.

status[3]=PORTC & (1<<PORTC3);
status[2]=PORTC & (1<<PORTC2);
status[1]=PORTC & (1<<PORTC0);
status[0]=PORTC & (1<<PORTC1);

klappt aber auch nicht.

status ändert sich nicht

Autor: Michael M. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Michael M. schrieb:
> C0 setzt du als ausgang...

Autor: Herbert,K (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Warum nicht PC0 ist doch laut Datenbaltt ein normaler I/O

Autor: Michael M. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Spezi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

das Auslesen der PIN-Register ist immer möglich, unabhängig von der 
Konfiguration des Pins. Der Inhalt des PIN-Register-Bits gibt den 
TATSÄCHLICHEN Zustand des Pins wieder. Sollte der Pin als Ausgang z.B. 
einen Kurzschluss nach Masse oder Plus haben, kann man dies auf diese 
Weise feststellen (Ausgabewert und tatsächlicher Zustand nicht gleich).

Siehe dazu das Datenblatt des Mega128:
"Independent of the DDR bit, the port pin can be read through the PIN 
register bit."

Lies mal das PIN-Register direkt ein und gib es zur Kontrolle aus. 
Sollte der Inhalt korrekt sein, dann stimmt mit der Software (Abfrage) 
was nicht ...

Autor: Michael M. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
alles richtig.
vermutung dazu: keine schleife, sondern nur einmalige abfrage.

aber das sollten wir erst klären, nachdem festgehalten wurde, dass obige 
software sinnfrei ist.

Autor: Herbert,K (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Also das klappt immer noch nicht.

An der I2C übertragung liegts nicht habe mal direkt werte vergeben
status[3]=0;
status[2]=1;
status[1]=0;
status[0]=0;

am Master bekomme ich die auch.
0100


status[3]=1;
status[2]=1;
status[1]=0;
status[0]=1;

1101 am master.

nur die abfrage der port status klappt nicht kommt denn überhaupt da ne 
1 oder 0????

Autor: Michael M. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Spezi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die I2C-Übertragung interessiert hier zunächst nicht; ich bat darum, 
direkt das PIN-Register einzulesen und zu kontrollieren (OHNE jegliche 
Vergleiche o.ä.). Wie sieht dieser Wert aus? Ist er korrekt?
Wenn es einfacher ist, kannst Du den Wert auch per I2C ausgeben ( 
status[...] = PINC ).

Ausserdem sind die geposteten Codefetzen nicht wirklich brauchbar; ein 
kompletter Code wäre da weitaus informativer ...

Autor: Michael M. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
sollte man nicht erst mal diesen kampf ausgang vs ausgang beenden???

Autor: Spezi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Michael M. schrieb:

> sollte man nicht erst mal diesen kampf ausgang vs ausgang beenden???

Wie meinen?? Ich sehe da keine 2 Ausgänge ...

Wenn ich 'Herbert,K' richtig verstanden habe, gibt er an den Portpins 
C0-C3 Zustände aus und will diese dann wieder zurücklesen und via I2C an 
ein anderes System übertragen. Das ist ja eigentlich kein Problem ...

Oder habe ich da etwas falsch aufgefasst?

Autor: Herbert,K (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Also folgendes geht

Wenn ich am Slave den PINC abfrage


Status=PINC;

bekomme ich dezimal entweder 15 Port 0-3 ON
Status=15 Port 0-3 ON
Status=8 PORT 3 ON

Usw.

Das geht erstmal ganz gut.

Muß jetzt nur noch umrechnen um Dann die gestzten bits zu bekommen

Danke sollte aber denk ich so gehen.

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.