AVR ganzer Port auslesen

OP #4365766
Lesenswert?

Hallo zusammen

Ich möchte in einem Interrupt einen ganzen Port, an dem Taster sind, 
auslesen und diesen Wert in einen Buffer schreiben. Ich benutze 
CodeBlocks und einen Attiny48.
Die Taster werden per Software entprellt. Der Grundzustand der Taster 
ist 0xFC(DEFAULT_VALUE_PORTD)

Hier ist der Code:
1
ISR(TIMER0_COMPA_vect)
2
{
3
    // stop the counter
4
    TCCR0A &= ((0<<CS02) & (0<<CS01) & (0<<CS00));
5

6
    uint8_t tmp_portd = 0;
7
    tmp_portd = DDRD;
8
    tmp_portd = ((tmp_portd ^ DEFAULT_VALUE_PORTD) & 0x93);
9
    // Write the active switch into the buffer
10
    bufferIn(tmp_portd);
11
    // clear interrupt flag
12
    PCIFR = 0x00;
13
    
14
    // enable interrupt at PORTD
15
    PCMSK2 |= 0xFF;
16
}

Ich möchte herausfinden, welcher Taster geändert. Wenn ich jedoch 
debugge, wird immer nur der selbe Wert(220) in den Buffer geschrieben.
Wie muss ich es ändern, dass nur das aktive Bit in den Buffer 
geschrieben wird?

MfG und danke im Voraus
Gast #4365796
Lesenswert?

TM F. schrieb:
> asdf schrieb:
>> Was mir da auf Anhieb auffällt, du liest nicht den Port aus, sondern das
>> Direction Register...
>
> Mit
>
> tmp_portd = PORTD;
>
> funktioniert es auch nicht.

Ist ja auch klar, dsa ist das AUSGABE-Register des Ports, welches du 
hier liest. Es gibt noch ein drittes Register :-)
Ich will mal nicht so sein. Es heißt PIND...

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