Forum: Mikrocontroller und Digitale Elektronik atmega8a alle eingänge invertiert bis auf einen (C#)


von Stefan G. (atomkaktus)


Lesenswert?

Hallo,

INFOS:
Ich programmiere gerade einen ATMEGA8a. Ich nutze AStudio6.2, einen 
AVRISP mkII und ein selbstgebautes evaluations-Board aus diesem -> 
(https://www.mikrocontroller.net/articles/AVR-Tutorial:_Equipment) 
Artikel.

Die Ein- und Ausgänge habe ich wie im Folgeartikel
(https://www.mikrocontroller.net/articles/AVR-Tutorial:_IO-Grundlagen)
beschaltet.

PROGRAMM:
1
#include <avr/io.h>  
2
 
3
int main (void) {            
4
 
5
  DDRB = 0xFF;             
6
  PORTB = 0xFF; 
7
  
8
  DDRD = 0x00;
9
  PORTD = 0x00;
10
             
11
12
   while(1) {
13
    
14
      if (PIND&(1<<PIND0)) 
15
        PORTB &= ~(1<<PINB0);
16
      else PORTB |= (1<<PINB0);  
17
              
18
      if (PIND&(1<<PIND1)) 
19
        PORTB &= ~(1<<PINB1);
20
      else PORTB |= (1<<PINB1);
21
      
22
      if (PIND&(1<<PIND2)) 
23
        PORTB &= ~(1<<PINB2);          
24
      else PORTB |= (1<<PINB2);
25
          
26
      if (PIND&(1<<PIND3)) 
27
        PORTB &= ~(1<<PINB3);          
28
      else PORTB |= (1<<PINB3); 
29
  
30
   }
31
   
32
   return 0;                
33
}
PROBLEM:
Ich geh davon aus, dass nun bei geöffnetem Taster alle LED´s aus sind 
und bei geschlossenem Taster an. Dies ist jedoch nur an PD0 der Fall. 
Alle anderen Taster sind invertiert.

TROUBLESHOOTING:
Ich habe die Beschaltung von Tastern und LEDs auf Verpolung 
kontrolliert. Negativ.
Auch die Spannungsversorgung vom AVR ist korrekt.

Ich habe die Paarung PD0->PB0 und PD1->PB1 zu PD0->PB1 und PD1->PB0 
getauscht. Nun war PB0 invertiert und PB1 nicht. Damit denke ich das 
Problem auf der Eingangsseite (PORTD) identifiziert zu haben.

Ich bitte um Rat. Auch über Vorschlägen bezüglich einer eleganteren 
Programmierung würde ich mich freuen.

Gruß Stefan

: Bearbeitet durch User
von Dirk B. (dirkbilland)


Lesenswert?

Hallo Stephan,

ich will Dir nicht die Freude am Knobeln verderben, deshalb nur ein 
Hinweis: sowohl die Taster als auch die LED's sind so beschaltet, daß 
dort eine "0" gelesen bzw. ausgegeben werden muß, wenn der Schalter 
gedrückt ist bzw. die LED leuchten soll. Negative Logik also. Das mußt 
Du in Deinem Code berücksichtigen.

Gruß
Dirk

von Stefan G. (atomkaktus)


Lesenswert?

Hallo Dirk,

das mit "0=LED an" und "1=LED aus" weiß ich bereits :).
Mir mach eher die Inhomogenität (eine 1, drei 0) kopfzerbrechen. Dies 
geschieht ja, obwohl ich für alle 4 Pins den gleichen Code verwende.
Gruß Stefan

: Bearbeitet durch User
von Georg G. (df2au)


Lesenswert?

Hast du externe Pull-Ups an den Eingängen? Die internen schaltest du ja 
explizit ab. Warum eigentlich?

von Stefan G. (atomkaktus)


Lesenswert?

Georg G. schrieb:
> Hast du externe Pull-Ups an den Eingängen? Die internen schaltest du ja
> explizit ab. Warum eigentlich?

Ja, ich habe externe Pull-Ups dran. Hab mich da erstmal an das oben 
genannte Kochrezept gehalten. Die Internen Widerstände habe ich explizit 
im Laufe der Fehlersuche ausgeschaltet, um potentielle Fehlerquellen 
auszuschließen (ich mach das grad zum ersten Mal, also hab keine Ahnung 
;)).

von Georg G. (df2au)


Lesenswert?

Poste doch mal ein Bild deines Aufbaus. Und bist du dir sicher, dass 
deine Taster in Ordnung sind?

von Stefan G. (atomkaktus)


Angehängte Dateien:

Lesenswert?

Georg G. schrieb:
> Poste doch mal ein Bild deines Aufbaus. Und bist du dir sicher, dass
> deine Taster in Ordnung sind?

Für Detailaufnahmen bitte noch einmal anfragen. Der Quarz ist noch nicht 
aktiv, da ich noch bei den einstellungen Probleme habe (ist wohl ein 
super Thema für einen neuen Beitrag :)).

von Stefan G. (atomkaktus)


Lesenswert?

Der Taster am PD0 ist der Übeltäter.
Oh man, hätte nicht gedacht das einer der Taster invertiert ist. Hab die 
alle zusammen gekauft. Vielen dank für den Tipp.

Zu meiner Frage, ob der Code eleganter geschrieben werden kann, kann mir 
da noch jemand weiter helfen.

Auf alle Fälle schon mal vielen, vieln dank!

von Karl H. (kbuchegg)


Lesenswert?

Es gibt auch Taster, die sowohl als Öffner als auch als Schliesser 
arbeiten können, je nachdem welche Pins man benutzt

von Stefan G. (atomkaktus)


Lesenswert?

Das ist gut zu wissen! Hab in gerade mal gedreht. Der gehört leider 
nicht dazu. Aber wer weiß wann ich mal einen öffner gebrauchen kann ;) .

von Nicht"Gast" (Gast)


Lesenswert?

Moin,

bleibt eigentlich nur eine Frage offen. Was hat das Ganze mit C# zu tun?

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.