AVR ganzer Port auslesen

OP #4365766
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
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...
Gast
Nein,

PINDx sind nur die Bitnummern des Registers PIND, also nichts mit 
Auslesen.
Besser wäre es doch mal das Datenblatt zu nehmen und ganz hinter, sich 
allen Registern zu beschäftigen.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 10 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.