Moin! Ich suche nach einer Möglichkeit, aus einem Schalter einen
Tastimpuls zu machen. Wenn man also den Schalter drückt, wird ein kurzer
Impuls ausgegeben, wenn man den Schalter wieder in die Aus-Stellung
bewegt hat, soll jedoch kein Impuls gegeben werden. Dies soll 4x im
µController unabhängig voneinander möglich sein. Im Anhang habe ich eine
Grafik erstellt, die das verdeutlichen soll. Als µController nehme ich
den ATtiny2313.
Ich habe bereits ein "Grundgerüst" in Bascom geschrieben, komme aber
nicht weiter:
Wenn der Kontroller sonst nichts tun muss und es egal ist wenn Impulse
verzögert kommen wenn zwei oder mehr Schalter gleichzeitig betätigt
werden, könnte es funktionieren.
Allerdings musst du noch festlegen das ein Eingang wenn er mal 1 ist,
erst wieder abgefragt wird wenn er auf 0 gegangen ist.
Eventuell muss auch das Tastenprellen berücksichtigt werden.
Hallo!
Hubert G. schrieb:> Wenn der Kontroller sonst nichts tun muss und es egal ist wenn Impulse> verzögert kommen wenn zwei oder mehr Schalter gleichzeitig betätigt> werden, könnte es funktionieren.
Das sollte kein Problem sein, da immer nur 1 Schalter gedrückt ist.
> Allerdings musst du noch festlegen das ein Eingang wenn er mal 1 ist,> erst wieder abgefragt wird wenn er auf 0 gegangen ist.
Das ist meine Schwierigkeit ;-) Hättet ihr da vielleicht einen
Codeschnipsel für mich?
> Eventuell muss auch das Tastenprellen berücksichtigt werden.
Das geht doch soweit ich weiss mit Debounce, muss ich mir nochmal in der
Bascom-Referenz ansehn und einbauen.
Gruß, Jan
Hallo,
ich kenne mich mit Bascom jetzt nich so wirklich aus, aber mal eine
prizipielle Anregung:
Du Fragst die Schalter bisher immer direkt am. Schreib dir dazu eine
Funktion, die eine nur 1 zurück gibt, wenn du eine steigende Flanke am
Eingang hast. Dazu musst du den letzten Wert des Scahlters mit dem
aktuellen Wert vergleichen.
Das mit dem Wait sollte so funktionieren, allerdings kannst du für die
Dauer des Impulses keine weiteren Taster abfragen. Eleganter und genauer
wäre es, wenn du den timer verwendest.
Ich habe das für mich hardwaremäßig ohne uC gelöst, um einen Zähler
anzusteuern.
Vielleicht hilft das weiter.
Edit:
der LM339 ist ein Komperator, kein OP.
@Thorsten S:
Den kannte ich schon, aber:
Das entprellt nicht.
Und: Wenn die Bausteine, die das Signal verarbeiten (als Impuls
erkennen) sollen, langsamer sind als die XOR-Gatter, wird das ganze
unzuverlässig.
Ich habe da recht lange herumprobiert, auch mit NE555 experimentiert.
Der NE555 (blos ein Timer) bzw. NE556 (gerade mal einer mehr) hat mir zu
viele Pins pro Taste. Hühnerfutter braucht man auch da.
Du kannst ja mal in den Thread
Beitrag "Simulation - Prellen/Entpellen von Tastern" schauen. Da habe ich ein
AVR-Programm zum Aufzeichnen des Prellens für eine LTSpice-Simulation
der Tiefpass-Hochpass-Kombination und die passendende Spice-Datei
eingestellt.
Mein Tipp: Frage die Eingänge nicht mit IF ab sondern nutze DEBOUNCE.
Das entprellt und wertet die Flanke aus. Also nur ein Impuls bis zum
nächsten High-Pegel.
Ich würde es so machen:
FÜr jeden SChalter gibt es einen Variable die den aktuellen
Schalterzustand hält.
Weiters gibt es für jeden Schalter eine Variable die als Zähler
fungiert.
Du fragst ständig die Schalter reihum ab. Detektierst du (mit dem
gemerkten Zustand von vorher), dass der Schalter sich von 0 auf 1
geändert hat, dann schaltest du den Ausgangspin auf 1 und einen Wert in
die Zählvariable.
In jedem Schleifendurchlauf schaust du dir die Zähler an. Ist er
ungleich 0, dann verringerst du ihn um 1. Wird er dadurch 0, so
schaltest du den Ausgang wieder auf 0 zurück.
Für einen Schalter ungefähr so
1
Schalter1 = Pind.0
2
Zaehler1 = 0
3
4
do
5
6
SchalterJetzt = Pind.0
7
if Schalter1 <> SchalterJetzt then ' ist am Eingang etwas passiert ?
8
Schalter1 = SchalterJetzt
9
10
if Schalter1 = 1 then ' der Schalter wurde eingeschaltet
11
Zaehler1 = 100 ' Wartezeit für den Puls
12
' ist im Zusammenhang mit dem Waitms
13
' zu sehen
14
Portb.0 = 1 ' und AUsgang auf 1
15
endif
16
endif
17
18
19
if Zaehler1 > 0 then ' läuft der Zaehler für den Schalter 1?
20
Zaehler1 = Zaehler1 - 1 ' Ja, er läuft noch
21
else
22
PortB.0 = 0 ' Nein, Ausgang abschalten
23
endif
24
25
waitms( 10 )
26
loop
(nicht getesteter Code. Aber so in etwa müsste es hinkommen. Weitere
Schalter kannst du nach Belieben nach dem Muster hinzufügen.
Thorsten S. schrieb:> Ihr verwechselt da was...
Hier verwechselt keiner etwas, nur drängt sich die Frage nach der
Entprellung bei der Pulserzeugung aus einem Geber, der viele kleine
Impulse erzeugt, auf.
Ich frage mich, warum hierfür ein uC verwendet werden soll, der dann
auch noch vollzeitmäßig damit beschäftigt ist, wenn es Bauteile für ein
paar Cent (inklusive wenigem Hühnerfutter) genauso gut tun.
Wie ich oben schon schrieb, das ganze sollte 4 mal möglich sein. Und
deine Schaltung 4 mal aufzubauen, wäre vom Platz und Aufwand her nicht
wirklich die beste Lösung ;-)
Geht so. :-)
Dieses Steckboard-Modul invertiert 2 mal, um sowohl positive Impulse als
auch negative ohne Einfluss der Ausgangsimpedanz zu haben. (Siehe
Schaltplan) Du kannst also in Gedanken die beiden 4011 rechts durch
einen ersetzen und Dir die Stecknadeln und die Leiterbahnen dorthin
wegdenken.
Wenn Du die Logik um den LM339 herum umkehrst (ich brauchte halt gerade
negative Impulse, als ich das konzipieret habe) und die Eingangsstufe,
die Deine Impulse erhalten soll recht hochohmig ist (die 4011 sind nur
für die universellere Verwendung auf dem Steckboard), kannst Du Dir den
auch noch sparen.
Wie soll sich das Teil benehmen, wenn der Eingansimpuls kürzer als der
Ausgangsimpuls ist? Oder ist durch andere Randbedingungen
sichergestellt, dass dieser Fall nie eintritt?
Wie lang soll der Ausgangsimpuls sein (us, ms, s, ..., d, a)?
Philipp Klostermann schrieb:> Wenn Du die Logik um den LM339 herum umkehrst ..
Ich habe das mal mit LTSpice durchgespielt, und da macht es einen guten
Eindruck und erzeugt positive Impuse von etwa 6,7 ms Länge, was reichen
sollte. Ansonsten die Kondensatoren entsprechend höher dimensionieren.
Erläuterung:
Die linke Spannungsquelle wird aus einer PWL-Datei gespeist, die die
Aufnahme von einem Tastendruck in negativer Form (also 5V für aus und 0V
für an) repräsentiert. Sie und die Diode repräsentieren einen Taster
gegen GND. (Die Diode ist drin, weil ein Taster gegen GND nicht nach +5V
hochziehen kann.)
Die Schaltung dürfte einen recht weiten Bereich für die
Spannungsversorgungen haben, da nur mit linearen Verhältnissen
(Spannungsteiler, Komperator) gearbeitet wird.
Philipp Klostermann schrieb:> Geht so. :-)> Dieses Steckboard-Modul invertiert 2 mal, um sowohl positive Impulse als> auch negative ohne Einfluss der Ausgangsimpedanz zu haben.
So und nun stell Dir mal vor, dieser ganze Wust an 40 Bauteilen ist weg
und nur ein einziger 14-Pinner MC ist drauf.
Zugegeben, die AVR-Preise sind ganz schön angezogen (ATtiny24: 1,60€),
aber dafür sparst Du ne Menge Layout und Lötzeit ein.
Sobald ein MC mehrere ICs + nen Haufen Hühnerfutter ersetzen kann, mache
ich das auch.
Peter
Peter Dannegger schrieb:> mehrere ICs
Und ich hatte mir so hübsch Mühe gegeben, die Variante für positive
Impulse, die mit nur einem IC für 4 Taster auskommt, auszuarbeiten und
zu dokumentieren.
Peter Dannegger schrieb:> aber dafür sparst Du ne Menge Layout und Lötzeit ein.
Man wird aber vor die Alternative gestellt, entweder eine
SPI-Schnittstelle mit ins Layout integrieren zu müssen, oder den uC
vorher programmieren zu müssen, was mit einem SO-Gehäuse Frickelei mit
dem Lötkolben oder die Investition in eine entsprechende Fassung
bedeutet.
Wenn man das möglichst schnell ohne Rücksicht auf Kosten und
Programmieraufwand realisieren möchte, kann man das gerne mit einem uC
machen. Aber es soll ja auch Spaß machen!
Das Hühnerfutter ist recht großzügig verteilt und lässt sich bestimmt
auch noch etwas zusammenrücken.
Thorsten S. schrieb:> zum Entprellen für Logik habe ich immer einen>> 4093 + kleinen Kondensator und Widerstand bevorzugt.
Wenn es nur um das Entprellen geht, mache ich das auch, bzw. nutze einen
40106, was keinen großen Unterschied macht.
Thorsten S. schrieb:> für längere Zeiten:>> http://www.conrad.de/ce/de/product/170771/IC-SN-74...
Preis auf der genannten Website: € 2,25
Na dann doch lieber einen uC nehmen! :-D ;-)
Philipp Klostermann schrieb:> Peter Dannegger schrieb:>> mehrere ICs>> Und ich hatte mir so hübsch Mühe gegeben, die Variante für positive> Impulse, die mit nur einem IC für 4 Taster auskommt, auszuarbeiten und> zu dokumentieren.
Gewöhn dich daran. Was man früher diskret und mit Hühnerfutter aufgebaut
hat, macht man heute mit einem kleinen µC.
Karl Heinz Buchegger schrieb:> Gewöhn dich daran. Was man früher diskret und mit Hühnerfutter aufgebaut> hat, macht man heute mit einem kleinen µC.
Daran kann ich mich gewöhnen, was ich aber etwas schade finde ist, dass
viele die Analogtechnik auch vom Interesse her vernachlässigen. Mein
Zip-File hat nach 7 Stunden und 5 Beiträgen 0 Downloads, und das spricht
für sich.
Philipp Klostermann schrieb:> nach 7 Stunden und 5 Beiträgen 0 Downloads
Hallo Philip,
obwohl ich diese Simulation vor 20 Minuten heruntergeladen und
ausprobiert habe, so stand soeben noch immer 0 Downloads.
Villeicht geht ja nur der Zähler nicht.
Für meinen Teil würde ich im Übrigen gedanklich zu einem
74xx er Schmitt Trigger Logik-Gatter tendieren,
hab mir aber keine ausführlichen Gedanken gemacht.
MFG:MBP
Markus.
dumme Frage, hat der Tiny keinen Pin-Change Interrupt, wie der Mega8?
Bin grad zu müde das Datenblatt zu suchen.
Aber den kann man doch auf eine Positive Flanke einstellen, wenn ich
mich nicht täusche, zum entprellen müsste man den Pin dann nur aus der
Maske entfernen und fertig.
Sleep sollte auch noch möglich sein.
Markus B. p. schrieb:> Für meinen Teil würde ich im Übrigen gedanklich zu einem> 74xx er Schmitt Trigger Logik-Gatter tendieren,> hab mir aber keine ausführlichen Gedanken gemacht.
So richtig tiefgehende Typenrecherchen von Schmitt-Triggern habe ich
auch noch nicht gemacht, zumal die Angaben der Schwell- und
Schaltspannungen sehr temperaturabhängig ist, so dass ich einfach den
40106 (0,17 SMD bei R.) nehme, wenn es nur darum geht, Tasten zu
entprellen, weil es da nicht so auf präzise definierte Werte ankommt, er
leicht verfügbar ist, und bis zu 15V Versorgungsspannung verträgt. Der
Vorteil der 74er Typen gegenüber den H(F)C4000er Typen ist die
Geschwindigkeit, und die spielt bei manuellen Eingaben jetzt nicht soo
die tragende Rolle. ;-) Der 74HC14 (0,22 SMD bei R.) verträgt 7V Vcc und
damit nur die Hälfte.
Im Fall des Impulsformers ist ein Schmitt-Trigger nicht geeignet, da die
Spannung des Eingangsimpulses für den Schmitt-Trigger nach dem Hochpass
nicht die Einschaltspannung vom 7414 (2,3V - 3,15V bei 4,5V Vcc) oder
vom 40106 (2,2V - 3,6V bei 5V Vcc) erreicht, und man sich mit einem
Komperator und etwas Hühnerfutter einen passenden Schmitt-Trigger selbst
stricken muss. (Oder gibt es so etwas wie "Hex Schmitt Triggers with
commonly adjustable Trigger Voltages and Hysteresis" :-D )
Die Anzahl der Downloads scheint verzögert angezeigt zu werden. Nun
werden 3 Downloads angezeigt.
Philipp Klostermann schrieb:> Die Anzahl der Downloads scheint verzögert angezeigt zu werden. Nun> werden 3 Downloads angezeigt.
Ich war's nicht, denn ich stehe nicht auf Simulationen. Ich stehe auch
nicht darauf, solche Dinge mit Gattergräbern und Hühnerfutter zu
erschlagen, seitdem es bezahlbare AVRs gibt, denn ich mag keine
Platinen, die so kompliziert sind, dass man sie mit einfachen
Bastlermitteln nicht mehr selbst anfertigen kann. Eine Schaltung mit AVR
braucht neben dem ATTiny2313 noch einen Stütz-Kerko an der Versorgung
und einen PullUp-Widerstand am Reset.
Und natürlich etwas Software.
Ich hänge mal zwei Quältexte dafür an, einen in ASM (braucht sehr wenig
Ressourcen) und einen in Bascom (sehr verschwenderisch betreffs
Ressourcen).
Beide unterstützen 8 Kanäle zur Impulsformung, haben eine
Sorglos-Entprellung (gemäß Peter Dannegger) und eine im 16ms-Raster
einstellbare Impulsdauer.
...