Taste an AtTiny2313.

Gast #684695
Lesenswert?

Hi,

ich hab ein Problem, es geht einfach nicht.

Also von Anfang an:
Ich habe einen Attiny2313, an dem ich PD6 ein Taste angeschlossen.

http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Tasten_und_Schalter
Die Taste ist Active Low aufgebaut.

Mein Programm sieht so aus:
1
#include <avr/io.h>
2
#include <avr/delay.h>
3

4
void main()
5
{  
6
  int i;
7
  
8
  DDRB |= (1<<PB2);  //LED ausgang
9
  DDRD &= ~(1<<PD6);  
10
  //PORTD &= ~(1<<PD6);
11
  
12
  PORTB &= ~(1<<PB2); //LED AUS
13
    
14
  while(1)
15
  {
16
    if( (PORTD & (1<<PD6)) )
17
    {
18
      for(i=0; i<10; i++)
19
      {
20
        _delay_ms(20);      
21
      }
22
      PORTB ^= (1<<PB2); //Led toggeln
23
    }
24
  
25
    
26
  }
27
  
28
}


Also sollte die Led im 2 sec Takt blinken, wenn die Taste nicht gedrückt 
ist.

....
Mein Problem ist das es nicht geht.
Wo ist der Fehler ?

jeroen
#684697
Lesenswert?

1.: 20 ms * 10 sind 200 ms und nicht 2 s
2.: Die delay.h steht beim WINAVR (ich schließe aus dem Rest mal, dass 
Du den benutzt) im Unterverzeichnis "util" und nicht in "avr".
3.: Wenn die Taste tatsächlich "Low-aktiv" angeschlossen ist, dann macht 
die if-Abfrage genau das Gegenteil von dem, was Du beschreibst.
#684716
Lesenswert?

jeroen wrote:
> deine Einwand ist richtig.
> Aber das ist ja nicht das Problem.
Ach, wirklich? Wenn Du eine Funktion aus einer nicht vorhandenen 
Header-Datei verwenden willst, dann gibts mindestens Fehlermeldungen 
beim Compilieren. Demzufolge ist das durchaus ein Problem, ein großes 
sogar!

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