Ausgang ist zu lange geschaltet

OP #3227103
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
> 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
OP #3228164
Habe da doch noch mal eine nachfrage, wie ich das ganze mit einem 
schalter machen kann, ist mir nun bewusst, aber wie muss ich es 
schalten, wenn ich nur einen Taster habe? da habe ich ja nur einen 
Eingang und einen Ausgang (wo soll ich GND anlegen?
#3228173
Chandler Bing schrieb:
> Habe da doch noch mal eine nachfrage, wie ich das ganze mit einem
> schalter machen kann, ist mir nun bewusst, aber wie muss ich es
> schalten, wenn ich nur einen Taster habe? da habe ich ja nur einen
> Eingang und einen Ausgang (wo soll ich GND anlegen?

An einem Pin vom Taster. Der andere kommt an den Pin vom µC
#3228179
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

Eine eigene Frage? Dieser Thread ist über 13 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.