Forum: Mikrocontroller und Digitale Elektronik 18B20 auf 7 Segmentanzeige


von Sascha (Gast)


Lesenswert?

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

von hp-freund (Gast)


Lesenswert?

Interrupt, heisst das Zauberwort.

von Sascha (Gast)


Lesenswert?

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

von hp-freund (Gast)


Lesenswert?

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.

von Karl H. (kbuchegg)


Lesenswert?

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

von Sascha (Gast)


Lesenswert?

Hallo,
okay, werde mal gezielt nach Timer-Interrupt suchen, der Link ist 
interessant aber der Code leider in Assembler geschrieben.
Danke,

gruß
Sascha

von hp-freund (Gast)


Lesenswert?


von Karl H. (kbuchegg)


Lesenswert?

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

von Peter D. (peda)


Lesenswert?


von MaWin (Gast)


Lesenswert?

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.

von Teo D. (teoderix)


Lesenswert?

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 :)

von (Gast) (Gast)


Lesenswert?

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.

von Peter D. (peda)


Lesenswert?

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.

von Harald W. (wilhelms)


Lesenswert?

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

von MaWin (Gast)


Lesenswert?

> 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.

von Karl H. (kbuchegg)


Lesenswert?

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.

von Harry L. (mysth)


Lesenswert?

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

von Teo D. (teoderix)


Lesenswert?

Harald Wilhelms schrieb:
> Wer hat eigentlich mal den Interrupt erfunden? Gab es den auch
> schon im 4004?http://www.cpu-world.com/CPUs/4004/

http://www.cap-lore.com/Hardware/int.html

von Sascha (Gast)


Lesenswert?

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

von MaWin (Gast)


Lesenswert?

> 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.

von M. N. (Gast)


Lesenswert?

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?

von Harry L. (mysth)


Lesenswert?

M. N. schrieb:
> Nur mal aus Interesse: ist das ernst gemeint?

Ich wunder mich auch.....

von Karl H. (kbuchegg)


Lesenswert?

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.

von Teo D. (teoderix)


Lesenswert?

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

von Karl H. (kbuchegg)


Lesenswert?

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.

von Teo D. (teoderix)


Lesenswert?

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 
:(

von MaWin (Gast)


Lesenswert?

> 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.

von Karl H. (kbuchegg)


Lesenswert?

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.

von MaWin (Gast)


Lesenswert?

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.

von Karl H. (kbuchegg)


Lesenswert?

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.

von MaWin (Gast)


Lesenswert?

> 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.

von Harry L. (mysth)


Lesenswert?

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)

von Teo D. (teoderix)


Lesenswert?

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

von Cyblord -. (cyblord)


Lesenswert?

MaWin das was du machst, nennt sich einfach unqualifiziertes und 
unnötiges Pöbeln. KHB hat doch völlig recht.

von Karl H. (kbuchegg)


Lesenswert?

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.

von Teo D. (teoderix)


Lesenswert?

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.

von spontan (Gast)


Lesenswert?

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.

von Thomas D. (thomasderbastler)


Lesenswert?

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 !

von MaWin (Gast)


Lesenswert?

> 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.

von hp-freund (Gast)


Lesenswert?

Worum ging es doch gleich?
Ach ja, siehe Betreff.
Stimmen wir doch ab ;-)
1
wer?               Timer-Int          delay/Schleife
2
hp-freund             x

von Karl H. (kbuchegg)


Lesenswert?

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.

von Karl H. (kbuchegg)


Lesenswert?

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.

von Teo D. (teoderix)


Lesenswert?

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 :)

von MaWin (Gast)


Lesenswert?

> 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.

von Harry L. (mysth)


Lesenswert?

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.

von Schlumpf (Gast)


Lesenswert?

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.

von MaWin (Gast)


Lesenswert?

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.

von Schlumpf (Gast)


Lesenswert?

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...

von Peter D. (peda)


Lesenswert?

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.

von Stephan (Gast)


Lesenswert?

48 Posts für lediglich 2-3 benötigte hilfreiche Hinweise. Alle Achtung.
Deshalb liebe ich das Forum.

von Cyblord -. (cyblord)


Lesenswert?

Zum Glück gibt es für wirklich JEDE Lebenslage ein passendes XKCD:

http://xkcd.com/386/

gruß cyblord

von Teo D. (teoderix)


Lesenswert?

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 :)

von Sascha (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.