AVR-Input Problem

OP #2767524
Lesenswert?

Also ich habe ein Problem mit den Inpu eines AVRs. Erstemal der 
Quelltext:
1
/*
2
 * main.c
3
 *
4
 *  Created on: 24.07.2012
5
 *      Author: Peter
6
 */
7

8
#include <avr/io.h>
9
#include <avr/iom1281.h>
10

11
int main (void){
12

13
  DDRB |= (1 << DDB0);
14
  DDRB &= ~(1 << DDB2);
15

16
  while (1){
17

18
    if (PINB & (1<<PINB2)){
19
      PORTB |= (1 << PB0);
20
    }
21

22
  }
23

24
}
Wenn ich jetzt an PinB2 ein Kabel anschließe, geht die LED an PortB0 
schon an. an diesen Kabel ist nichts. Ich habe uahc schon probiert, 
alles statisch zu entladen - hat auch nichts gebracht.

Ich hoffe ihr könnt mir helfen
#2767527
Lesenswert?

Peter K. schrieb:

> Wenn ich jetzt an PinB2 ein Kabel anschließe, geht die LED an PortB0
> schon an. an diesen Kabel ist nichts.

Und genau das ist das Problem.
Dein Kabel wirkt wie eine Antenne und fängt sich jedes kleinste 
elektrische Feld in der Umgebung ein.

Man lässt einen Eingang NIEMALS einfach offen in der Luft hängen.
Genau aus dem Grund gibt es Pullup-Widerstände. Damit ein Anschluss auch 
dann ein gesichertes Potential hat, wenn sonst weiter nichts am Eingang 
angeschlossen ist.
1
int main (void){
2

3
  DDRB |= (1 << DDB0);
4
  DDRB &= ~(1 << DDB2);
5

6
  PORTB |= ( 1 << PB2 );    // Pullup Widerstand einschalten
7
                            // jetzt liegt der Eingang gesichert auf 1
8

9
  while (1){
10

11
    if (!( PINB & (1<<PINB2) )){    // daher muss hier die Bedingung
12
                                    // umgedreht werden.
13
                                    // Mit dem Kabel eine Masserverbindung
14
                                    // herstellen führt jetzt zum SChalten
15
      PORTB |= (1 << PB0);
16
    }
17

18
  }
19

20
}
OP #2767535
Lesenswert?

Das heißt den Quelltext so erweitern??
1
/*
2
 * main.c
3
 *
4
 *  Created on: 24.07.2012
5
 *      Author: Peter
6
 */
7

8
#include <avr/io.h>
9
#include <avr/iom1281.h>
10

11
int main (void){
12

13
  DDRB |= (1 << DDB0);
14
  DDRB &= ~(1 << DDB2);
15
PORTB |= (1 << PB2); //Kann gerade keinen Tab machen
16

17

18
  while (1){
19

20
    if (PINB & (1<<PINB2)){
21
      PORTB |= (1 << PB0);
22
    }
23

24
  }
25

26
}
OP #2767548
Lesenswert?

SUPER, jetzt funktionierts, ich war schon mal bei den PullUps, ich habe 
aber vergessen die If-Bedingung umzudrehen.

Das mit dem
1
#include <avr/iom1281.h>
habe ich nur gemacht weil ich vorher PORTF verwendet habe und es den 
normal nicht erkennt.

Danke an alle die hier was geschrieben haben.

EDIT:
Kann oder muss man den Thread hier irgendwie schließen??

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