Atmega32 - PullUp vertauscht?

OP #3257286
Hallo liebe Mikrocontroller Gemeinde!

Da ich noch recht neu auf dem Gebiet bin, habe ich mal eine Frage zu 
meinem Atmega32. Ich verwende übrigens das Pollin-Evaluationsboard.

In der Beschreibung vom Board 
(http://www.pollin.de/shop/downloads/D810038B.PDF) steht, dass Taster1 
PD2 ist (INT0) und Taster2 PD3 (INT1) ist.
Nun habe ich aber den merkwürdigen Effekt, dass wenn ich auf PORTD den 
internen PullUp für PD2 (Taster 1) aktiviere, dass mein Interrupt nur 
bei betätigen von Taster 2 (PD3 ?!) ausgelöst wird.

Kann mir jemand sagen, warum das so ist? Möglicherweise hängt es auch 
mit meinen Interrupts zusammen? ...
Den Interrupt habe ich übrigens nach folgendem Dokument konfiguriert, da 
ich INT0 und INT1 verwenden will: 
http://www.mikrocontroller.net/articles/AVR-Tutorial:_Interrupts

Übrigens: Was ich damit bezwecken will: Ich möchte eigentlich nur die 
beiden Taster auf dem Board auf Änderungen überprüfen.

Hier noch mein Code:
1
int main(void) {
2
  // Port D auf Ausgabe setzen
3
  DDRD = 0xFF;
4

5
  // Pin D2 und D3 auf Eingang Taster stellen
6
  DDRD &= ~( (1 << PD2) | (1 << PD3) );
7
  // Pin D2 und D3 Pullup Widerstand aktivieren (Wie geht das in diesem Fall für 2 Taster?)
8
  PORTD |= (1 << PD2);
9

10
  // LED 1 Port auf OUT
11
  DDRD |= (1 << PD5);
12
  // LED 2 Port auf OUT
13
  DDRD |= (1 << PD6);
14

15
  cli();
16
  GICR |= (1 << INT1) | (1 << INT0); // INT0 (PD2) und INT1(PD3) im "General Interrupt Control Register" aktivieren
17
  MCUCR |= (0 << ISC01) | (1 << ISC00); // Die steigende und fallende Flanke löst den Interrupt INT0 (ISC01/ISC00) aus
18
  MCUCR |= (0 << ISC11) | (1 << ISC10); // Die steigende und fallende Flanke löst den Interrupt INT0 (ISC11/ISC10) aus
19
  sei();
20

21
  while (true) {
22
  }
23
}
24

25
ISR (INT0_vect) {
26
  // Entprellung für Schalter 1
27
  entprellung( &PIND, (1 << PD2) );
28

29
  // ...
30
}
31

32
ISR (INT1_vect) {
33
  // Entprellung für Schalter 2
34
  entprellung( &PIND, (1 << PD3) );
35

36
  // Ist momentan nur eine Test Routine ...
37
  delay_ms(500);
38

39
  PORTD ^= (1 << PD5);  // LED 1 Toggle
40
  PORTD ^= (1 << PD6);  // LED 2 Toggle
41
}

Kann mir da jemand helfen, was ich besser machen muss?
Gast #3257371
Hi

>Oh ja da habe ich wohl im Datenblatt überlesen, dass das Konstrukt
>ohnehin schon auf Masse liegt.

Und das ist ein krankes Konstrukt da bei entladenem Kondensator ein 
Kurzschluss beim Drücken der Taste entsteht.

Hier gibt es irgendwo eine Umbauanleitung damit die Taster nach Masse 
schalten.

MfG Spess

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.