Ausgang ist zu lange geschaltet

OP #3227103
Lesenswert?

Hallo,
ich habe folgendes Problem: wenn ich bei meinen Mikrocontroller 
ATTINY2313 den Eingang PA0 auf high schalte geht der Ausgang PB7 auf 
high. Setze ich den Eingang PA0 auf Low, bleibt der Ausgang PB7 auf 
high, für eine unbestimmte Zeit.
Das Programm sieht wie folgt auf:
1
  DDRA = 0x00; // PortA als Eingang deklarieren
2
  PORTA=0x00; //Ports auf LOW schalten
3
  DDRB = 0xff; // PortB als Ausgang deklarieren
4
  PORTB = 0x00; // Ports auf LOW schalten
5

6

7
  while(1) {
8
  if (PINA == 0b00000001) {
9
    PORTB = 0b10000000;
10
        }
11
  else {
12
    PORTB = 0b00000000;
13
  }

Hat jemand von euch eine Idee voran es liegen könnte??
Viele Grüße
#3227139
Lesenswert?

> bei meinen Mikrocontroller ATTINY2313 den Eingang PA0 auf high schalte

Wie genau machst du das?
Was hast du an den Pin extern angeschlossen.


Es ist ein Irrtum zu glauben, dass ein Pin der auf Eingang geschaltet 
ist und an dem nichts hängt, (der also 'offen' ist), utomatisch einen 
0-Pegel einnimmt. Das ist in den seltensten Fällen der Fall. 
Eingangspins müssen immer mit einem Pegel beaufschlagt werden um 
reproduzierbare Ergebnisse zu bekommen. Genau aus dem Grund verschaltet 
man bei einem AVR die Schalter/Taster so, dass sie in Richtung GND 
schliessen und schaltet den internen Pullup Widerstand zu. Denn dann hat 
der Pin immer einen definierten Pegel. Ist der Schalter offen, dann 
zieht der Pullup Widerstand den Pin auf Vcc und damit auf 1. Ist der 
SChalter geschlossen, dann zieht der Schalter (weil er gegenüber dem 
Pullup den viel geringeren Widerstand repräsentiert) den Pin auf 0.


AVR-Tutorial
AVR-GCC-Tutorial
#3228179
Lesenswert?

eProfi schrieb:
> if (PINA == 0b00000001) {
> --->
>   if (PINA & 0b00000001) {
> ist eine Kurzform für
>   if ((PINA & 0b00000001) != 0) {

@TO
Und noch besser schreibt es sich als
1
   if (PINA & ( 1 << PA0 ))
denn da sieht man dann auch gleich, dass es auf den Pin PA0, UND NUR AUF 
DEN PIN PA0 ankommt!

Bei dir, mit Taster gegen Masse geschaltet, dann eben
1
   if ( !(PINA & (1<<PA0)) )


Ich hab dir doch die Tutorien verlinkt. Warum schaust du da nicht rein? 
Da steht alles drinnen, so dass sich hier keiner mit immer dem gleichen 
Zeug den Mund fusselig reden muss.

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