Forum: Compiler & IDEs Was stimmt an diesem Code nicht (Externe Interrupts)


von KUGA (Gast)


Lesenswert?

Ich finde den Felher in meinem Code nicht. Könnt ihr mir helfen?
Es handelt sich btw um einen ATtiny2313 (auf dem Pollin Board).

Ich habe schon versucht den Fehler mithilfe des simulators zu finden, 
nur ich kann den Flag in EIFR nicht manuell (oder im Code) setzen.
1
/*
2
 * ext_interupt.c
3
 *
4
 * Created: 31.12.2011 14:39:53
5
 *  Author: Felix
6
 */ 
7
8
#include <avr/io.h>
9
#include <avr/interrupt.h>
10
11
int main(void)
12
{
13
  //Int0 = PD2 = Taster1 
14
  //Int1 = PD3 = Taster2
15
  MCUCR |= 0b00001111; //steigende flanke triggert INT0 und 1
16
  GIMSK |= 0b11000000; //INT0 und 1 enabled
17
  DDRD |= (1<<PD5) && (1<<PD6); //PD5 und 6 als Ausgang (LEDs)
18
  sei();
19
    while(1)
20
    {
21
    //nichts
22
    
23
    }
24
}
25
ISR(INT0_vect){
26
  PORTD ^= (1<<PD5); //toggle LED1
27
}
28
ISR(INT1_vect){
29
  PORTD ^= (1<<PD6); //toggle LED2
30
}

von (prx) A. K. (prx)


Lesenswert?

KUGA schrieb:

> Ich habe schon versucht den Fehler mithilfe des simulators zu finden,
> nur ich kann den Flag in EIFR nicht manuell (oder im Code) setzen.

Documentation-Not-Read-Error: Die Bits im EIFR kann man nicht selbst 
setzen, die werden von der Hardware gesetzt und durch Schreiben von 1 
gelöscht.

Abgesehen davon wärs für Tipps nützlich, zu wissen was denn eigentlich 
nicht funktioniert. Und in welcher Umgebung, d.h. was hängt an INT0/1?

von KUGA (Gast)


Lesenswert?

es handelt sich wie erwähnt um das Pollin Evaluation Board.
http://www.pollin.de/shop/downloads/D810038B.PDF
Schaltplan Seite 6.

Taster 1 soll LED1 Togglen
Taster 2 soll LED2 Togglen

von KUGA (Gast)


Lesenswert?

ich sehe gerade dass beide LEDs sich schalten lassen. sie leuchten nur 
extrem schwach. Liegt aber anscheined am Code, denn bei meinen anderen 
Versuchen haben sie kräftig geleuchtet.

von Hannes (Gast)


Lesenswert?

Eingang mit Pullup vs. Ausgang ;)

von (prx) A. K. (prx)


Lesenswert?

Such mal hier:
DDRD |= (1<<PD5) && (1<<PD6); //PD5 und 6 als Ausgang (LEDs)
                 ^^

von Sepp (Gast)


Lesenswert?

da liegt der Fehler:

>DDRD |= (1<<PD5) && (1<<PD6); //PD5 und 6 als Ausgang (LEDs)

probier's mal so:

DDRD |= ((1<<PD5) | (1<<PD6)); //PD5 und 6 als Ausgang (LEDs)

von Sepp (Gast)


Lesenswert?

Ah ja,

ich würde jetzt gern von Dir wissen, worin der Fehler bestand!!

Du sollst ja was lernen :-)

von KUGA (Gast)


Lesenswert?

Ahhh! logisch! 1 und 0 gibt 0...außerdem ist das natürlich einfach, da 
Bitoperation und kein vergleich.

Danke Leute

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.