Hallo zusammen,
ich habe folgendes Problem, ich möchte die Temperatur des 18B20 Sensors
auf eine 3 Stelligen 7 Segmentanzeige bringen.
Die 7 Segmentanzeigen habe ich über Transistoren gemultiplext, der Code
ist in C geschrieben und funktioniert auch soweit.
Da ich die Segmente multiplexe, wird die Anzeige-Funktion in der main
Funktion als ständige Schleife aufgerufen, hole ich mir jetzt den neuen
Temperaturwert, muss ich in der Temperatur Funktion ca. 800ms auf das
Ergebnis warten (delay). Genau in dieser Zeit kann ich das Display nicht
mehr ansteuern, weil halt gewartet werden muss.
Was könnte ich tun, damit mir die Temperatur kontinuierlich angezeigt
wird?
Gruß,
Sascha
Hi,
Interrupt sagt mir was aber ich muss doch trotzdem auf das
Wandlungsergebnis warten, wie soll ich in dieser Zeit die Anzeige
weiterhin multiplexen?
Sacha
Ich würde auch wenn das Int die delay-Funktion unterbricht das delay
auch über Int realisieren.
Ich denke als Grundlage würde ich einen 10ms Timer Interrupt laufen
lassen und darin alles weitere zyklisch aufrufen.
Sascha schrieb:> Hi,> Interrupt sagt mir was aber ich muss doch trotzdem auf das> Wandlungsergebnis warten, wie soll ich in dieser Zeit die Anzeige> weiterhin multiplexen?
So wie immmer.
Eine Anzeige, und ganz besonders eine 7-Segment Anzeige wird ein einem
Timer-Interrupt gemultiplext.
Es gibt zig- wenn nicht gar hunderte Threads hier im Forum zum Thema
7-Seg-Multiplexing.
AVR-Tutorial: 7-Segment-Anzeige
Sascha schrieb:> Hallo,> okay, werde mal gezielt nach Timer-Interrupt suchen, der Link ist> interessant aber der Code leider in Assembler geschrieben.
das Prinzip ist aber dasselbe
FAQ: Timer
Man braucht keinen Interrupt, im Gegenteil, man hat mit der Schleife zum
Multiplexen einen fertigen Zeitgeber. Angenommen die läuft jede
Millisekunde und schaltet dabei suf das nächste Digit, dass wird dben
nach Durchlauf 1 der 18B20 angesprochen eine Wandlung zu starten und das
Ergebnis nach Durchlauf 900 abgeholt. Man kann die Arbeit noch in
weitere Durchläufe aufteilen, in 901 wird der Messwert umgerechnet und
nach 950 ein Reset gemacht, oder so.
MaWin schrieb:> Man braucht keinen Interrupt, im Gegenteil,
Ja sicher kann man sich das Leben auch unnötig schwer machen.
Ich für meine Person hab gerne die Kontrolle über das Timing, beim
multiplexen.
Es nervt mich einfach wenn mir jede Programmänderung diese durcheinander
würfelt :)
Das schöne an interrupts ist, das man das Multiplexing im Hintergrund
laufen hat und man sich nur noch um die Aufbereitung der Daten kümmern
muss.
Die Timer-Interrupt-Routine ließt nur noch die bereits für 7-Segment
dekodierten Daten und gibt sie an den Port.
Dein Hauptprogramm wandelt die Daten dann entsprechend um und schreibt
die 7-Segmentdaten in die Übergabevariable.
Diese kann im RAM liegen. Ich glaube das Tutorial hier beschreibt dies.
Über diesen weg ist das Multiplexing schnell genug um auch 6 Stellen zu
realisieren.
Und versuche die "delay" Funktion zu vergessen.
Am besten nur nutzen wenn es unbedingt nötig ist.
MaWin schrieb:> Man braucht keinen Interrupt, im Gegenteil
Was soll das Gegenteil denn sein?
Jeder MC-Hersteller baut eine Interruptlogik ein, um dem Programmierer
die Arbeit zu erleichtern.
Und es ist eine erhebliche Erleichterung, wenn man Routinen
programmieren kann, die sich nicht gegenseitig beeinflussen.
Code muß wartbar und erweiterbar sein.
Der Verzicht auf Interrupts bringt genau 0,nix.
Netürlich kann man eingefleischte Masochisten nicht missionieren. Ich
hätte an deren Stelle jedoch ein schlechtes Gewissen, weil sie
Arbeitszeit verschwenden, ihrem Arbeitgeber also bares Geld stehlen.
Peter Dannegger schrieb:> Jeder MC-Hersteller baut eine Interruptlogik ein, um dem Programmierer> die Arbeit zu erleichtern.
Wer hat eigentlich mal den Interrupt erfunden? Gab es den auch
schon im 4004?
Gruss
Harald
> Der Verzicht auf Interrupts bringt genau 0,nix.
Aber sicher doch,
er verbessert die Übersicht,
und erspart den Overhead der Initialisierung.
Es gibt viele Beispiele, in denen ein Code
durch den Verzicht auf Interrupts einfacher wird,
und Beispiele, bei denen Interrupts nicht (mehr)
funktionieren, weil der Entwickler den Überblick
verloren hat und beispielsweise die Interruptroutine
länger dauert als der Zeitschlitz und der
Programmierer sich wundert warum das Hauptprogramm
nicht mehr ausgeführt wird.
MaWin schrieb:>> Der Verzicht auf Interrupts bringt genau 0,nix.>> Aber sicher doch,> er verbessert die Übersicht,
wo genau?
Wenn das Multiplexing im Timer-Interrupt liegt, dann ist es genau an
einer Stelle zentralisiert. Und die 5 Zeilen Code, die dafür notwendig
sind, sind überschaubar.
Der restliche Programmcode hat ausser der Timerinitialisierung genau
nichts mehr mit dem Multiplexing zu tun. Für den existiert einfach nur
ein Display-Ram, in welches er die auszugebenden Zeichen reinstellt.
> und erspart den Overhead der Initialisierung.
Ja, klar. Die 3 Zeilen Code sind ja auch die Welt.
Ausserdem hilft es ihm sowieso nichts. Timer sind seine Arbeitspferde.
Damit umgehen zu können, ist Basisfertigkeit.
> Programmierer sich wundert warum das Hauptprogramm> nicht mehr ausgeführt wird.
Man kann für alles extreme Gegenbeispiele finden bzw. konstruieren. Ein
simpler Millisekunden-Timer-Interrupt für zb Multiplexing gehört da aber
sicher nicht dazu.
MaWin schrieb:> Aber sicher doch,> er verbessert die Übersicht,> und erspart den Overhead der Initialisierung.
Was ist das für ein Unfug?
Man verhindert doch eher Spagetti-Code.
MaWin schrieb:> Es gibt viele Beispiele, in denen ein Code> durch den Verzicht auf Interrupts einfacher wird,
Dann zeig mal eins!
MaWin schrieb:> und Beispiele, bei denen Interrupts nicht (mehr)> funktionieren, weil der Entwickler den Überblick> verloren hat und beispielsweise die Interruptroutine> länger dauert als der Zeitschlitz und der> Programmierer sich wundert warum das Hauptprogramm> nicht mehr ausgeführt wird.
Es soll sogar Programmierer geben, die wissen, was sie tun.
Harry
Hallo und erstmal Danke für die vielen Antworten.
Ich versuche auf jeden Fall den Timer Interrupt zu verwenden. Da ich das
Arduino Board UNO für die Steuerung benutze, habe ich das Gefühl, dass
der Timer Interrupt nur sehr spärlich beschrieben wird, oft werden
beispiele zu den 2 externen Interruppt's aufgeführt.
Kennt jemand eine (wenn möglich deutsche) Anleitung dazu?
Gruß,
Sascha
MaWin schrieb:> Anzeige von 8 Ziffern auf 7-Segment mit Multiplex,> 8 entprellte Tasten zählen auf Tastendruck je eine Ziffer hoch
Nur mal aus Interesse: ist das ernst gemeint?
Und jetzt baust du in deine Funktion noch ein:
3 LED, wobei du mit 3 Tasten einen Zeitpreset von sagen wir mal 2
Minuten, 4 Minuten und 9 Minuten vorgibst, dann mit 3 anderen Tasten
diesen Preset einer LED zuweist und mit der letzten Taste die Zeit
loslaufen lässt. Und das natürlich alles gleichzeitig. D.h. während für
eine LED die Sekunden laufen, kann der Benutzer die Vorgabe für eine
andere LED einstellen. Und wenn keine Preset-Taste zuvor gedrückt wurde,
dann soll ein Druck auf die LED-Taste die noch verbleibende Zeit
anzeigen. (das die Zeiten einigermassen genau sein sollten, brauch ich
wohl nicht zu erwähnen)
Wie gesagt: man kann alles entweder so sehr vereinfachen, dass es nicht
mehr nützlich ist, oder wenn man auf das Gegenteil aus ist, so sehr
verkomplizieren, dass man den Wald vor lauter Bäumen nicht sieht.
Hab ich das Multiplexing im Timer-Interrupt, dann hab ich das erst mal
weg. Im restlichen Programm interessiert mich das Multiplexing schon gar
nicht mehr. Das läuft einfach durch. Ständig. Ohne dass ich mich darum
kümmern muss. Und ohne dass ich auf delays oder dergleichen aufpassen
muss. Ist die Timer-ISR kurz (wie sie es im Falle einer Multiplex-ISR
ist), dann brauch ich das beim Auslesen des DS noch nicht mal
berücksichtigen. Denn die verlangsamt mir die _delay_us praktisch
gesehen nicht wesentlich und die Zeitvorgaben, die beim DS einzuhalten
sind, haben genug Spielraum, dass mich das nicht kratzen muss, wenn ab
und zu mal 1 Interrupt dazwischen kommt und ein paar µs stiehlt.
Karl Heinz Buchegger schrieb:> Hab ich das Multiplexing im Timer-Interrupt, dann hab ich das erst mal> weg.
Ich bau mir da ein "Time-Management" auf. Hält die Int-Routinen klein
und die Übersicht groß, ist sehr flexibel und eine Art "Multitasking"
lässt sich damit auch realisieren.
Teo Derix schrieb:> Karl Heinz Buchegger schrieb:>> Hab ich das Multiplexing im Timer-Interrupt, dann hab ich das erst mal>> weg.>> Ich bau mir da ein "Time-Management" auf. Hält die Int-Routinen klein> und die Übersicht groß, ist sehr flexibel und eine Art "Multitasking"> lässt sich damit auch realisieren.
Machen wir alle.
Sobald irgendwelche Zeitsteuerungen ab Millisekunden aufwärts im Spiel
sind, vor allen Dingen wenn es sich um regelmässig Zeitsachen handelt,
sind Timer das Mittel der Wahl. Diese ganzen delay Sachen zeigen ein ums
andere mal, dass sie selten die Lösung, aber oft das Problem darstellen.
Karl Heinz Buchegger schrieb:> Machen wir alle.
Wie man sehen kann, leider nicht :(
Das Du das so gemeint hat habe ich mir schon gedacht, kam aber in Deiner
Beschreibung anders rüber.
EDIT:
Sorry Heinz, hab Deinen Beitrag nicht mit der nötigen Sorgfalt gelesen
:(
> 3 LED, wobei du mit 3 Tasten einen Zeitpreset von sagen wir mal 2> Minuten, 4 Minuten und 9 Minuten vorgibst.
Typische Programmbeschreibung eines Laien: Unvollständig und
widersprüchlich.
Du bist an der Reihe ein funktionsgleiches Beispiel für
Interrupt-Programmcode ohne Overhead zu liefern, und nicht neue
Forderungen zu erstellen.
Aber klar: Wer nicht liefern kann, weil dann rauskommen würde welchen
Humbug er geschrieben hat, der versucht es mit ständig neuen
Forderungen.
Nichts demaskiert dein Nichtskönnen deutlicher.
MaWin schrieb:>> 3 LED, wobei du mit 3 Tasten einen Zeitpreset von sagen wir mal 2>> Minuten, 4 Minuten und 9 Minuten vorgibst.>> Typische Programmbeschreibung eines Laien: Unvollständig und> widersprüchlich.>> Du bist an der Reihe ein funktionsgleiches Beispiel für> Interrupt-Programmcode ohne Overhead zu liefern, und nicht neue> Forderungen zu erstellen.
Hör mal zu, du Software-Kasperl.
In Hardware hast du ja eine Menge los, das bestreite ich nicht.
Aber in dem Moment in dem in deinem Programm ein _delay_ms(10) als
wesentliches Element vorkommt, diskutiere ich das nicht mehr weiter.
Ich denke, ich hab genug Leuten hier im Forum in den letzten Jahren ihre
Multiplexroutinen geschrieben und vorgekaut, so dass ich nicht in der
Pflicht stehe eine fachgerechte Lösung präsentieren zu müssen.
Diese ganze Diskussion ist genauso lächerlich, wie (an anderen Stellen)
die immer gleichen Diskussionen Software- versus Hardwareentprellung von
Tasten.
Du meinst, nicht in der Pflicht zu stehen, und lässt im selben Atemzug
die Aufforderung "Und jetzt baust du in deine Funktion noch ein:" raus.
> diskutiere ich das nicht mehr weiter
Logisch, von dir kommt nichts, weil du es nicht kannst, weil du nicht
belegen kannst, daß eine Lösung mit Interrupts hier der Bringer wäre.
MaWin schrieb:> Logisch, von dir kommt nichts, weil du es nicht kannst, weil du nicht> belegen kannst, daß eine Lösung mit Interrupts hier der Bringer wäre.
Ah geh bitte, MaWan.
Sowas schreib ich dir um 3 Uhr in der Früh, kurz bevor ich mit
Vollrausch schlafen gehe. Genauso wie du in diesem Zustand Hardware
immer noch korrekt entwerfen kannst.
So schwer ist ein
1
ISR(...)
2
{
3
PORTC=0;
4
digit=(digit+1)&7;
5
PORTD=segmentabbild[ziffer[digit]];
6
PORTC=1<<digit;
7
}
dann auch wieder nicht. (Und da hab ich dann auch gleich noch das
Ghosting eliminiert, das in deiner Lösung drinnen war)
Du überschätzt den Schwierigkeitsgrad, für den ich noch saubere Lösungen
aus dem Armel schüttle aber ganz gewaltig.
Nciht vergessen: ich hab dir ein paar Millionen Lines of Code vorraus.
> dann auch wieder nicht.
Du meinst, wenn man alles weglässt, was den Unterschied ausmacht, den
Overhead, die Unübersichtlichkeit, den zusätzlichen nötigen Code.
Klar ist das einfach, wenn du ausschliesslich Zeilen aus meiner Lösung
übernimmst, und dann behauptest, das wäre nun die andere Lösung, den
Rest könne man sich dazudenken.
Du solltest dann aber auch klar sagen, daß du es nicht besser machen
kannst.
> Du überschätzt den Schwierigkeitsgrad, für den ich noch saubere Lösungen> aus dem Armel schüttle aber ganz gewaltig.
Offensichtlich nicht mal der einfachste.
> ich hab dir ein paar Millionen Lines of Code vorraus.
Unwahrscheinlich.
Obwohl ich dazu neige, Programme nur 10% so lang zu machen wie andere
Leute, weil ich den Overhead weglasse.
MaWin schrieb:> Unwahrscheinlich.> Obwohl ich dazu neige, Programme nur 10% so lang zu machen wie andere> Leute, weil ich den Overhead weglasse.
Seit wann ist unlesbarer, schlecht wart- und erweiterbarer Code ein
Qualitätsmerkmal?
Dein Beispiel erinnert mehr an die ersten Gehversuche eines 12-jährigen
in der Welt der Computer.
Daß die Länge und Übersichtlichkeit eines Quelltext mit der Größe und
Effizienz des Code den der Compiler generiert nichts zu tun hat, sollte
sich selbst bei dir inzwischen herumgesprochen haben.
Die Tatsache, daß du dich hinter einem anonymen Gast-Account versteckst,
der es dir erlaubt, hier herumzupöbeln, degradiert dich in meinen Augen
zu einem Troll.
http://de.wikipedia.org/wiki/Troll_(Netzkultur)
MaWin schrieb:> Du meinst, wenn man alles weglässt, was den Unterschied ausmacht, den> Overhead, die Unübersichtlichkeit, den zusätzlichen nötigen Code.Karl Heinz Buchegger schrieb:
Der übliche Kram den man und Du auch zum Initialisieren braucht.
Plus den Timer einstellen
> ISR( ... )> {> PORTC = 0;> digit=(digit+1)&7;> PORTD=segmentabbild[ziffer[digit]];> PORTC=1<<digit;> }
Main
Tastatur abfrage ;hast du ja auch drin
;Und noch Tausend andre Sachen die der µC noch so erledigen soll!
Goto Main
Sorry C kann ich nicht aus dem ff
Harry L. schrieb:> Dein Beispiel erinnert mehr an die ersten Gehversuche eines 12-jährigen> in der Welt der Computer.
Ja, ich sitz hier auch an Code, den jemand verbrochen hat, der nichts
davon verstanden hat, wie man Code fachgerecht aufbaut.
Der einzige Unterschied: er hat 17 Jahre vor sich hingewerkelt, so wie
sich der kleine Fritzi eben das Programmieren so vorstellt.
Fazit: 5 Mann haben mittlerweile mehr als 3 Jahre (also >15 Mannjahre)
investiert, um während der Weiterentwicklung wenigstens die gröbsten
Sünden rückgängig zu machen. Kostet der Firma heute ein Schweinegeld,
das alles zu richten, was dieser Typ in seiner Naivität und Unkenntnis
alles verbrochen hat. Und wir müssen es tun, denn das Programm bricht
uns unter den Fingern weg, wenn wir es nicht tun.
Er selber hat vor 3 Jahren das Handtuch geworfen, nachdem ihm seine Frau
einen Baum aufgestellt hat, weil er Wochenenden und Nächte
durchgearbeitet hat um das Chaos, in das er sich selbst manövriert hat,
immer wieder soweit zu umgehen, um dann noch einen Alibi-Fix auf Bugs
draufzupappen. Anstatt die Probleme anzugehen und zu richten hat er
immer nur Symptome bekämpft und die sich dann daraus wieder ergebenden
Syptome und deren Folgesymptome. Ergebnis: Spaghetticode, der unwartbar
ist, weil alle Teilsysteme irgendwie undurchschaubar mit allen anderen
Teilsystemen verflochten sind. Mach eine Änderung und an ganz andere
Stelle krachts.
Harry L. schrieb:> Die Tatsache, daß du dich hinter einem anonymen Gast-Account versteckst,> der es dir erlaubt, hier herumzupöbeln, degradiert dich in meinen Augen> zu einem Troll.
Ich hab schon länger das Gefühl das sich hinter dem Pseudonym mindesten
3 Leute verstecken.
Einen echt hilfsbereiten Hardwarecrack.
Einer der den Leuten Ihre "dummen" Fragen mit dem Baseballschläger um
die Ohren haut :)
Nja ja und DEN hier.
Netter Text, hat aber mit der kleinen Software von MaWin nix zu tun.
Da stand auch nirgens, daß sie zu einem großen, komplexen System
erweiter werden soll.
Warum habt ihr den Code nicht weggeschmissen? Und ach so einfach,
strukturiert neu geschrieben?
Warum hat man dem Mann vorher nicht auf die Finger gesehen, was er so
fabriziert?
Klingt nicht nach toller Führungsebene.
Habe hier mal ein bisschen mitgelesen..
Ich kenne MaWin ( meine Threads ) als ein sehr kompitenten Man.
Was ich schon sehr sehr oft gesehen habe, daß die meisten Lästerer
pöbler,meckerer, alles besserwisser,meistens als GAST unterwegs sind.
Von denen sieht man nicht mal eine angeschlossene Lüsterklemme als
eigenes Projekt !
Das muss doch einen Grund haben, warum einer sich permanent als Gast
angemeldet ist...Dies möchte ich mal wissen !
> Ich hab schon länger das Gefühl das sich hinter dem Pseudonym mindesten> 3 Leute verstecken.
Zumindest brauche ich zum Verstecken nicht 3 Gast-Accounts,
wie das hier sonst so gerne zum sich-selbst-auf-die-Schulter-klopfen
passiert.
Und im Gegensatz zu all den hier theoretisch rumquatschenden,
die zwar das Maul sehr voll nehmen wenn sie anderen angebliche
Unqualifiziertheit unterstellen wollen,
aber selbst absolut nichts handfestes liefern,
kommt von mir ein Lösungsvorschlag (welches den Kern: Multiplexen einer
Anzeige und Tastenabfrage mit Entprellen und einer Reaktion der Anzeige
auf die entprellten Tasten enthält)
Er enthält das nötige, und nicht mehr.
Ein gutes Programm ist eines, von dem man (maschineninstuktionsmässig,
nicht quelltextmässig) nichts mehr weglassen kann, weil es sonst nicht
mehr seine Funktion erfüllen würde (inklusive Fehlerbearbeitung).
Von den vorlauten Quatschköppen hier höre ich vor allem Ausreden für die
eigenen schlechten Programme, den hilflosen Versuch diejenigen die
besser sind durch diffamierende aber haltlose Vorwürfe zu
disqualifizieren, und absolut keine eigene Ausarbeitung.
Wie üblich.
Mir sind im Leben hunderte von solchen Nullnummern begegnet.
Teo Derix schrieb:> Ich hab schon länger das Gefühl das sich hinter dem Pseudonym mindesten> 3 Leute verstecken.
Hmm. Darauf hab ich noch nie geachtet.
Wohl auch deshalb, weil der echte MaWin schon auch mal einen Sager
rauslässt, dass ich mit den Ohren schlackere. Wobei: Wenn er einen Sager
rauslässt, dann hat er normalerweise in der fraglichen Sache auch recht.
Er mag nicht immer der freundlichste sein, aber hardwaremässig macht man
ihm so schnell nichts vor und eine gute Lösung hat er immer parat.
Definitiv jemand, von dem man lernen kann.
> Einen echt hilfsbereiten Hardwarecrack.
Das ist der MaWin, den ich meine.
MaWin schrieb:> Und im Gegensatz zu all den hier theoretisch ...> aber selbst absolut nichts handfestes liefern,
Sieh dich um hier im Forum.
Ich hab wohl in den 10 Jahren hier im Forum mehr Code geschrieben, und
zwar für andere, als irgendjemand anderer.
> kommt von mir ein Lösungsvorschlag
Auf den Punkt gebracht: dein Lösungsvorschlag ist scheisse.
> Ein gutes Programm ist eines, von dem man (maschineninstuktionsmässig,> nicht quelltextmässig) nichts mehr weglassen kann
Ein gutes Programm ist eines, welches so gut und so viel es geht aus
allgemein verwendbaren und getesteten Komponenten zusammengestellt wird.
Multiplexing ist eine Standardaufgabe, genauso wie Tastenabfrage. Für
beides gibt es gute und getestete Standardlösungen, die über Timer
laufen. Das hat den Vorteil, dass ich mich um beides in der
Hauptschleife nicht mehr kümmern muss. Sowohl die Anzeige als auch die
Tastenabfragen laufen ohne spezielle Vorkehrungen im Hintergrund weiter,
so dass ich mich in der Hauptschleife auf die restliche Programmlogik
konzentrieren kann, ohne befürchten zu müssen, dass die Anzeige flackert
oder das Tastendrücke verloren gehen.
Wenn du das mit deinen Micky Mouse Programmen nicht verstehst, dann ist
das deine Sache. Aber propagier nicht so einen Müll an Hilfesuchende.
> Mir sind im Leben hunderte von solchen Nullnummern begegnet.
Ist schon recht.
Karl Heinz Buchegger schrieb:> Hmm. Darauf hab ich noch nie geachtet.> Wohl auch deshalb, weil der echte MaWin schon auch mal einen Sager> rauslässt, dass ich mit den Ohren schlackere.Teo Derix schrieb:> Einer der den Leuten Ihre "dummen" Fragen mit dem Baseballschläger um> die Ohren haut :)Karl Heinz Buchegger schrieb:> aber hardwaremässig macht man> ihm so schnell nichts vor und eine gute Lösung hat er immer parat.> Definitiv jemand, von dem man lernen kann.Teo Derix schrieb:> Einen echt hilfsbereiten Hardwarecrack.
Und Den hier.
Hmm, das sind doch "die drei" und das ist Dir nicht aufgefallen :)
> Ein gutes Programm ist eines, welches so gut und so viel es geht aus> allgemein verwendbaren und getesteten Komponenten zusammengestellt wird.
Auf den Quatsch kommt man nur, wenn man niemals Informatik studiert hat,
denn dort wird was anderes gelehrt, sondern sich als Seiteneinsteiger
planlos in einer fremden Welt bewegt.
MaWin schrieb:> Auf den Quatsch kommt man nur, wenn man niemals Informatik studiert hat,> denn dort wird was anderes gelehrt, sondern sich als Seiteneinsteiger> planlos in einer fremden Welt bewegt.
Du hast ganz sicher NIEMALS Informatik studiert! (oder nach dem 1.
Semester aus Unfähigkeit abgebrochen)
Wenn die Programmierer in der OpenSource-Welt (Linux, Apache, MySQL &
Co) solche hirnrissigen Thesen wie du propagieren würden, würde bei
Linux heute nicht mal die Terminal-Ausgabe zuverlässig funktionieren.
Mein Tipp: schau dir mal Qelltexte von Leuten an, die was davon
verstehen, und verunsicher nicht Anfänger mit deinen haltlosen Thesen!
Mein Fazit: du bist ein nicht ernst zu nehmender Foren-Troll, der an
seinem selbst erarbeitetem Halbwissen, gepaart mit maßloser
Selbstüberschätzung leidet.
Liebe MaWin,
ich habe das hier durchgelesen und ich kenne dich natürlich auch von
anderen Threads.
Dass du jemand bist, der gerne die dicke Keule auspackt und den anderen
zeigt, wie hohl sie in der Birne sind, das ist hinreichend bekannt und
muss nicht weiter erörtert werden.
Ob du in dem Punkt, der hier diskutiert hast, recht behältst oder nicht,
ist doch vollkommen zweitrangig. Es gibt nicht "DIE WAHRHEIT", das
sollten sogar technisch rational denkende Menschen begriffen haben. Und
ich denke, da darf sich jetzt auch Karl Heinz angesprochen fühlen.
Auf ALLES gibt es mehrere Sichten und somit auch mehrere Wahrheiten. Je
nachdem, welche Brille man gerade auf hat.
Wenn es wirklich nur darum geht, ab und zu mal ne Temperatur zu messen
und das Ergebnis auf ein paar LEDs auszugeben, und man weiss, dass man
nieeemals irgendwelche Zusatzfunktionen benötigen wird, dann mag es
richtig sein, dass du sagst: Warum noch lange Interrupte initialisieren
etc, wenn das auch in ner einfachen Schleife im Kreis rumrennen kann.
Aber sobald man damit rechnen muss, dass das Programm mal erweitert
werden muss oder wartbar sein soll, dann empfiehlt es sich aus meiner
Sicht schon, gleich von Anfang an Ordung zu halten. Und die lässt sich
meines Erachtens durch Verwendung eines Interrupts viel leichter
sicherstellen.
Was ich aber schade finde ist, dass du, lieber MaWin gleich agressiv und
beledigend wirst, wenn jemand, der zweifelsfrei techisch sehr versiert
ist, nicht Lobeshymnen singend deine Idee huldigt, sondern Kontra gibt.
Ob du technisch recht hast oder nicht, spielt jetzt gar keine Rolle
mehr. Durch so ein Verhalten machst du dich, salopp gesagt, selbst zum
Affen. Wer um sich schlägt, wenn er mal eventuell nicht recht hat,
erweckt zumindest den Eindruck, an einem ziemlich ungesunden Maß an
Narzissmus zu leiden. Und das kommt einfach nicht gut an.
Ein Forum sollte eigentlich davon leben, VIELE VERSCHIEDENE Gedanken
zusammenzutragen und sich gegenseitig mit Ideen zu befruchten und nicht
dazu, sich durch mehr oder weniger gescheite Antworten, sein eigenes,
vermutlich sehr gebeuteltes Ego zu polieren.
Schlumpf schrieb:> Es gibt nicht "DIE WAHRHEIT", das> sollten sogar technisch rational denkende Menschen begriffen haben.
Das glauben nur die, die die Wahrheit nicht kennen.
Es gibt eine klare Messlatte für die Qualität eines Algorithmus
und dessen Unsetzung als Programm.
Der Aufwand, in speed vs. space.
Das weiß jeder der Informatik studiert, und jeder des sie dann
praktiziert
weiß das das das hehre Ziel ist dessen Optimum er nicht erreichen wird
aber das er anstreben sollte. Und als Informatiker weiss er, wie er es
messen kann.
Und Ausreden wie "aber es läuft doch", "wir wurden nicht für mehr
bezahlt",
"ich habs mir einfach gemacht" sind genau nur das: Ausreden dafür, warum
das Programm nicht optimal geworden ist.
Man kann zur Ausrede stehen, da hab ich nichts dagegen, aber wie es hier
gemacht wird, arrogant, doof und die klare Messlatte ignorieren
wollend,
das ist einfach nur ablenken wollen von der eigenen Unfähigkeit.
Daß diese Nichtskönner nur rumlabern können sieht man am Mangel an
jedem konkreten Programmtext. Typische Masche: Bloss nichts konkretes
liefern an dem sich dann zeigt wie blöde es war.
Der Sascha hat ein Problem, eine 800ms lang laufende Aufgabe stört seine
Programm-Hauptschleife. Er erhält als einzige Lösung den Interrupt, als
ob das die einzige Lösung wäre. Er erhält diesen Hinweius so, als ob
Multiplexing ohne Interupt gar nicht geht, dabei hat er es schon ohne
Interrupt realisiert, weiß also, dass ihm einer vom Pferd erzählt wird.
Aufbauend auf Saschas aktuellen Stand beschreibe ich, ihm, wie man es
ohne
Interrupts machen kann, und daß das durchaus die bessere Lösung sein
kann.
Und dann kommt TeoDerix als der_vom_Pferd_erzählt persönlich
und sondert hier hanebüchenen Unsinn ab, als ob lediglich Interupts die
Lösung wären. Der Rest ist Geschichte. Sascha hat immer noch kein
Programm.
MaWin schrieb:> Das glauben nur die, die die Wahrheit nicht kennen.MaWin schrieb:> ablenken wollen von der eigenen UnfähigkeitMaWin schrieb:> Daß diese Nichtskönner nur rumlabern könnenMaWin schrieb:> Bloss nichts konkretes> liefern an dem sich dann zeigt wie blöde es war.MaWin schrieb:> dass ihm einer vom Pferd erzählt wirdMaWin schrieb:> sondert hier hanebüchenen Unsinn ab
MaWin, du hast absolut NICHTS von dem kapiert was ich geschrieben
habe...
MaWin schrieb:> for(i=0;i<8;i++) if(gedrueckt&(1<<i)) ziffer[i]=(ziffer[i]+1)%10;
Ooch nö, das bist Du aber nicht konsequent gewesen, da sind ja noch 2
Leerzeichen zuviel drin.
Und warum überhaupt mehrere Zeilen?
Aber sonst ein wirklich gelungenes Bespiel für schlecht lesbaren Code.
MaWin schrieb:> Und dann kommt TeoDerix als der_vom_Pferd_erzählt persönlich
Endschuldiege bitte, Du hast dich verschrieben!
Und dann kommt TeoDerix als der der_einem_Pferd_erzähl höchst*
persönlich
> und sondert hier hanebüchenen Unsinn ab, als ob lediglich Interupts die> Lösung wären.
Wer diese Aussage hier im Thread finde *bekommt 1000€*
(Ich mein nicht das mit dem Unsinn:)
*soviel Anstand sollte sein :)
Hallo Männer,
was'n hier los? Naja....Also, ich habe das Multiplexing der 7
Segmentanzeigen in einer ISR verlagert, allerdings nicht so super
optimal wie es oft empfohlen wird, sondern habe den kompletten Code für
die Anzeige (Aufbereitung der Ziffern, Ansteuerung der Segmente, etc.)
in die ISR gepackt. Und, was soll ich sagen, es funktioniert prima, kein
flatter, keine Ghosting und helle Segmente. Für die ISR habe ich die
fertige Timerlibrary TimerONE von Arduino Playground benutzt.
Es wäre bestimmt auch anders gegangen (Vorschlag von MaWin), aber ich
habe mich für die andere Methode entschieden.
Das das ganze in einer heißen Diskussion ausatmet, ist ja eigentlich
nicht schlecht, solange keiner beleidigt wird.
Danke für die Hilfen,
gruß
Sascha