Hallo,
ich hab hier eine Schaltung mit einem µC, bei der ich dabei bin die
nachzuvollziehen.
Dabei ist mir die Tasterschaltung aufgefallen:
Pin vom µC auf Schalter -> Schalter direkt auf Masse.
Keine Widerstände oder Kondensatoren irgendwie integriert. Kann das sein
oder hab ich mich vertan? und wie müsste man die Pins vom µC
initialisieren, damit das funktioniert?
Danke
Jupp.
Interne Pullups, Entprellung in Software.
Mit PIC24 geht das hervorragend.
Ich mach noch immer 100n parallel dazu und schau nur auf die positive
Flanke, dann ist das auch noch in Hardware entprellt.
Die meisten MCs haben intern zuschaltbare Pullups.
Ein offener Eingang mit Pullup enabled liest dann High.
Kondensatoren braucht man keine, da das Entprellen mit einem
Timerinterrupt zuverlässiger und bequemer ist.
kann schon gehen, ich aber nicht schön.
viele µCs haben internen einen zuschaltbaren pull-up oder pull.down. ich
benütze dennoch immer noch einen zusätzlichen externen irgendwas um die
10K.
ausserdem sollte man noch ein kleines C zum Schalter legen, sonst prellt
er, aber auch das kann man im µC softwaremäßig abfangen.
asu schrieb:> Keine Widerstände oder Kondensatoren irgendwie integriert. Kann das sein> oder hab ich mich vertan? und wie müsste man die Pins vom µC> initialisieren, damit das funktioniert?> Danke
Ja, wenn der µC einen internen Pullup hat, ist das die
Standardschaltung.
Max H. schrieb:> Gero schrieb:>> ich aber nicht schön.> Wieso nicht?
Weil manche Leute ohne weitere Cs und Rs in einer Schaltung
Schweißausbrüche kriegen und zwanghaft irgendwelche Bauteile dran
basteln müssen. Das sind auch die typen die heute im Jahr 2015 noch
jedem Anfänger erzählen, dass man an den Reset eines AVRs unbedingt ein
C und natürlich einen externen PullUp braucht. DAS WAR SCHON IMMER SO,
wobei immer ihre veraltet schrottige Technik von vor 30 Jahren war.
asu schrieb:> Ich denke da> soll gespart werden wo's nur irgendwie geht...
Es ist sinnvoll, sobald man einen MC verwendet, möglichst viele
Funktionen von der Hardware in die Software zu verlagern.
Weil Software schreibt man nur einmal, aber Hardware muß in jedes
einzelne Gerät mit eingelötet werden.
Nebenbei steigt damit auch die Zuverlässigkeit, da weniger Lötstellen.
Lötstellen sind eine der Hauptausfallursachen in Geräten.
Cyblord ---- schrieb:> Weil manche Leute ohne weitere Cs und Rs in einer Schaltung> Schweißausbrüche kriegen und zwanghaft irgendwelche Bauteile dran> basteln müssen. Das sind auch die typen die heute im Jahr 2015 noch> jedem Anfänger erzählen, dass man an den Reset eines AVRs unbedingt ein> C und natürlich einen externen PullUp braucht. DAS WAR SCHON IMMER SO,> wobei immer ihre veraltet schrottige Technik von vor 30 Jahren war.
Nein.
Privat mag das angehen, nicht aber bei einem Serienprodukt. Selbst da
ist es fragwürdig: bei jeder Berührung des Schalters bekommt der µC
ungeschützt ordentlich eine geballert.
Für Serienprodukte muss man ESD-Tests machen. der µC bekommt die Kriese,
wenn du auf einen solchen Schalter ohne weitere Bauteile draufknallst.
Musst du aber tun, und dann darf da nichts ausfallen. Die
ESD-Schutzbeschaltung im µC braucht oft einen Serienwiderstand, damit
nicht ausfällt.
Mit externen Cs ist außerdem der Softwareoverhead extrem gering. Du
hängst einen Interrupt auf die steigende Flanke, fertig. Mit 100n prellt
das nicht, das ist schnell, einfach und zuverlässig, bei wenigen Zeilen
Code.
Daher hat das mit Angstbauteilen nichts zu tun.
WehOhWeh schrieb:> Selbst da> ist es fragwürdig: bei jeder Berührung des Schalters bekommt der µC> ungeschützt ordentlich eine geballert.
Blödsinn, da stehen am Taster keine Drahtenden raus die der Finger
überbrückt, sondern es gibt einen schönen Plastikknopf und man kommt den
Leitungen nicht näher als dem Rest der Schaltung.
MaWin schrieb:> Blödsinn, da stehen am Taster keine Drahtenden raus die der Finger> überbrückt, sondern es gibt einen schönen Plastikknopf und man kommt den> Leitungen nicht näher als dem Rest der Schaltung.
Fahr mal zum TÜV :-)
8kV AD -> Peng.
Bei mir haben sie mal mit 16,5kV in die Lüftungsschlitze reingeblitzt
für Safety. Da war dann eine "Fangleitung" am Rand der Platine fällig,
weil eine solche Entladung hat der µC nicht überlebt :-)
Dazu: kapazitive Kopplung. Auf einem nacktem Pin hat der "Status" der
Leitung ein "Gewicht" von nur 5-10pF - das wackelt schnell mal herum,
wenn ein Finger mit ein paar 100V in der Nähe vorbeifährt.
Nur hat EMV/ESD mit dieser Thematik gar nichts zu tun. Natürlich muss
man dafür noch Vorkehrungen treffen. Es geht aber um die funktionale
Beschaltung.
MaWin schrieb:> Blödsinn, da stehen am Taster keine Drahtenden raus die der Finger> überbrückt, sondern es gibt einen schönen Plastikknopf und man kommt den> Leitungen nicht näher als dem Rest der Schaltung.
Es reicht eine simple Burst-Messung, um den uC zuverlässig immer
wieder in den Reset zu versetzen.
Für mich gilt automatisch, wenn im Datenblatt steht "internal pullup,
this pin may be left open when not needed", dass dann ein Kondensator
und/oder ein niederohmiger externen Pullup (max 4k7) da dran kommt.
Aber für einen simplen Tastereingang, der sowieso noch von der Software
durchgewaschen wird, reicht so ein interner Pullup allemal...
Cyblord ---- schrieb:> Nur hat EMV/ESD mit dieser Thematik gar nichts zu tun. Natürlich muss> man dafür noch Vorkehrungen treffen. Es geht aber um die funktionale> Beschaltung.
Naja, eine funktionale Beschaltung ist in meinen Augen erst dann
funkional und gegeben, wenn die Schaltung auch wirklich EMV/ESD Sicher
ist.
Ich mache selbst auch EMV-Tests und du würdest Dich wundern was so
mancher Entwicklungsingenieur unter CE-Konform versteht!
Auf dem Arbeitsplatz in einem Entwicklungslabor funktioniert fast jede
Schaltung - gespeist vom wahnsinnig tollen und extrem teuren
Labornetzteil, welches die Ausgangsspannung auf 3 Komastellen genau
regelt.
Sobald die Schzaltung dann aber im KFZ-Boardnetz eines Nutzfahrzeuges
hängt, entstehen die wildesten Quereffekte!
Wenn so ein dicker Diesel mal ein paar Laständerungen erfährt kann man
schön beobachten wer sich bei der Entwicklung Mühe gegeben hat....
Cyblord ---- schrieb:> Das sind auch die typen die heute im Jahr 2015 noch> jedem Anfänger erzählen, dass man an den Reset eines AVRs unbedingt ein> C
"Hilfe, programmieren per ISP geht nur jedes zweiundvierzigstes mal"
Marian B. schrieb:> Cyblord ---- schrieb:>> Das sind auch die typen die heute im Jahr 2015 noch>> jedem Anfänger erzählen, dass man an den Reset eines AVRs unbedingt ein>> C>> "Hilfe, programmieren per ISP geht nur jedes zweiundvierzigstes mal"
Was noch NIEMALS am fehlenden Pullup oder fehlendem C gelegen hat.
Cyblord ---- schrieb:> Marian B. schrieb:>> Cyblord ---- schrieb:>>> Das sind auch die typen die heute im Jahr 2015 noch>>> jedem Anfänger erzählen, dass man an den Reset eines AVRs unbedingt ein>>> C>>>> "Hilfe, programmieren per ISP geht nur jedes zweiundvierzigstes mal">> Was noch NIEMALS am fehlenden Pullup oder fehlendem C gelegen hat.
Stimmt, das passiert auch nur mit C. Wer lesen kann, stellt schnell
fest, dass Atmel seit Jahren sagt: Kein C an /RESET, bittedanke.
Marian B. schrieb:> Cyblord ---- schrieb:>> Marian B. schrieb:>>> Cyblord ---- schrieb:>>>> Das sind auch die typen die heute im Jahr 2015 noch>>>> jedem Anfänger erzählen, dass man an den Reset eines AVRs unbedingt ein>>>> C>>>>>> "Hilfe, programmieren per ISP geht nur jedes zweiundvierzigstes mal">>>> Was noch NIEMALS am fehlenden Pullup oder fehlendem C gelegen hat.>> Stimmt, das passiert auch nur mit C.
Durchaus möglich. Aber das würde ich nun auch nicht unbedingt behaupten.
Aber Atmel hat eine schöne AppNote zu dem Thema. Da drin steht sinngemäß
dass eine Aussenbeschaltung von Reset in sehr störungsbelasteten
Umgebungen sinnvoll sein kann. Es geht da sehr eindeutig hervor, dass es
unter normalen Bedingungen absolut nicht notwendig ist.
Marian B. schrieb:> "Hilfe, programmieren per ISP geht nur jedes zweiundvierzigstes mal"
Bei mir Zuhause habe ich einen solche Fall.
Taster, am PIC, mit internem Pullup - wie es der TP beschrieben hatte.
Nur mit noch 0,5m Kabel dran (ja schon klar, das ist Mist). Das ist ein
Testaufbau mit dem Breadboard, da will man ja nicht soviele Bauteile
draufstecken. Der Taster ist blos ein one-shot-Interrupt, da ist prellen
ja egal.
Anfänglich ging das super ohne jedes Bauteil. Bis ich vor zwei Wochen
einen neue Sessel gekauft habe (Meyer spirit). Seit dem ist das Ding
habe: Mit der Hand das Kabel zwischen µC und Taster berührt -> µC macht
Reset
Taster angefasst -> PICkit3 -> disconnect vom PC
Also aus der Luft gegriffen sind solche Sachen - auch für Bastler -
nicht.
Der Sessel ist allerdings auch wirklich kein gutes Beispiel. Ich bekomme
jedesmal eine gewischt, wenn ich ein geerdetes Metallteil anfasse. Das
kann man sogar bei den amzon-Bewertungen nachlesen ;-)
Werd mir jetzt mal ein ESD-Armband kaufen, weil der Sessel ist wirklich
toll.
Cyblord ---- schrieb:> Aber Atmel hat eine schöne AppNote zu dem Thema. Da drin steht sinngemäß> dass eine Aussenbeschaltung von Reset in sehr störungsbelasteten> Umgebungen sinnvoll sein kann.
100 nF am /Reset sollte jeder ISP-Prommer verkraften. 3k3 Pullup sind
bei mir immer vorhanden.
Auch einen Ein-Aus-Taster an einem Interrupt-Pin anzuschließen, ist eine
zuverlässige Methode der Entprellung, auch wenn die meisten Leute mit
dieser genialen Schaltung überfordert sind: 10 kOhm liegen in Reihe zum
Taster und 100 nF direkt am Eingangspin.
Auch bei Gewitter läuft Alles bestens ;-)
m.n. schrieb:> auch wenn die meisten Leute mit> dieser genialen Schaltung überfordert sind: 10 kOhm liegen in Reihe zum> Taster und 100 nF direkt am Eingangspin.
Überfordert nicht, aber es dauert mir einfach viel zu lange, im
Schaltplan 2 Bauteile hinzuzufügen, im PCB diese zu plazieren und zu
routen, sie zu kaufen und einzulöten und das auch noch je Taster, also
16 unnötige Bauteile für 8 Taster.
In der Zeit hab ich längst die Entprell-Lib per Drag&Drop dem Build
hinzugefügt und damit 8 Tasten auf einen Schlag abgehandelt,
Zusatzfunktionen (lang/kurz/repeat/doppeldruck usw.) inklusive.
Du kannst Leuten keinen Vorwurf daraus machen, daß sie mit ihrer
Arbeitszeit ökonomisch umgehen.
Peter Dannegger schrieb:> Du kannst Leuten keinen Vorwurf daraus machen, daß sie mit ihrer> Arbeitszeit ökonomisch umgehen.
Selber Schuld, wenn Du aus einem Taster nun acht machst.
Bedarfsgerecht geht anders.
WehOhWeh schrieb:> Der Sessel ist allerdings auch wirklich kein gutes Beispiel. Ich bekomme> jedesmal eine gewischt, wenn ich ein geerdetes Metallteil anfasse. Das> kann man sogar bei den amzon-Bewertungen nachlesen ;-)>> Werd mir jetzt mal ein ESD-Armband kaufen, weil der Sessel ist wirklich> toll.
M.W. gibt es da Abhilfe aus speziellen Spühdosen.
m.n. schrieb:> Selber Schuld, wenn Du aus einem Taster nun acht machst.> Bedarfsgerecht geht anders.
Doch meine Routine ist bedarfsgerecht. Die benötigten Ressourcen sind
minimal. Daher lohnt es sich nicht, eine extra Routine für nur eine
Taste zu schreiben.
Sie entprellt immer einen ganzen Port, also je nach Architektur 8, 16
oder 32 Pins parallel (Vertical Counter Prinzip).
Beim Programmieren versucht man, Routinen möglichst flexibel zu
gestalten, um nicht für jede kleine Änderung nochmal neu programmieren
zu müssen.
> Beim Programmieren versucht man, Routinen möglichst flexibel zu> gestalten, um nicht für jede kleine Änderung nochmal neu programmieren> zu müssen.
Da gibt es aber durchaus auch andere Lehrmeinungen. Nämlich das genaue
Gegenteil. Entwickeln einer Routine genau auf den Punkt, keine unnötige
Flexibilität/Funktionalität auf Vorrat, etc. Und genau dann umschreiben,
wenn es benötigt wird. Siehe "agile development" oder "extreme
programming".
Gerhard schrieb:> Siehe "agile development" oder "extreme programming".
Das hört sich für mich wie "Hinbasteln" und "Consulting" an. Unsere
Intelligenztest-Abteilung (IT) kennt diese Entwicklungsstrategien
offenbar auch...
Ja, die Begriffe hören sich wirklich dämlich an. Die Prinzipien dahinter
sind aber durchaus solide, da direkt aus dem üblichen Scheitern von
Software-Großprojekten abgeleitet.
Ich entwickele sicherheitsrelevante Software für die Luftfahrt. Da ist
der Flexibilitätsansatz ("von Anfang an für alle Eventualitäten in der
Zukunft entwickeln") aus einleuchtenden Gründen ebenfalls verpöhnt.
Agil bedeutet eigentlich "flexibel auf geänderte Situation reagieren".
Das ist das genau Gegenteil von "exakt auf den Punkt programmiert". Ich
habe allerdings im Job oft den Verdacht, daß die Hype-Word Blubberer die
essentiellen Dinge einer Methodig gar nicht erfassen.
Ich hatte zuerst auch Entprellroutinen für 1 bzw. 2 Tasten. Da sie aber
keinerlei Vorteile hatten, habe ich sie wieder gelöscht.
Mit "von Anfang an für alle Eventualitäten in der Zukunft entwickeln"
hat das überhaupt nichts zu tun.
Es geht einfach nur um die Nachnutzung in weiteren Projekten. Wenn man
einmal entwickelte Routinen nachnutzen kann, erhöht das auch die
Zuverlässigkeit.
> Agil bedeutet eigentlich "flexibel auf geänderte Situation reagieren".> Das ist das genau Gegenteil von "exakt auf den Punkt programmiert".
Agil als Wort bedeutet erstmal nur "beweglich". "Agile Programming"
dagegen ist eine in zahlreichen Werken exakt definierte Methodik mit
genau umrissenen Bestandteilen. Ich habe im Moment nicht den Eindruck,
dass du dich damit schonmal beschäftigt hättest. Das wäre aber gut,
bevor man (falsche) Behauptungen aufstellt. Die Bedeutung eines aus dem
lateinischen entlehnten Wortes zu kennen bedeutet nicht automatisch sich
mit allem auszukennen, was mit diesem Wort passend (oder weniger
passend) bezeichnet wird.
In der agilen Programmierung wird genau auf die Anforderung hin
programmiert, ohne für zukünftige Erweiterungen auf Vorrat zu coden oder
eine Funktion universaler zu machen, als sie aktuell sein muss. Die
Anforderungen dagegen können sich im Laufe des Projektes ständig ändern
("agile"), so dass Programmbestandteile immer wieder mal umgeschrieben
werden müssen ("refactoring").
Im "test driven development" wird erst der unit test geschrieben, der
genau die (aktuellen) Anforderungen darstellt. Die eigentliche Funktion
wird dann nach und nach so geschrieben, dass sie genau die Anforderungen
erfüllt und nicht mehr. Das meine ich mit "auf den Punkt programmiert".
Praxisbeispiel: Ein High-Side-Switch mit Fehlerrückmeldung soll
angesteuert werden und die Fehlerbedingungen ausgewertet werden (evtl.
nach kleiner Zeitverzögerung). Das würde ich zunächst mal hardcodiert
für genau die vorgesehene MCU und die verwendeten GPIOs implementieren.
Natürlich wäre die Versuchung groß, eine universelle Routine zu
implementieren, die ich in eine Lib packe für spätere Verwendung ("sowas
kann man doch immer mal gebrauchen"). Das ist aber bei der agilen
Programmierung gerade verboten, weil es von der eigentlichen Aufgabe
ablenkt und jeder zusätzliche Funktionsparameter und Variable wieder
neue Fehlerquellen einführt.
Erst in dem Moment, wo ich im gleichen Projekt für einen zweiten Pin
genau die gleiche oder eine sehr ähnliche Funktionalität brauche, macht
man sich Gedanken über die Wiederverwendung. Man denkt auch sehr genau
drüber nach, ob man die vorhandene Funktion universeller gestaltet und
von zwei verschiedenen Stellen aus aufruft, oder ob man eine neue
Funktion schreibt.
> Ich> habe allerdings im Job oft den Verdacht, daß die Hype-Word Blubberer die> essentiellen Dinge einer Methodig gar nicht erfassen.
q.e.d.
Lies mal den Wikipedia-Artikel
http://de.wikipedia.org/wiki/Agile_Softwareentwicklung
Nur weil etwas nach Hype Word klingt, ist es nicht automatisch schlecht.
Nicht jeder, der einen nun mal verbreiteten dämlichen Begriff für etwas
verwendet, ist ein Blubberer.
Irgendwo stand was von 100n parallel zum Taster - das ist ein sehr
zuverlässiger Weg, heute übliche Taster nach nur wenigen Hundert
Betätigungen zu killen.
Wer meint, den Kondensator zu brauchen, sollte auch nicht zu geizig
sein, auch noch einen zusätzlichen Widerstand zu spendieren, der den
Entladestrom begrenzt.
Gerhard schrieb:> Nur weil etwas nach Hype Word klingt, ist es nicht automatisch schlecht.
Manchmal richtig, leider nur manchmal.
> Nicht jeder, der einen nun mal verbreiteten dämlichen Begriff für etwas> verwendet, ist ein Blubberer.
Er klingt aber immer noch so. ;-)
H.Joachim Seifert schrieb:> Irgendwo stand was von 100n parallel zum Taster - das ist ein sehr> zuverlässiger Weg, heute übliche Taster nach nur wenigen Hundert> Betätigungen zu killen.> Wer meint, den Kondensator zu brauchen, sollte auch nicht zu geizig> sein, auch noch einen zusätzlichen Widerstand zu spendieren, der den> Entladestrom begrenzt.
Da allerdings kommt dann oft der Geiz, aehhhhhh.. ich meine die
"resourcenschonende Entwicklung" durch und der Widerstand wird
weggelassen.
wendelsberg
@gerhard:
Und worin liegt bitte die Agilität eine Entprellroutine, die von Haus
aus 8 Eingänge kann, auf einen einzuschrumpfen, weil man gerade nicht
mehr braucht. Und Bein 2. Projekt darf ich's dann universeller machen,
weil ich dann gemerkt hab, das ich's nochmal brauch. Diese Logik
funktioniert leider nur bei Grünschnäbeln, denn mein 2. Projekt war im
letzten Jahrtausend. Komisch nur das so gesteuerte Projekte gern mal an
an Problemen sterben, die die alten Deppen schon anfangs kannten, aber
aufgrund von "vergeßt mal alles was ihr über 'so macht man das am
Besten' wisst" gar nicht wichtig waren.
Manchmal muß man nämlich nicht bei Null anfangen. Z.B. Wenn man Fehler
kein 2.Mal machen möchte.
Der Wiki-Artikel enthalt im übrigen für mich nur minimale Spuren dessen,
was du da herausgelesen haben willst. Die Hauptrichtung ist meine!
Hallo Peter,
Peter Dannegger schrieb:> Ich hatte zuerst auch Entprellroutinen für 1 bzw. 2 Tasten. Da sie aber> keinerlei Vorteile hatten, habe ich sie wieder gelöscht.>> Mit "von Anfang an für alle Eventualitäten in der Zukunft entwickeln"> hat das überhaupt nichts zu tun.>> Es geht einfach nur um die Nachnutzung in weiteren Projekten. Wenn man> einmal entwickelte Routinen nachnutzen kann, erhöht das auch die> Zuverlässigkeit.
Kurz gesagt: dabei geht es um Skalierbarkeit, nicht um Funktionalität.
Der Gerhard sollte mal Deinen Code lesen!
Liebe Grüße,
Karl
Gerhard schrieb:> Praxisbeispiel: Ein High-Side-Switch mit Fehlerrückmeldung soll> angesteuert werden und die Fehlerbedingungen ausgewertet werden (evtl.> nach kleiner Zeitverzögerung). Das würde ich zunächst mal hardcodiert> für genau die vorgesehene MCU und die verwendeten GPIOs implementieren.
Und ich würde es genauso machen und das dann als Funktionsmodell
bezeichnen. Nur würde ich schon dieses Funktionsmodell /sicherlich/(!)
anders programmieren, als einer, der gerade sein EVA Prinzip an der
Schule gelernt hat. Mein Programm wäre von vorn herein so ausgelegt,
dass es möglichst wenig Ressourcen (Zeit und Interrupts) braucht, und
dass es weiterverwendbar ist.
> Natürlich wäre die Versuchung groß, eine universelle Routine zu> implementieren, die ich in eine Lib packe für spätere Verwendung ("sowas> kann man doch immer mal gebrauchen"). Das ist aber bei der agilen> Programmierung gerade verboten, weil es von der eigentlichen Aufgabe> ablenkt und jeder zusätzliche Funktionsparameter und Variable wieder> neue Fehlerquellen einführt.
Diesen Schritt mache ich aucht. Ich stelle etwas für einen bestimmten
Prozessor fertig, weiß aber da schon ganz genau, dass ich diesen Code
auf einem anderen weiter verwenden könnte.
> Erst in dem Moment, wo ich im gleichen Projekt für einen zweiten Pin> genau die gleiche oder eine sehr ähnliche Funktionalität brauche, macht> man sich Gedanken über die Wiederverwendung.
Und genau hier unterscheidet sich der Anfänger vom Profi. Deshalb wird
bei dieser agilen Programmierung bei Anfängern nur Schrott rauskommen,
weil alles nur so hingebastelt und nicht von vorn herein mitgedacht
wird. Horden von _delax_ms() und while(busy); zeugen davon.
Und ich traue mich auch, ein Konzept, das zu 90% "fertig" ist,
wegzuwerfen, weil der Ansatz schlecht und unbrauchbar war. Ein Anfänger
verbeißt sich dann und sagt "Ich bin doch fast fertig!"...
Ergo: diese "agile Programmierung" wurde m.E. von einem Profi erfunden,
der von sich aus nicht mehr in jeder Sackgasse bis ans Ende läuft. Und
sie wird von Anfängern als Schutzbehauptung für vermurkste Konzepte
verwendet...
Richtig agil wird's hält, wenn nicht jede kleine Änderung, "wir brauchen
noch eine 2.Taste", das ganz Konzept über den Haufen wirft. Zudem wäre,
nach Gerhard, und bis zu Ende gedacht, jede Standard-Lib verboten, den
sie beinhaltet immer Dinge, die das aktuelle Projekttarget nicht
braucht.
Ich arbeite im Moment in eine SCRUM-Projekt und kann der Methode einiges
abgewinnen. Nur hab ich das mit Kollegen schon vor 22 Jahren so gemacht.
Wir wußten nur nicht wie das heißt. Alle diese Methoden sich der
Versuch, zu formalisieren wie erfolgreiche Leute Projekt angehen. Das
ist im Prinzip gut, aber das Anwenden der Formalismen ist kein
Erfolgsgarant. Und es besteht die Gefahr mittel Konzentration auf die
Methode die wahren Gründe für's Gelingen zu übersehen.
@Lothar:
Zum Thema Schutzbehauptung: exakt!
H.Joachim Seifert schrieb:> Irgendwo stand was von 100n parallel zum Taster - das ist ein sehr> zuverlässiger Weg, heute übliche Taster nach nur wenigen Hundert> Betätigungen zu killen.
Das sieht die Kontaktschweißerfraktion aber ganz anders. Diese fordert
nämlich für jeden Kontakt einen Mindeststrom, der jeden Dreck gleich
wegbrennt.
Vielleicht sind 100nF sogar noch zu wenig? ;-)
Peter Dannegger schrieb:> Es geht einfach nur um die Nachnutzung in weiteren Projekten. Wenn man> einmal entwickelte Routinen nachnutzen kann, erhöht das auch die> Zuverlässigkeit.
Wenn es darum geht, nehme ich keine Routine die einen kompletten Port
eines µC benötigt, zumal ja nie garantiert ist, daß er frei zur
Verfügung steht. Schon beim AVR sind speziell benötigte Pins in diverse
Ports 'eingestreut' und nicht anders nutzbar.
Beim STM32 ist die Situation noch schlimmer. Eine 'Nachnutzung' bleibt
ein Traum.
Da sind dann Schieberegister die bessere Wahl. Ob 8 oder 64 Taster, man
kann beliebig skalieren und dafür auch einen ATtiny85 verwenden.
> Wenn es darum geht, nehme ich keine Routine die einen kompletten Port
eines µC benötigt
Benötigt? Vielleicht ist "Einsammel von bis zu 8 Portbits" und
"Entprellen von bis zu 8 Bits" nicht das Gleiche. Wenn man die
Bausteine, die man zusammensetzen will, nicht richtig dimensioniert,
dann wird das nichts. Der Eingangswert für PeDa's Entprellung kann
direkt von PINx kommen, muß es aber nicht. Man darf auch einzelne Bits
von PINA..PINH in das eine Byte Eingangswert sammeln, z.B. wenn man die
Hardware nicht Software-optimiert hat. Und wenn man ganz dreist ist: die
Entprellung als C++-Template mit Typen größer 8Bit machen. Oder mehrere
Instanzen für jeweils bis zu 8Bit. Programmieren ist auch ein kreativer
Akt. Nur ist nicht jeder Künstler.
m.n. schrieb:> Wenn es darum geht, nehme ich keine Routine die einen kompletten Port> eines µC benötigt
Seit wann blockieren Lesezugriffe einen ganzen Port?
Es gibt nur wenige IO-Register, wo ein Lesezugriff Seiteneffekte hat,
z.B. eine gepufferte UART. Die Portregister gehören nicht dazu, die kann
jeder lesen, wie er lustig ist.
Natürlich ist es selten sinnvoll, die Ereignisbits der Entprell-Lib für
einen Pin auszuwerten, an dem gar keine Taste hängt und der vielleicht
ADC-Input, PWM-Output oder sonstwas ist.
Die Ereignisbits werden eben für alle Portpins bereitgestellt, weil das
kein Mehraufwand ist, ob nur für einen Pin oder 8 Pins.
m.n. schrieb:> H.Joachim Seifert schrieb:>> Irgendwo stand was von 100n parallel zum Taster - das ist ein sehr>> zuverlässiger Weg, heute übliche Taster nach nur wenigen Hundert>> Betätigungen zu killen.>> Das sieht die Kontaktschweißerfraktion aber ganz anders. Diese fordert> nämlich für jeden Kontakt einen Mindeststrom, der jeden Dreck gleich> wegbrennt.> Vielleicht sind 100nF sogar noch zu wenig? ;-)
Naja. Bei 3.3V sind in dem Kondensator stolze 540nJ drin. Wieviel Metall
man wohl damit verbrennen kann?
Wird der Kontakt sich in hell leuchtendes, 7000Grad heißes Plasma
auflösen? Oder wird das Plastikgehäuse durch geschmolzene Metalltropfen
durchlöchert?
Ich bezweifle, dass das bei so kleinen Spannungen und Energieen den
Kontakt wirklich beschädigen können.
Bei einem kurzen Versuch heute (ca. 100 Schaltvorgänge) hat der Taster
auf meinem Steckbrett alle Schaltvorgänge mit 3,3V / 1µ (Kerko)
überlebt. Auf mehr habe ich gerade keine Lust.
Genaures dazu wäre es aber schon interessant. Vielleicht kennt wer eine
Appnote dazu?
Disclaimer : Natürlich ist ein Serienwiderstand zum Taster sinnvoll! Das
will damit auch ich gar nicht bestreiten.
Peter Dannegger schrieb:> m.n. schrieb:>> Wenn es darum geht, nehme ich keine Routine die einen kompletten Port>> eines µC benötigt>> Seit wann blockieren Lesezugriffe einen ganzen Port?
Seit wann ist ein 'kompletter' Port ein 'blockierter' Port?
Wer redet denn hier von Seiteneffekten?
Ich dachte, ich hätte mich verständlich ausgedrückt - guten Willen
vorausgesetzt.
WehOhWeh schrieb:> Natürlich ist ein Serienwiderstand zum Taster sinnvoll! Das> will damit auch ich gar nicht bestreiten.
Bau ihn einfach ein und dann ist es gut.
m.n. schrieb:> Peter Dannegger schrieb:>> m.n. schrieb:>>> Wenn es darum geht, nehme ich keine Routine die einen kompletten Port>>> eines µC benötigt>>>> Seit wann blockieren Lesezugriffe einen ganzen Port?>> Seit wann ist ein 'kompletter' Port ein 'blockierter' Port?
Was sollte Deine Formulierung denn sonst bedeuten?
Daher habe ich richtig gestellt, daß sie nicht "einen kompletten Port
benötigt", also die Pins, an denen keine Taster sind.
Sie kann aber auch auf Tasten arbeiten, die z.B. über den ADC, I2C oder
SPI eingelesen werden.