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


von Just Me (Gast)


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:
1
#include <avr/io.h>
2
3
int main (void) {
4
5
  DDRA  = 0x00; //Port A als Eingang
6
  DDRB  = 0xFF; //Port B als Ausgang
7
  
8
  PORTB = 0x00; //Alle LEDs aus
9
10
  while(1){
11
  
12
  }//Endlos while
13
14
  return 0;
15
16
}//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.

von Huch (Gast)


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.

von Just Me (Gast)


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.

von Klaus W. (mfgkw)


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.

von Hc Z. (mizch)


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

von Klaus W. (mfgkw)


Angehängte Dateien:

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.

von Peter D. (peda)


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:
1
#define TASTE_AN 0
2
#define TASTE_AUS (!TASTE_AN)
3
4
#define LED_AN 0
5
#define LED_AUS (!LED_AN)


Peter

von Just Me (Gast)


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 :)

von Hinkrieger (Gast)


Lesenswert?

Wirste scho hinkriegen.

von Huch (Gast)


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

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.