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

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.