4 Sensoren mit dem selben Programmcode abfragen

#3552737
Lesenswert?

Alex schrieb:
> Hi,
>
> ich frage mit einem Atmega8 einen DHT11 Feuchtigkeitsfühler ab (ähnlich
> 1 wire). Nun möchte ich aber 4 Fühler auslesen (jeder hängt an einem
> eigenen Pin). Kann ich die Port/Pin-Definitionen irgendwie meinen
> Funktionen übergeben?

Sicher kann man
1
void foo( volatile uint8_t* port, uint8_t pin )
2
{
3
  if( *port & ( 1 << pin ) )
4
    ...
5
}
6

7
int main()
8
{
9
  ....
10

11
  foo( &PINB, PB5 );
12
  ....
13
}
#3552758
Lesenswert?

Man muß allerdings aufpassen, ob das 1W-Timing dadurch nicht zu stark 
verzögert wird.
Auch werden dadurch schon 5 Register belegt, die Funktionen werden wohl 
nicht ohne Stackframe auskommen.

Besser ist daher, die Sensoren liegen alle auf einem Port und man 
übergibt der 1W-Funktion nur die Bitmaske.
#3552765
Lesenswert?

Alex schrieb:
> Vielen Dank!
> Braucht man das volatile?

JA!!!

Der Compiler versucht ohne das volatile, das Programm zu optimieren, in 
dem der Zugriff auf uint8_t* port weggelassen wird.

Das Erkennen einer Änderung ist so nicht möglich.

volatile ist zwingend erforderlich, wenn Lesezugriffe auf externe 
Grössen erfolgen sollen.

Gruss

Robert

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