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
Hallo, okay, werde mal gezielt nach Timer-Interrupt suchen, der Link ist interessant aber der Code leider in Assembler geschrieben. Danke, gruß Sascha
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
Harald Wilhelms schrieb: > Wer hat eigentlich mal den Interrupt erfunden? Gab es den auch > schon im 4004? Nö http://www.cpu-world.com/CPUs/4004/ http://www.cap-lore.com/Hardware/int.html
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
> Dann zeig mal eins!
Anzeige von 8 Ziffern auf 7-Segment mit Multiplex,
8 entprellte Tasten zählen auf Tastendruck je eine Ziffer hoch
1 | // PortA=Tasten (low=ein)
|
2 | // PortD=Segmente (high=ein)
|
3 | // PortC=Digittransistoren (high=ein)
|
4 | |
5 | char digit=0,tasten=0,gedrueckt=0; |
6 | char ziffer[]={0,0,0,0,0,0,0,0}; |
7 | char segmentabbild[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x67}; |
8 | |
9 | for(digit=0;;digit=(digit+1)&7) |
10 | {
|
11 | PORTC=1<<digit; |
12 | PORTD=segmentabbild[ziffer[digit]]; |
13 | tasten=~PINA; |
14 | gedrückt=tasten&~gedrückt; |
15 | for(i=0;i<8;i++) if(gedrueckt&(1<<i)) ziffer[i]=(ziffer[i]+1)%10; |
16 | gedrueckt=tasten; |
17 | _delay_ms(10); |
18 | }
|
Jetzt darfst du dein Programm mit Interrupts drunterschreiben. und wenn du's nicht verstehst: Lern programmieren.
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.
1 | ; isr code can go here or be located as a call subroutine elsewhere |
2 | incfsz tackt1 ; 125 |
3 | goto Tackt125 |
4 | goto Intend |
5 | |
6 | Tackt125
|
7 | movlw D'125' |
8 | movwf tackt1 |
9 | bsf LED_muxtackt_Flag |
10 | |
11 | incfsz tackt125 |
12 | goto Intend |
13 | movlw D'125' |
14 | movwf tackt125 |
15 | bsf sec_Flag |
16 | |
17 | |
18 | Intend
|
19 | bcf INTCON,T0IF |
20 | |
21 | retfie
|
22 | |
23 | ;_______________________________________________________________________ |
24 | movf status_temp,w ; retrieve copy of STATUS register |
25 | movwf STATUS ; restore pre-isr STATUS register contents |
26 | swapf w_temp,f |
27 | swapf w_temp,w ; restore pre-isr W register contents |
28 | retfie ; return from interrupt |
29 | ;************************************************************************ |
30 | |
31 | |
32 | start
|
33 | Call Init |
34 | main
|
35 | btfsc sec_Flag |
36 | Call Timer |
37 | btfsc LED_muxtackt_Flag |
38 | call LED_ausg |
39 | |
40 | goto main |
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
MaWin das was du machst, nennt sich einfach unqualifiziertes und unnötiges Pöbeln. KHB hat doch völlig recht.
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.
Worum ging es doch gleich? Ach ja, siehe Betreff. Stimmen wir doch ab ;-)
1 | wer? Timer-Int delay/Schleife |
2 | hp-freund x |
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ähigkeit MaWin schrieb: > Daß diese Nichtskönner nur rumlabern können MaWin schrieb: > Bloss nichts konkretes > liefern an dem sich dann zeigt wie blöde es war. MaWin schrieb: > dass ihm einer vom Pferd erzählt wird MaWin 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.
48 Posts für lediglich 2-3 benötigte hilfreiche Hinweise. Alle Achtung. Deshalb liebe ich das Forum.
Zum Glück gibt es für wirklich JEDE Lebenslage ein passendes XKCD: http://xkcd.com/386/ gruß cyblord
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.