AVR- Taster an PortPin anschließen

Gast #4574550
Lesenswert?

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 #4574577
Lesenswert?

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 #4574626
Lesenswert?

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

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