www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik 4 Bit auf einem "halben" Port eines AVRs ausgeben?


Autor: Rainer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hi

Ich hab grad ein Durchhänger :-( Ich will jeweils vier Bits eines 
Atmega16-Ports getrennt verwenden.  Bitweises setzen funktioniert schon.

Aber jetzt will eine Binärzahl ( 0 .. 16 ) auf den vier höherwertigen 
Bits ausgeben ohne das die vier niederwertigen Bits beeinflusst werden.

wie geht das?

Rainer

Autor: Franz-Rainer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
In welcher Programmiersprache?

Autor: Rainer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hi

ich benutze ein STK500 und verwenden den GNU-C-Compiler

Rainer

Autor: Johannes S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
in C würds i etwa so gehen ohne es hetzt probiert zu haben:

port x = (variable << 4) | (pin x & 0x0F)

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn die Zustände der 4 restlichen Pins nicht verändert werden sollen, 
dann
PORTx = (var << 4) | (PORTx & 0x0F);

Und bitte hinten nicht PINx sondern PORTx nehmen. Sonst kann es zu 
unerwünschten Nebeneffekten kommen...

Autor: Johannes S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Und bitte hinten nicht PINx sondern PORTx nehmen
Aber Pin ist doch immer gleich demn Port wenn die DDR auf Ausgang gesetz 
ist.
Ist dies nicht der Fall, macht das schreiben auf den Port doch ohnehin 
keinen Sinn (abgesehen von der aktivierung der Pull Ups, aber das ist 
hier nicht der Fall)

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Johannes S.:
Rainer schreibt explizit, dass die 4 LSB nicht beeinflusst werden 
sollen, aber kein Wort darüber, ob die als Ein- oder Ausgänge 
konfiguriert sind. Und wenn sie als Eingänge konfiguriert sind, dann 
kann die Variante mit PINx tödlich sein (zumindest funktionell). Ich 
weiß nicht, wo Du die Weisheit herhast, die in Deinem letzten Satz 
steht...

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Aber Pin ist doch immer gleich demn Port wenn die DDR auf Ausgang gesetz
> ist.

Ne ist es nicht. Beispiel: Der Port ist Ausgang und logisch eins, aber 
nach Masse kurzgeschlossen. PIN liefert Null, aber PORT liefert Eins.

Klar ist Kurzschluss nicht erlaubt, aber es kann sich ja auch um 
transiente Vorgänge handeln wie kapazitive Last.

Autor: Johannes S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Ich weiß nicht, wo Du die Weisheit herhast, die in Deinem letzten Satz
> steht...

Solche Weisheiten stammen, wie die meisten meiner Weisheiten, aus dem 
Datenblatt. 
(http://www.atmel.com/dyn/resources/prod_documents/... Seite 66 
ist das Symbolschaltbild des Ports und auch der PullUp zu sehen)

Autor: Johannes S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Ne ist es nicht. Beispiel: Der Port ist Ausgang und logisch eins, aber
>nach Masse kurzgeschlossen. PIN liefert Null, aber PORT liefert Eins.

Stimmt, an das habe ich nicht gedachte. Danke für die Info!

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Johannes S.:
Mit der "Weisheit" meinte ich eigentlich die Aussage, dass das mit der 
Aktivierung der Pull-Ups hier nicht der Fall sei...

PINx ist nur dann zu benutzen, wenn man tatsächlich von außen 
vorgegebene Zustände einlesen will. Zum Ausmaskieren von Pins beim 
Schreibzugriff immer PORTx lesen, sonst gehts aus o.g. Gründen schief.

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.