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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.