Anfängerfrage - Arduino Uno Hardware Zähler Pin12... watndat?

Hallo Gemeinde,

möchte mir gerne eine Bewässerungssteuerung mit mehreren Giess_O_mat Sensoren aufbauen.

Bei den Anleitungen wird auf einen Multiplexer für mehrere Sensoren verwiesen, welcher auf den Pin12 angeschlossen werden muss/soll?

Was steckt hier dahinter, habe etwas von Hardwarezähler gelesen - ja aber finde hierzu leider keine näheren Informationen...? Was ist an Pin12 so besonders am Uno?

Hat der Mega mehr "Hardware-Zähler" im Vergleich zum Uno?

Grüße, Chris

Welche Anleitung?
Bitte Link dazu.
Grüße Uwe

Hi,

z.B. hier

Loschder:
Was steckt hier dahinter, habe etwas von Hardwarezähler gelesen - ja aber finde hierzu leider keine näheren Informationen...? Was ist an Pin12 so besonders am Uno?

Na, dass er eben mit einem internen HW-Zähler verbunden werden kann. Das ist nichts anderes als der Timer1, der da in einem besonderen Modus genutzt wird. Ich kenne aber keine Lib für den Arduino, die das unterstützt. Auch in dem von Dir verlinkten Beispiel wird die Hardware da direkt konfiguriert. Das bedingt einen Blick :wink: in das Datenblatt des AtMega 328P ( Kapitel 16, ab Seite 111 ). Meinem Verständnis nach ist das beim UNO aber Pin5 und nicht 12

Loschder:
Was steckt hier dahinter, habe etwas von Hardwarezähler gelesen - ja aber finde hierzu leider keine näheren Informationen...? Was ist an Pin12 so besonders am Uno?

Da wird kein Uno sondern ein Micro (32U4) verwendet. Der an dem Pin offensichtlich einen speziellen Timer verwendet.

Stimmt, beim Micro ist das Pin12.
Ist aber prinzipiell der gleiche Timer (Timer1 ), der sich beim 32u4 nicht vom Timer1 des 328P unterscheidet.

Da wird einfach der Timer so eingestellt dass die Taktquelle nicht der interne Takt (Prozessor Takt geteilt durch einen bestimmten Faktor), sondern ein Signal an einem Pin ist. So kann man einfach externe Ereignisse zählen. Das ist vor allem für höhere Frequenzen gedacht, wo man nicht vernünftig mit Interrupts arbeiten kann

ja aber finde hierzu leider keine näheren Informationen...?

Datenblatt lesen!

Hat der Mega mehr "Hardware-Zähler" im Vergleich zum Uno?

Datenblatt lesen!

Wobei beim Mega leider dazu kommt dass gerade diese Takt-Eingänge nicht alle auf die Platine herausgeführt sind. T1, T3 und T4 sind nicht zugänglich. An 16-Bit Timern extern hat man damit nur Timer5

Ja, ist ein bisschen fummelig da die notwendigen Drähtchen anzulöten.

Alternativ: Mega2560 Core

Danke euch allen,

soweit ist für mich jetzt klar dass es um Timer und hier für den Giessomat im speziellen um den 16bit geht.

Beim Uno gibts nur Timer 1 der 16bit hat. Beim Mega 2560 sind es Timer 1,3,4 und 5 als 16bit.

Timer2 jeweils 8bit.

Richtig?

Wenn ich jetzt das lese "Note that timer1 can be used on a Mega but does not support all three output pins OCR1A, OCR1B & OCR1C. Only A & B are supported. OCR1A is connected to pin 11 of the Mega and OCR1B to pin 12...."

Kann ich Timer1 beim Mega auf Pin11&12 anwenden oder muss ich da noch etwas vom Chip direkt abgreifen?
Und Timer3 auf pin2,3,5 , Timer4 auf Pin6,7,8... ???

Die Giessomat Sensoren liefern ein frequenzänderndes Rechtecksignal und ich möchte eben gerne 3 Sensoren an einem Arduino haben. Doch nen Multiplexer?

Du darfst nicht die Ausgangs-Pins mit den Eingangs-Pins verwechseln. Die OCRnA/B/C Pins sind hauptsächlich für PWM gedacht. Die kann man dann automatisch schalten ohne dass jedesmal Code ausgeführt wird.

Wenn ich das richtig verstehe geht es hier aber darum eine Frequenz zu messen. Also mit der Frequenz den Timer extern zu takten. Das geht auf dem Mega wie gesagt nur mit Timer5, da die anderen Takt-Eingänge (T1, T3 und T4) nicht herausgeführt sind. Auf dem UNO geht es auch mit Timer1.

Mit mehreren Sensoren muss man das die halt nicht gleichzeitig messen. Es reicht auch nacheinander. Deshalb der Multiplexer.

Habe nun so einiges über den Giess_O_mat nachgelesen.

Anscheinend ist hier wohl der vegetronix VH400 die bessere Wahl - Berichten im Netz zufolge hat der eine bessere Beständigkeit im Gartenbereich. Dieser gibt anstatt der Frequenz ein relativ lineares Spannungssignal von 0-3V aus.

Dieses kann ich dann doch einfach an einem der analogen Pins auswerten mit analogread, oder?

Das Ergebniss würde ich gerne in % angeben, sprich 3V = 100% und 0V = 0%.

Default ist ja 5V...wird nun mit analogreference der jeweilige Pin auf 3V gesetzt und somit sind die 3V mit analogread z.B. bei 3V 1023 sein?

Also so in etwa für prozentuale Ausgabe:
Bodenfeuchte in % = (100 / 1024) x analogread

MfG Chris

Loschder:
Default ist ja 5V...wird nun mit analogreference der jeweilige Pin auf 3V gesetzt und somit sind die 3V mit analogread z.B. bei 3V 1023 sein?

Dir ist klar, dass die Beschaltung mit 3V eine stabile externe Referenzspannungsquelle von 3V erfordert?
Das "auf 3V gesetzt" klingt so nach Programmierung.

Gruß Tommy

Hi,

d.h. mit analogreference muss ich hw-seitig eine Referenzspannung anlegen?

Also auf Pin aref die Referenzspannung von 3V legen und dann kann ich an z.B. Pin 3 analogread von 0-3V messen in 1024 schritten?

Muss dies dann noch deklariert werden oder wird dann auf allen analogen Eingängen die Referenzspannung genommen?

Das steht hier.

Gruß Tommy

Also dann wäre es einfacher die Referenzspannung auf default 5V zu belassen und wie folgt zu rechnen für ein Spannungssignal von 0-3V auf 0-100% zu rechnen

3V entspricht 614, somit wäre

Bodenfeuchte in % = (100 / 614) * analogread VH400

Richtig?

Bei Ganzzahl-Rechnung ist ( 100 / 614 ) null,
aber 1000 * 100 läuft schon ohne Fehlermeldung über, jedenfalls bei 16bit Integern.

analogRead(0) * 100 / 614; // sollte nur bis knapp 50% funktionieren, da sonst negative Werte rauskommen.

Bevor du auf float Rechnerei umsteigst:

analogRead(0) * 100L / 614; // verwendet long Multiplikation, das sind auch bei Uno usw. 32bit Integer

michael_x:
Bevor du auf float Rechnerei umsteigst:

analogRead(0) * 100L / 614; 

[/quote]

THX, that´s it...