www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Port auf HIGH oder LOW?


Autor: Lokus Pokus (derschatten)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Irgendwo hab ich hier einen dreher drinn.
Komm aber nicht drauf:
#define OUT_DDR         DDRC
#define OUT_PORT        PORTC
#define OUT1            0
#define OUT2            1
#define OUT3            2
#define OUT4            3
#define OUT5            4
#define OUT6            5
#define ALL_OUT        (1<<OUT1 | 1<<OUT2 | 1<<OUT3 | 1<<OUT4 | 1<<OUT5 | 1<<OUT6)

  OUT_DDR = ALL_OUT;                    // Controller als Ausgang definieren
  OUT_PORT |= ALL_OUT;                    // Controller auf LOW setzen

Damit bekomme ich am Ausgang ein HIGH.
Möchte aber ein LOW.
Wo ist der Fehler?

Autor: g457 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Manfred W. schrieb:
> OUT_PORT |= ALL_OUT;                    // Controller auf LOW setzen
                                                            ^ 
s/LOW/HIGH/

für low:
OUT_PORT &= ~(ALL_OUT);

Autor: Ganymed (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du schreibst doch Einsen in den Port.
Dann bekommst Du die auch.

Autor: Lokus Pokus (derschatten)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
OK, aber mit |= dreh ich sie doch um oder?

Autor: Justus Skorps (jussa)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Manfred W. schrieb:
> OK, aber mit |= dreh ich sie doch um oder?

öh nein. Lies dir erstmal den Artikel über Bit-Manipulationen auf der 
Seite hier durch...

Autor: Lokus Pokus (derschatten)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dann hab ich hier auch noch ein Problem:
#define KEY_DDR         DDRB
#define KEY_PORT        PORTB
#define KEY_PIN         PINB
#define KEY0            7
#define KEY1            6
#define KEY2            0
#define KEY3            1
#define KEY4            2
#define KEY5            3
#define KEY6            4
#define KEY7            5
#define ALL_KEYS        (1<<KEY0 | 1<<KEY1 | 1<<KEY2 | 1<<KEY3 | 1<<KEY4 | 1<<KEY5 | 1<<KEY6 | 1<<KEY7)

  KEY_DDR &= ~ALL_KEYS;                  // Tasten als Eingang definieren
  KEY_PORT &= ~ALL_KEYS;                  // Tastenports auf LOW setzen

int main(void)
{
  while(1)
  {
    Summe = 0;

  if(KEY_PIN & 0x01)
    Summe |= 0x01
OUT_PORT = Summe

....
}
Warum bringt mir das beim Einschalten des AVR sofort am PORTC ein HIGH?
Hier wird ein Tastendruck registriert, aber warum?

Also das ganze soll so funktionieren:

Der Eingang soll eigentlich im ruhezustand auf HIGH liegen und mit einem 
Tastendruck auf LOW gelegt werden.

Ist das der Fall soll der Ausgang auf HIGH geschalten werden.

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

Bewertung
0 lesenswert
nicht lesenswert
Manfred W. schrieb:
> Dann hab ich hier auch noch ein Problem:

Manfred
Denkst du nicht, dass es schöm langsam Zeit wird, die Sache vernünftig 
anzugehen?
Das bedeutet: C-Buch rauskramen und die Grundlagen von C lernen. Das 
bedeutet: Tutorial auf dieser Seite rauskramen und diese Grundlagen auf 
die Programmierung von AVR-µC anwenden lernen.

Nicht immer nur die 2 Sätze lesen, auf die du hier mit der Nase 
gestossen wirst, sondern Artikel vollständig durchlesen. Hat man sie 
gelesen, dann noch einmal von vorne zu lesen anfangen und über das 
Gelesene nachdenken. Kleine Übungen machen.Wenn sie nicht so 
funktionieren wie erwartet, dann den Artikel nocheinmal lesen und dabei 
nach Aussagen und Hinweisen zum konkreten Problem durchsuchen.

Ein oder zweimal hilft man ohnehin gerne. Kein Problem. Wenn man aber 
sieht, dass du immer wieder bei den absoluten Grundlagen strauchelst 
weil du nur über Viertelwissen verfügst, dann ist das für die Helfer 
ziemlich frustrierend und irgendwann geben sie auf.

Das avr-gcc-tutorial wurde genau aus dem Grund geschrieben um nicht 
jeden Tag wieder jemandem die absoluten Grundlagen vorbeten zu müssen. 
Also nutze es.
Genau so wie die Artikelsammlung. Auch dort findet sich vieles, wie zb 
http://www.mikrocontroller.net/articles/Bitmanipulation
Zugegeben: die Artikel sind schwerer zu finden. Auf der anderen Seite 
wird auf speziell diesen Artikel jeden Tag mindestens 5 mal verwiesen. 
Es könnte daher auch lohnen einfach mal andere Einträge im Forum zu 
lesen. Da kannst nur dabei lernen.

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.