Forum: Mikrocontroller und Digitale Elektronik Impulse zählen ohne EXTI, 20kHz 300kHz


von Georg (alphageorg)


Lesenswert?

Hallo,

ich möchte einen AVR aller x Minuten
aufwecken und für die Dauer von einigen Millisekunden 5V-Impulse zählen.

Leider sind meine externen Interrupts schon verbraucht.
Meine Idee wäre nun ein Schieberegister zu verwenden.

Allerdings gibt es verschiedene Typen und ich bin da gerade etwas
am zweifeln ob das der richtige Weg ist.
74HC595 ist nicht geeignet weil der Impulse vom uC in parallel
Umwandelt ..
Ich suche einen Baustein der die Impulse zählt und bei dem
der Zählerstand dann per I2C o. SPI abrufbar ist..

Gibt es da Empfehlungen? Wie würdet ihr das machen?

MfG, Georg

Beitrag #7475293 wurde vom Autor gelöscht.
von Peter D. (peda)


Lesenswert?

Welcher AVR?
Wieviel Impulseingänge?

von Georg (alphageorg)


Lesenswert?

Hey,
es soll der ATmega 16A verwendet werden.
2 Eingänge wären schön 4 wären ganz toll.

Konkret geht es um einen kapazitive Feuchte Sensor:
https://www.ramser-elektro.at/shop/bausaetze-und-platinen/giesomat-kapazitiver-bodenfeuchtesensor-erdfeuchtesensor-mit-beschichtung/

klar könnte ich versuchen die OCxx Pins frei zu lassen aber
da ich eh I2C auf der Platine nutze wäre hier ein entsprechender IC 
schön.

Eine Weitere Problematik bei den Frequenzsignalen könnte die 
Leitungslänge darstellen, 2m bis 6m werden das Signal dämpfen oder die 
Frequenz verändern,
hier hoffe ich durch eine Live Kalibrierung im Gewächshaus diese
Abweichung zu kompensieren.

von Axel S. (a-za-z0-9)


Lesenswert?

Georg schrieb:
...
> für die Dauer von einigen Millisekunden 5V-Impulse zählen.
> Leider sind meine externen Interrupts schon verbraucht.

Impulse zählt man üblicherweise nicht mit einem Interrupt-Eingang, 
sondern mit dem externen Eingang eines Counter/Timers.

Und wenn es unbedingt ein Interrupt sein muß, dann nimmt man halt einen 
neueren AVR mit Pinchange-Interrupt. So wie es klingt, ist das ein altes 
Fossil. Welches denn?

von Georg (alphageorg)


Lesenswert?

Axel S. schrieb:
> sondern mit dem externen Eingang eines Counter/Timers.
Ja habe ich gerade realisiert :-)

> Fossil. Welches denn?
Ich habe noch ein ganz paar alte ATmega 16A daheim.
Die würde ich gern für mein Hobby Projekt nutzen weil die
einfach zu programmieren sind und völlig ausreichen -
und nun einmal auch da sind.

von Georg (alphageorg)


Lesenswert?

Habe gehofft es gibt mehrkanalige Zähler-ICs
mit I2C ...

Habe aber bei mouser keine gefunden, nur Zähler ohne i2c

--Also einen kleinen uC dafür verwenden?
Attiny XY als Zähler u. per I2C abfragen?

von Georg (alphageorg)


Lesenswert?

Oder mehrkanaligen Frequenzteiler
und dann per Multiplexer (über I2C steuerbar!?) die einzelnen 
(runtergeteilten) Signale abfragen?

Die Zählereingänge müssen nicht zeitgleich abgefragt werden.

Also als Schleife sähe das im uC Code so aus in meiner Vorstellung:

uC Schläft ..
Aufwachen uC
[ anderer Code ]
  wählen Kanal Multiplexer
  Impulse zählen
  Nächster Kanal Multiplexer
  ...
Auswertung
[ anderer Code ]
uC Schläft ..

von C-hater (c-hater)


Lesenswert?

Georg schrieb:

> es soll der ATmega 16A verwendet werden.

Warum muss es unbedingt der sein? Der ist weder besonders günstig noch 
besonders gut ausgestattet noch sonst in irgendeiner Hinsicht 
vorteilhaft.

Nimmst du was (etwas) moderneres (und weitgehend abwarts-kompatibles) 
wie etwa Mega644(P) oder Mega1284(P) löst sich dein Problem ganz 
einfach. Du musst in der bestehenden Software maximal ein paar Register- 
oder Bitnamen anpassen und die Sache läuft auch auf dem neuen. Physisch 
läßt er sich auch 1:1 austauschen.

Danach hast du dann alle Freiheiten für deine zusätzliche 
Funktionalität. Insbesondere natürlich die Fähigkeit, für jeden GPIO-Pin 
einen Interrupt bei Änderung des Levels generieren zu können.

von Georg (alphageorg)


Lesenswert?

C-hater schrieb:
> Warum muss es unbedingt der sein? Der ist weder besonders günstig noch
> besonders gut ausgestattet noch sonst in irgendeiner Hinsicht
> vorteilhaft.

C-hater,
Du hast völlig Recht, vielleicht sollte ich mich nicht so auf diesen Typ
versteifen, nur weil er eben da liegt.
Hab halt für Hobbysachen den Fetisch das ich gern uC's im DIL Format 
nehme
 - ist so ne Macke xD

Hatte insgeheim noch auf eine Antwort gewartet wie:
"..nimm doch einfach den 4-fach Zähler 74xxx, der ist per Bus 
auslesbar..." ;-D

Aber wird wohl auf nen anderen uC hinauslaufen, was soll der Krampf

von C-hater (c-hater)


Lesenswert?

Georg schrieb:

> Du hast völlig Recht, vielleicht sollte ich mich nicht so auf diesen Typ
> versteifen, nur weil er eben da liegt.
> Hab halt für Hobbysachen den Fetisch das ich gern uC's im DIL Format
> nehme

Auch die von mir genannten vier gibt es allesamt im 40Pin-DIL-Package. 
Das dürfte also nicht das Problem sein. Schon eher, dass sie aktuell 
wirklich alle unverschämt teuer sind...

Der Preis steht wirklich in keinem vernünftigen Verhältnis zur Leistung 
mehr. Ich würde sowas auch nicht kaufen (hab aber noch einige aus dieser 
Auswahl rumliegen, weswegen für mich diese Lösung die naheliegendste 
war)...

> Aber wird wohl auf nen anderen uC hinauslaufen, was soll der Krampf

Nicht unbedingt. Der Mega16A hat noch zwei Sachen zu bieten, die man als 
"externen Interrupt" benutzen (eigentlich: mißbrauchen) könnte. Wenn 
Timer1 in deiner Anwendung bisher unbenutzt ist, kannst du du dessen 
Capture-Interrupt benutzen. Und wen der AnalogComparator bisher 
unbenutzt ist, kannst du dessen Interrupt benutzen.

> Hatte insgeheim noch auf eine Antwort gewartet wie:
> "..nimm doch einfach den 4-fach Zähler 74xxx, der ist per Bus
> auslesbar..." ;-D

Es ist immer Unsinn, an zusätzliche Hardware zu denken, bevor man die 
Möglichkeiten des µC selber vollständig ausgenutzt hat.

von Axel S. (a-za-z0-9)


Lesenswert?

Georg schrieb:
> Hatte insgeheim noch auf eine Antwort gewartet wie:
> "..nimm doch einfach den 4-fach Zähler 74xxx, der ist per Bus
> auslesbar..."

Gibts nicht. Zu der Zeit als Zähler wie 74x193 oder 74x590 designed 
wurden, gab es I²C oder SPI gerade mal in den wildesten Träumen 
irgendeines Ingenieurs. Das paßt nicht zusammen.

Weil ich gerade den 74x590 angesprochen habe: das ist ein 8-Bit Zähler 
mit Latch und parallelen Ausgängen. Den kannst du natürlich an ein 
Schieberegister koppeln und per SPI auslesen. Aber am Ende wird das 
Drahtverhau größer als dein µC.

Nein. Wenn du das nicht in Software erschlagen kannst, dann kannst du 
auch ein CPLD nehmen. Ist aber wieder was zu programmieren.

von Georg (alphageorg)


Lesenswert?

Axel S. schrieb:
> Georg schrieb:
>> Hatte insgeheim noch auf eine Antwort gewartet wie:
>> "..nimm doch einfach den 4-fach Zähler 74xxx, der ist per Bus
>> auslesbar..."
>
> Gibts nicht. Zu der Zeit als Zähler wie 74x193 oder 74x590 designed
> wurden, gab es I²C oder SPI gerade mal in den wildesten Träumen
> irgendeines Ingenieurs. Das paßt nicht zusammen.

Ja, habe ich befürchtet ... obwohl ein derartiger IC sicher
seine Abnehmer hätte (?)

Na ich hoffe ein Signal mit 200 kHz bekommt man mit dem ATmega noch
gelesen von der Geschwindigkeit her.
Auf meine 4 Eingänge werde ich mit den 2 freien OCx und dem "Missbrauch"
das Timers wie C-Hater erwähnt hat werde ich wohl hinkommen.

Beitrag #7475712 wurde vom Autor gelöscht.
von C-hater (c-hater)


Lesenswert?

S. L. schrieb im Beitrag #7475712:

> Falls C-haters Erläuterung nicht ganz verstanden wurde, hier der
> Originaltext:
> ACIC: When written logic one, this bit enables the Input Capture
> function in Timer/Counter1 to be triggered by the Analog Comparator. The
> comparator output is in this case directly connected to the Input
> Capture front-end logic ...

Ähem, nö. Das war ganz und garnicht, was ich sagen wollte. Das ist eine 
Möglichkeit, das AC-Event an den Timer1 umzuleiten.

Dafür würden aber AC und Timer1 benötigt. Ziemlich kontraproduktiv.

Nö, der AC hat einen eigenen Interrupt. Den kann man direkt nutzen, ohne 
ihn über den Timer1 umzuleiten.

Und der Timer1 wiederum hat einen eigenen Pin für das capturen, der 
braucht nicht das umgeleitete AC-Event als Input

Außerdem:

Ich schrieb:
> Wenn Timer1 in deiner Anwendung bisher unbenutzt ist .

Es sind (je nach bisheriger Nutzung des Timers) auch Szenarios denkbar, 
in denen die Nutzung der Capture-Funktionalität als "externer Interrupt" 
sogar zusätzlich möglich ist, ohne die bestehende Funktionalität zu 
stören.

>
> Und wenn ich ihn weiter ergänzen darf: kompatibel gibt es (neben 644 und
> 1284) auch noch ATmega164 und 324.

von S. L. (sldt)


Lesenswert?

Yô, Entschuldigung - ich war schon im Wochenende.

von Motopick (motopick)


Lesenswert?

> Ich suche einen Baustein der die Impulse zählt

Einfach noch eine Z80CTC an den Bus tackern.
Ja, so einfach war das frueher™. :)

von Stefan F. (Gast)


Lesenswert?

Georg schrieb:
> 2m bis 6m werden das Signal dämpfen oder die Frequenz verändern

Eine Leitung kann das Signal dämfen und erheblich verzerren, aber ganz 
sicher nicht deren Frequenz ändern.

von Stefan F. (Gast)


Lesenswert?

Georg schrieb:
> Habe gehofft es gibt mehrkanalige Zähler-ICs
> mit I2C ...

Gibt es, zum Beispiel Atmega16 😀 Du musst sie nur passend programmieren.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.