AVR- Taster an PortPin anschließen

Gast #4574550
Hi,

ich versuche gerade einen Taster an einem uController anzuschließen. 
Aber leider tut sich nichts. Hab auch schon im avr-tutorial geschaut, 
aber ich finde meinen Fehler einfach nicht. Verwendeter uController: AVR 
8-Bit


Der Code:
1
int main( void )
2
{
3
     cli(); //disable Interrupt
4

5
    // Port als Output konfigurieren
6
    DDRC |= _BV(PC2); //Output 'LED Rot'
7
    DDRC |= _BV(PC3); //Output 'LED Grün'
8

9
    DDRC |= _BV(PC5); //Output 'LED test'
10

11
    // Port als Input konfigurieren
12
    DDRD  &= ~(1<<PD2); //Int0 Start
13
    DDRD  &= ~(1<<PD3); //Int1
14
    DDRC  &= ~(1<<PC4); //Ende
15

16
    // Pull-up resistor
17
    PORTC |= _BV(PC3);
18
    PORTC |= _BV(PC2);
19
    PORTD |= (1<<PD1);    // Enable pull-up resistor
20
    PORTD |= (1<<PD2);    // Enable pull-up resistor
21
    PORTC |= (1<<PC4);    // Enable pull-up resistor
22

23

24
    // Enable Interrupt
25
    GICR |= (1 << INT0);  // Enable INT0 | PDF S. 67
26
    GICR |= (1 << INT1);  // Enable INT1
27

28
    MCUCR |= 1<<ISC01 | 0<<ISC00;  // Trigger INT0 on falling edge
29
    MCUCR |= 1<<ISC11 | 0<<ISC10;  // Trigger INT1 on falling edge
30

31
    // Hauptschleife des Programms
32
    while (1)
33
    {
34
        PORTC &= ~_BV(PC5); // LED einschalten
35
        _delay_ms(100);
36

37
        PORTC |= _BV(PC5);  // LED ausschalten
38
        _delay_ms( 100 );
39

40

41
        if((PINC & (1 << PC4)))
42
        {
43
          LED_GREEN_ON;
44
            _delay_ms( 100 );
45
          LED_GREEN_OFF;
46
            _delay_ms( 100 );
47
        }
48
    }
49
}


Schaltplan:
PIN:PC4-----/ ----GND

Es ändert sich nichts, wenn der Schalter geschlossen/offen ist.
Gast
Hallo,

was soll der ganze kram ?
1
// Enable Interrupt
2
    GICR |= (1 << INT0);  // Enable INT0 | PDF S. 67
3
    GICR |= (1 << INT1);  // Enable INT1
4

5
    MCUCR |= 1<<ISC01 | 0<<ISC00;  // Trigger INT0 on falling edge
6
    MCUCR |= 1<<ISC11 | 0<<ISC10;  // Trigger INT1 on falling edge

Also Taster verarbeitet man nicht per Interrupt. Es gibt aber eine 
Ausnahme.
Gast
Vielen dank für eure Antworten!

Karl M. schrieb:
> Hallo,
>
> was soll der ganze kram ?// Enable Interrupt
>     GICR |= (1 << INT0);  // Enable INT0 | PDF S. 67
>     GICR |= (1 << INT1);  // Enable INT1
>
>     MCUCR |= 1<<ISC01 | 0<<ISC00;  // Trigger INT0 on falling edge
>     MCUCR |= 1<<ISC11 | 0<<ISC10;  // Trigger INT1 on falling edge
> Also Taster verarbeitet man nicht per Interrupt. Es gibt aber eine
> Ausnahme.

Ich möchte dass bei einem bestimmten Ereignis, das ich per Schalter 
steuere, Variablen sofort verändert werden(dies geschieht in der ISR, 
die ich jetzt nicht mit reinkopiert habe). Allerdings sollten die 
Befehle im Moment keine Rolle spielen, da sie an dem Port nichts 
ändern(und ich habe alle Interrupt auch ausgeschaltet bis das mit dem 
Taster funktioniert).

Karl M. schrieb:
> Hallo,
>
> Diese IF-Abfrage(PINC & (1 << PC4))ist fast immer Wahr, da der Pullup
> von Portc.4 eingeschaltet wurde.

Jo, aber wenn ich den Schalter schließe, müsste der Eingang doch 0 sein 
und die Bedingung ist falsch => Dann sollte IF-Abfrage nicht 
abgearbeitet werden. Aber das Programm springt immer in die Abfrage 
rein.


The D. schrieb:
> Deine Pull-Ups aktivierst du an PD1 und PD2, du benutzt aber PD2 und PD3
> als Input.

Stimmt danke.

NurEinGast schrieb:
> Welcher der AVR 8-Bit controller ?
>
> Es gibt welche, die PC3-PC6 als JTAG Port verwenden.
> Wenn Du die Pins als I/O Verwenden willst, muss JTAG ausgeschaltet
> werden.

Ich benutze den ATmega8-16PU. Die LEDs an PC3 und PC5 
funktionieren(Blinken), von daher glaub ich nicht, dass ich noch etwas 
extra ausschalten muss?
-> Datenblatt: 
http://datasheet.octopart.com/ATMEGA8-16PU.-Atmel-datasheet-14702621.pdf

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 10 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.