Hallo,
Ich habe eine einfache Iff Input, dann Output (LED) programiert.
Allerdings macht der Mikrocontroller genau das umgekehrte von dem was
ich will. Ich möchte, wenn Input low, dann schalte Led ein wenn input
high dann Led aus; er machts jedoch genau umgekehrt. Button habe ich
keinen ich halte einfach Masse und Input zusammen oder nicht. controler
ist ein Atmega8a. Hier das Programm::
1
intmain(void)
2
{
3
DDRB=0b00000000;//Input Pint
4
DDRD=0b00000010;//Output Pin
5
PORTB=0b00000100;//Input Pint
6
7
while(1){
8
9
if(bit_is_clear(PINB,2)){
10
PORTD=0b00000010;}// Das müsste doch eig true seien wenn low
Hi,
um leichter zu antworten wäre es nett, wenn du deinen Code in einen
Code-block hängst.
Dann natürlich welche Sprache du Programmierst.
Und Schaltplan + Aufbau anhängen. Sonst glüht jetzt schon wider meine
Glaskugel, die Kristalene ist gerade noch in der Wartung (das war das
Modell das noch alle 100h zur Inspektion muss)
Ich glaub die LED geht von VCC zum µC über den Vorwiderstand statt wie
im Code angedeutet µC LED R ->GND.
MfG
ich
stevomaniac schrieb:> ich will. Ich möchte, wenn Input low, dann schalte Led ein
Die Frage ist: Was musst du am Ausgabepin ausgeben, damit die LED
leuchtet?
In den meisten Fällen verschaltet man (historisch bedingt) die LED so,
dass sie leuchtet, wenn man die Ausgabeleitung auf 0 schaltet. D.h. die
LED brennt NICHT, wenn der Pin auf 1 geschaltet wird.
Hallo, danke für die Antwort, ich habe leider kein Prog zum Schaltplan
erstellen und weiß nicht was du mit Code block meinst (bin Neuling).
Ich programmiere in C mit Atmel Studio .
Ich habe InPut PinB2 an Masse, also Pin als+;
Beid er LED folgendes: Output Pint D1 (+) Widerstand, Led Masse.
Ich dachte man müssen die Pins an Masse hängen, also Pins = +?
Die Led leuchtet wenn PinB2 an Masse hängt (also high ist) und geht aus
wenn Pin2 von Masse getrennt wird (low ist). Aber eigentlich will ich es
umgekehrt. bit_is_clear (PINB , 2) gibt doch true zurück wenn keine
Spannung am Pin alniegt oder?
danke
mfg
stevomaniac schrieb:> Hallo, danke für die Antwort, ich habe leider kein Prog zum Schaltplan> erstellen
Ich hatte schon Stift,Papier und einen Scanner bzw. Digitalkammera bevor
ich überhaupt wusste was ein µC ist...
> und weiß nicht was du mit Code block meinst (bin Neuling).
stevomaniac schrieb:> Die Led leuchtet wenn PinB2 an Masse hängt (also high ist) und geht aus> wenn Pin2 von Masse getrennt wird (low ist).
Genau umgekehrt.
Draht an Pin: Masse = 0V = GND = LOW
Kein Draht an Pin: HIGH
Dafür hast du den Pullup an PB2 gesetzt:
1
PORTB=0b00000100;//Input Pint
Damit wird Vcc intern über einen Widerstand an den Pin gelegt und du
hast 2 eindeutige Zustände, die du nur noch richtig auswerten musst.
Deine Auswertung bisher ist genau falsch rum.
mfg.
Es ist prinzipiell egal, ob die Reihenfolge
(1) Vcc(+) - Widerstand - LED - Output
oder
(2) Output - Widerstand - LED - GND(0) ist.
Traditionell wird oft die erste Möglichkeit gewählt.
Der einzige Unterschied ist:
(1) LED leuchtet bei Ausgabe von 0 (low)
(2) LED leuchtet bei Ausgabe von 1 (high)
Zum "richtigen" Arbeiten müsstest Du ins Schaltbild schauen - Du also
wissen was Du tust
oder die
Geht-so-besser-methode anwenden.
Hallo, danke
hab ich richtig verstanden?:
mit Pin 1, bzw Pin 0 setze ich den Pin entweder auf + Phase oder -
Masse?
dachte bisher 1 bedeuted es fließt strom, 0 es fließt keiner lol .
mfg
stevomaniac schrieb:> Hallo, danke> hab ich richtig verstanden?:> mit Pin 1, bzw Pin 0 setze ich den Pin entweder auf + Phase oder -> Masse?
Das kommt drauf an, ob der Pin Ausgang oder Eingang ist.
Beim Ausgang trifft das zu.
Beim Eingang wird mit 1 der Pullup eingeschaltet. Mit 0 liegt gar nichts
am Pin. Das ist aber ein undefinierter Zustand, bei dem meistens das
passiert, was man nicht erwartet. In diesem Fall muss der Pin von aussen
beschaltet sein. Z.B. durch ein IC, das mit seinem Ausgang auf den Pin
geht.
> dachte bisher 1 bedeuted es fließt strom, 0 es fließt keiner lol .
Strom fliesst nur, wenn etwas angeschlossen ist. Z.B eine LED. Dabei
kommt es aber darauf an, ob die andere Seite der LED an Vcc oder GND
hängt.
mfg.
stevomaniac schrieb:> Hallo, danke> hab ich richtig verstanden?:> mit Pin 1, bzw Pin 0 setze ich den Pin entweder auf + Phase oder -> Masse?>> dachte bisher 1 bedeuted es fließt strom, 0 es fließt keiner lol .
Ob Strom fliesst oder nicht, hängt ganz wesentlich davon ab, wie die
Aussenbeschaltung ist.
Einen Pin auf 1 (oder 0 zu setzen) bedeutet erst mal nicht mehr oder
weniger, als ihm ein Potential zuzuordnen und damit das 'eine Ende der
Aussenbeschaltung' einem Potential zuzuordnen. Ob dann Strom fliesst
hänge davon ab, wie das andere Ende der Aussenbeschaltung an die
Spannungen angeschlossen ist. Strom fliesst immer nur von einem höheren
Potential zu einem niedrigerem Potential.
Hast du deine Aussenbeschaltung so
1
+5V -------------------------------- +5V
2
3
4
5
Pin -----------+
6
|
7
---
8
\ / LED
9
---
10
|
11
+-+
12
| | Widerstand
13
+-+
14
|
15
GND ---------+-------- GND
dann muss man den Pin auf 1 setzen (also auf +5V), damit ein Strom vom
Pin durch die LED nach GND (also 0V) fliessen kann.
Hast du deine Aussenbeschaltung so
1
+5V ----------+---------- +5V
2
|
3
+-+
4
| | Widerstand
5
+-+
6
|
7
---
8
\ / LED
9
---
10
|
11
Pin -----------+
12
13
14
15
16
GND ------------------------- GND
dann muss man den Pin auf 0 (also 0V) setzen, damit der Strom von +5V
aus durch die LED in den Pin hinein fliessen kann.
Beide Beschaltungen sind möglich.
Und du solltest Anfangen zwischen Spannung und Strom zu unterscheiden.
Spannung, das ist die Höhendifferenz der beiden Enden eines
Gartenschlauches. Strom, das ist die Wassermenge, die dann durch diesen
Schlauch (in die eine oder andere Richtung) rinnt. Ohne Höhendifferenz
(Spannung) kommt es auch zu keinem Wassertransport (Stromfluss).
Wenn du einen (Output-) Pin auf 1 oder 0 setzt, denn hebst oder senkst
du nur dieses Ende des Schlauches. Ob und in welche Richtung das Wasser
dann tatsächlich rinnt, hängt davon ab, auf welcher Höhe das andere Ende
des Schlauches ist.