Forum: Mikrocontroller und Digitale Elektronik Attiny13 Lauflicht+Taster Problem


von Dex (Gast)


Angehängte Dateien:

Lesenswert?

Hallo alle zusammen ich sitze im moment an einem kleinen Lauflicht 
welches auf ein Drucktaster reagieren soll.
1
 #include <avr/io.h>
2
 #include <util/delay.h>
3
 
4
 int
5
 main (void)
6
 {
7
     DDRB=0b001111;         //PB0,PB1,PB2,PB3 als Ausgänge geschaltet    
8
   PORTB|=(1<<PORTB4);
9
   
10
   while(1) 
11
        {
12
        if(!(PORTB&(1<<PINB4)))
13
        {
14
          PORTB=0b000000;
15
          return 0;        
16
        }          
17
          
18
    _delay_ms(1000);
19
    PORTB|=(1<<PORTB0); //Oder-Verknüpfung mit 1 an PB0  // PORTB|=0b000001;
20
     
21
    
22
    
23
    _delay_ms(1000);
24
    PORTB|=(1<<PORTB1);//Oder-Verknüpfung mit 1 an PB1 //PORTB|=0b000010;
25
    
26
    
27
     _delay_ms(1000);
28
    PORTB|=(1<<PORTB2);//Oder-Verknüpfung mit 1 an PB2 //PORTB|=0b000100;
29
    
30
    
31
     _delay_ms(1000);
32
    PORTB|=(1<<PORTB3);//Oder-Verknüpfung mit 1 an PB3 //PORTB|=0b001000;       
33
    
34
    
35
    _delay_ms(1000);
36
    PORTB^=(1<<PORTB0); //Invertierung von PB0
37
     
38
    
39
    
40
    _delay_ms(1000);
41
    PORTB^=(1<<PORTB1);//Invertierung von PB1 
42
    
43
    
44
     _delay_ms(1000);
45
    PORTB^=(1<<PORTB2);//Invertierung von PB2 
46
    
47
    
48
     _delay_ms(1000);
49
    PORTB^=(1<<PORTB3);//Invertierung von PB3       
50
    
51
      }
52
 }

wie im Schematic hoffentlich zu erkennen habe ich an PB4 einen 
Drucktaster geschaltet und im den internen Pull up von PB4 
eingeschaltet. wird der taster gedrückt sollen alle 4 LEDs leuchten. 
beim Testen ist mir allerdings aufgefallen dass PB4 genauso wie die 
anderen Pins als ausgang fungiert und permanent getoggelt wird. Was kann 
ich falsch gemacht haben?

von Karl H. (kbuchegg)


Lesenswert?

if(!(PORTB&(1<<PINB4)))
        {
          PORTB=0b000000;


Gratuliere. Du hast dir soeben den Pullup Widerstand ausgeschaltet.

von Karl H. (kbuchegg)


Lesenswert?

>         if(!(PORTB&(1<<PINB4)))


zum Abfragen eines Eingangs wird PINB benutzt und nicht PORTB.
De facto fragst du hier ab, ob der Pullup eingeschaltet ist oder nicht.

von pitschu (Gast)


Lesenswert?

Das Hauptproblem ist wohl das return 0 anstatt break;

ps

von Karl H. (kbuchegg)


Lesenswert?

pitschu schrieb:
> Das Hauptproblem ist wohl das return 0 anstatt break;

Ah, danke.
das hab ich  noch gar nicht gesehen.

von Dex (Gast)


Lesenswert?

Hab das Problem selbst gefunden nach dem ich ein paar minuten Pause 
gemacht habe. zu meiner Schande muss ich gestehen, dass ich die ganze 
zeit die falsche elf Datei zum flashen benutzt habe xD.

trotzdem danke ich euch allen für die verbesserungen, damit habt ihr mir 
die spätere fehlersuche erpsart xD

Eine Frage hätte ich aber noch: In den AVr tutorials werden öfters die 
Bezeichner PCx benutzt, steht es für port oder Pin? kann ich PCx und PBx 
usw auch benutzen? AVr Studio scheint es nämlich nicht zu kennen

von Martin K. (maart)


Lesenswert?

Dex schrieb:
> Eine Frage hätte ich aber noch: In den AVr tutorials werden öfters die
> Bezeichner PCx benutzt, steht es für port oder Pin? kann ich PCx und PBx
> usw auch benutzen? AVr Studio scheint es nämlich nicht zu kennen
1
#include <avr/io.h>
 Dann kennt es das auch. Es steht für die jeweilige Pinnumer.

von Karl H. (kbuchegg)


Lesenswert?

Dex schrieb:

> Eine Frage hätte ich aber noch: In den AVr tutorials werden öfters die
> Bezeichner PCx benutzt, steht es für port oder Pin?

Für keines von beiden.

Eigentlich schreibt man ja zb
1
   PORTB |= ( 1 << 4 );
wenn man den Pin 4 am Port B auf 1 setzen will.
Da aber die 4 da nicht besonders heraussticht, hat man dafür per Makro 
Bezeichnungen eingeführt
1
#define PB4   4
so dass man schreiben kann
1
   PORTB |= ( 1 << PB4 );
was die Sache insofern verbessert, als man in den Zahlen sofort erkennen 
kann, was denn nun die Pinnummer ist.

PC4 steht also weder für Port oder Pin, sondern es steht für 4.
Selbiges für PINB4, PORTB4, DDRB4, etc. Ist alles dasselbe: ein Synonym 
für 4

> kann ich PCx und PBx
> usw auch benutzen? AVr Studio scheint es nämlich nicht zu kennen

logisch. Dein Tiny hat ja auch keinen C Port. Daher gibt es auch kein 
PC4.

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.