mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Frage zu Bitsetzung an den Ports


Autor: Just Me (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi!

Ich bin blutiger Anfänger was µC Programmierung angeht und ich weiß 
nicht so recht was ich in der Suche bezüglich meines Problems eingeben 
muss von daher habe ich einen neuen Thread eröffnet.

Ich nutze ein Atmel STK500 Entwicklungskit zusammen mit einem ATmega16. 
Ich wollte mit einfachen Dingen anfangen wie z.B. LEDs zum leuchte zu 
bringen und da habe ich schon das erste Problem was ich nicht verstehe.

Und zwar habe ich folgen C Code im AVR Studio 4 geschrieben:
#include <avr/io.h>

int main (void) {

  DDRA  = 0x00; //Port A als Eingang
  DDRB  = 0xFF; //Port B als Ausgang
  
  PORTB = 0x00; //Alle LEDs aus

  while(1){
  
  }//Endlos while

  return 0;

}//main

Wie der Kommentar bei PORTB = 0x00; schon sagt habe ich für mein 
Verständnis die Ausgänge am Port B alle auf 0 gesetzt also low und somit 
sollten alle LEDs aus sein. Aber genau das Gegenteil ist der Fall alle 
LEDs sind an. Habe ich es falsch verstanden und eine 0 bedeutet eine 1 
am Ausgang? Irgendwie verwirrend denn ich erwarte ein ganz anderen 
Verhalten.
PORTB = 0x03; sollte z.B. die LED1 (am Pin PB0) und LED2 (am Pin 
PB1)leuchte lassen aber auch hier ist es umgekehrt.

Kann mir jemand vielleicht auf die Sprünge helfen?

Vielen Dank schon mal.

Autor: Huch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Habe ich es falsch verstanden und eine 0 bedeutet eine 1
am Ausgang?

Das kommt darauf an, was Du gelesen hast. In der Dokumentation vom 
STK500 ist eindeutig zu lesen, das eine 0 am Ausgang die LED zum 
leuchten bringt.

Autor: Just Me (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für die schnelle Antwort.

Also mein Englisch ist nicht so besonders aber so offensichtlich war das 
für mich nicht im Handbuch. Ich habe die entsprechende stelle im 
Handbuch nochmal nachgelesen aber wirklich verstanden habe ich dieses 
Verhalten, sprich LED ein bei Ausgang 0, immer noch nicht. Aber wenn du 
sagst das muss so sein ok. Verwirrt mich aber jetzt total da es immer 
genau entgegengesetzt ist als man denken würde. Dann werden die Taster 
sicher auch genau entgegengesetzt arbeiten.

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Just Me schrieb:
> Dann werden die Taster
> sicher auch genau entgegengesetzt arbeiten.

kann, aber muß doch nicht.
Ein Blick in den Schaltplan hilft immer.

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Just Me schrieb:
> Dann werden die Taster
> sicher auch genau entgegengesetzt arbeiten.

So ist es.  Wegen der internen Pullups, die für Schalter und Taster 
gerne verwendet werden, ist das auch häufiger üblich so (und nicht nur 
beim STK500).

Autor: Klaus Wachtler (mfgkw)
Datum:
Angehängte Dateien:
  • preview image for a.png
    a.png
    8,24 KB, 86 Downloads

Bewertung
0 lesenswert
nicht lesenswert
Just Me schrieb:
> aber wirklich verstanden habe ich dieses
> Verhalten, sprich LED ein bei Ausgang 0, immer noch nicht.

In der linken Schaltung (Bild!) leuchtet die LED, wenn
am Port (hier PA0) Spannung anliegt. Bei 0V ist die LED aus.

Rechts dagegen ist es genau umgekehrt.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Daß die Tasten und LEDs low aktiv sind, hat auch praktische Ursachen:

Bei den Tasten spart man sich so nen extra Widerstand als Pulldown und 
nimmt einfach die internen Pullups des AVR.

Bei den LED im STK hat man so immer die gleiche Helligkeit unabhängig 
von VCC. Die AVRs kann man ja mit 1,8V .. 5,5V betreiben.

Für die Programmierung ist es ja schnurz egal, ob man nun eine 1 ode 0 
als aktiv definiert. Man muß es nur einmal für sich festlegen:
#define TASTE_AN 0
#define TASTE_AUS (!TASTE_AN)

#define LED_AN 0
#define LED_AUS (!LED_AN)


Peter

Autor: Just Me (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Klaus Wachtler

Vielen Dank durch das Bild ist der Groschen nun gefallen.

Muss ich mich aber dennoch erstmal daran gewöhnen das macht das 
Programmieren schon mal nicht einfacher :)

Autor: Hinkrieger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wirste scho hinkriegen.

Autor: Huch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Also mein Englisch ist nicht so besonders aber so offensichtlich war das
für mich nicht im Handbuch.

Das ist jetzt nicht wirklich ernstgemeint und ein wenig gemein, aber:
Als Du den englischen Text gelesen und nicht verstanden hast, hast Du 
Dir da gedacht: >> Dann ignoriere ich halt das Schaltbild?<<

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.