Forum: Mikrocontroller und Digitale Elektronik Frage abfrage ob ausgang geschaltet


von Herbert,K (Gast)


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

von Michael M. (Gast)


Lesenswert?

C0 setzt du als ausgang...

von Karl H. (kbuchegg)


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.

von Herbert,K (Gast)


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

von Michael M. (Gast)


Lesenswert?

Michael M. schrieb:
> C0 setzt du als ausgang...

von Herbert,K (Gast)


Lesenswert?

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

von Michael M. (Gast)


Lesenswert?


von Spezi (Gast)


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 ...

von Michael M. (Gast)


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.

von Herbert,K (Gast)


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????

von Michael M. (Gast)


Lesenswert?


von Spezi (Gast)


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 ...

von Michael M. (Gast)


Lesenswert?

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

von Spezi (Gast)


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?

von Herbert,K (Gast)


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.

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.