Frage zu Bitsetzung an den Ports

Gast #1917669
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.
Gast #1917673
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.
Gast #1917694
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.
#1917753
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
Gast #1917772
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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren