Forum: Mikrocontroller und Digitale Elektronik Taste an AtTiny2313.


von jeroen (Gast)


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

von Johannes M. (johnny-m)


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.

von jeroen (Gast)


Lesenswert?

Hi,

deine Einwand ist richtig.
Aber das ist ja nicht das Problem.

jeren

von Johannes M. (johnny-m)


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!

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Der Klassiker!

Ändere zuerstmal
1
    if( (PORTD & (1<<PD6)) )

in
1
    if( (PIND & (1<<PD6)) )

Wenn es dann nicht geht, checke ob PD6 als IO-Pin belegt ist oder ob es 
eine Sonderfunktion hat (Datenblatt).

von jeroen (Gast)


Lesenswert?

Vielen vielen Danke,

PORTD durch PIND ersetzt und es funzt.


:-)

jeroen

von Johannes M. (johnny-m)


Lesenswert?

Stefan B. wrote:
> Der Klassiker!
Shit, den hab sogar ich diesmal übersehen...

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.