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
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.
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
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 ...
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.
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????
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 ...
sollte man nicht erst mal diesen kampf ausgang vs ausgang beenden???
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?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.