Thermometer LM92, MAX7219, Ansteuerung

    This site uses cookies. By continuing to browse this site, you are agreeing to our Cookie Policy.

    • Hallo,

      @'Pluto25
      ja, deine Idee war schon richtig und hat mir weitergeholfen.
      Nein, die Temp.-Anzeigen flackern nicht.

      2 Sachen hab ich noch:
      Ich brauche einen Denkanstoß dafür, wenn die Rs232 ausfällt, wie ich das erfasse. Einfach über die empfangenen Bytes?
      Und, beim Einschalten der Empfängersteite passiert es sporadisch, daß die RS232 nichts empfängt. Wie kann ich das Problem beheben?
      Anbei die aktuelle Version.

      Gruß Dago
      Files
      • Test_10.bas

        (33.01 kB, downloaded 12 times, last: )
    • Wen ein Byte "verunfallt" / nicht an kommt werden es nie genau zwei sein.
      Besser If _rs_bufcountr0 >= 2 Then
      Und CLEAR SERIALIN nach dem Inputbin (Falls da drei oder mehr drin waren)
      Dann ließt es jedoch manchmal Müll. Passiert das öfter sollte die Verbindung geprüft werden.
      Um es zu "verdrängen" wäre es auch möglich die Daten zu ignorieren, wenn es nicht genau zwei Byte sind
      If _rs_bufcountr0 > 2 Then
      incr Lm92_232_muell_zaehler
      else
      If _rs_bufcountr0 = 2 Then ...
      ....
      end if
      Wenn es dann doch zu oft vorkommt evt eine Meldung "Der andere sendet nur Müll" a_166_29aea317
      Auch das fehlen von Eingängen könnte überwacht werden:
      In der Sub nachdem inputbin
      Lm_232_nichtsda=0
      Und in der Main
      incr Lm_232_nichtsda
      if Lm_232_nichtsda >100
      Dann die Meldung "Der andere sagt nichts" a_218_eb6e2334

      PS Wie lang ist die Verbindung? 1200 Baud ist sehr gemütlich a_221_2cffa601
    • So, hallo erstmal,
      ich war ja nicht untätig in der Zeit, was mein Thermometer-Projekt betrifft, das Ganze lebt noch und es geht halt weiter, wenn auch zeitlich etwas langsamer als mir lieb ist.

      Nachdem ich nun auch das wait bei der Abfrage des Temp-Sensors eleminiert habe, Leiterplatten geroutet habe, das Senderteil aufgebaut habe und in ein Gehäuse gepackt habe und es funktioniert,
      die Umschalterei mit den Tasten gelöst habe, das Empfängerteil soweit funktioniert, habe ich noch ein Problem mit der unbedingt von mir gewollten "Info-Anzeige".
      Die "Info-Anzeige" soll AKT, MAX, MIN, I2C, RX auf 16-Segment-LED-Anzeigen darstellen.
      Die Anzeige von Temperatur, innen, außen, Funkempfang wird mit einem MAX7219 realisiert.

      1. Idee
      2x Max7219 für jeweils 8 Segmente, die Ausgänge für die Stellen jeweils über Dioden zusammengeführt auf die Kathode der LED-Anzeige,
      z.B., Max1, Stelle1 und Max2, Stelle1 jeweils über eine Diode auf die Kathode der LED-Anzeige
      funktioniert elektronisch, aber durch die Toleranz der internen Multiplexfrequenz der Max7219 unbrauchbar

      2. Idee
      74HC595, da gab es mal einen Thread von djmsc 7-Segmentanzeigen und Multiplexing , wo mir die Lösung gut gefallen hat mit dem Timer Interrupt.
      2x 74HC595 -> 16 Segmente
      Mmmhhh, Spi Ausgabe in der Hauptschleife und Spi Ausgabe in einer Interrupt-Routine, funktioniert, aber zusammen nicht wirklich, gibt sporadisch Aussetzer beim Spi in der Hauptschleife.

      3. Idee
      MAX6969, Spi, Latch, Output Enable, 16 Ausgänge, TSSOP-Gehäuse
      nicht schlecht, aber...
      mit 1x MAX6969 -> Multiplex, selbe Problem wie bei 2. Idee

      4. Idee
      3x Max6969, für jede Stelle einen, kein Multiplex, Steuerung der Anzeige über Latch
      aber dann 48 Segment Leitungen über Steckverbinder, da Leiterplatten in Sandwich Anordnung, d.h. Steuerplatine über Steckverbinder mit Anzeigeplatine verbunden, äuserts ungünstig
      Abhilfe kann ich nur durch neue Leiterplatten-Designs für die Steuer-Platine und die Anzeigen-Platine schaffen, wo die 3x MX6969 mit auf der Anzeige-Platine wohnen,
      damit von der Steuerplatine nur die Spi- und Stellen-Leitungen über Steckverbinder geführt werden müssen.
      Vorteil auch, 1x Steckverbinder würde dann wegfallen, also statt 3 nur 2 Steckverbinder
      Preis für die Leiterplatten ist für mich relativ uninteressant.

      Also,
      kann man Spi Ausgabe in Hauptschleife und Spi Ausgabe im Interrupt gleichzeitig realisieren?
      Oder ist die 4. Idee der einfachste Weg zur Realisierung?
      Oder denke ich zu kompliziert?

      Gruß
      Dagobert



      Therm_01.jpgTherm_02.jpg
    • Dago1 wrote:

      kann man Spi Ausgabe in Hauptschleife und Spi Ausgabe im Interrupt gleichzeitig realisieren?


      Oder denke ich zu kompliziert?
      die ISR muß warten bis das Spi ausgespochen hat bevor sie etwas neues reinschreibt,oder die Hauptschleife die ISR solange verzögern.

      Vermutlich - oder ich bin nicht wach genug :|

      Idee1 weshalb sollten die beiden Max verbunden werden ? Jeder hat seine 8 Digits, zusammen 16 die müssen/dürfen nicht verbunden werden?

      The post was edited 1 time, last by Pluto25 ().

    • Dago1 wrote:

      kann man Spi Ausgabe in Hauptschleife und Spi Ausgabe im Interrupt gleichzeitig realisieren?
      das wäre kein schöner Stil.
      Der Interrupt kann ja jederzeit dazwischenfunken.
      Wenn du mitten in der Hauptschleife-SPI-Ausgabe mit dem Interrupt eine weitere SPI-Ausgabe startest kommt es zwangsläufig zur Kollision.

      Warum überhaupt einen Interrrupt? Für die reine Anzeige brauchst du den nicht
      Du hast die Daten und schickst sie nacheinander an die Chips.
      Den Interrupt kannst du für wichtigere Sachen verwenden wie für serielle Schnittstelle und einen Zeitgeber.

      Je Anzeige ein extra Chip ist sehr aufwendig, besser eine Gruppe zusammenfassen und nacheinander bedienen.
    • Danke für die Antworten.

      @Pluto25
      Die 16 Segment LED Anzeigen haben nur einen Pin für die gemeinsame Kathode der 16 Segmente.
      Ahhh, beim MAX7219 könnte man ja auch die Digit's als Segmente nehmen und die Segmente als Digit-Ansteuerung, muß ich mir mal anschauen.

      Ich bekomme jetzt die MAX6969.
      Ich werd mal probieren mit 1x Max6969 für die 3 Anzeigen mit Multiplex.
      Wobei das Prinzip identisch ist mit HC595, aber nur ein IC mit 16 Ausgängen
      Und dann mal schauen, pro Anzeige 1x MAX6969

      Hab ich mir schon gedacht, daß das Zusammenspiel Spi Interrupt und Hauptschleife nicht funktioniert.
    • Pluto25 wrote:

      Wer baut denn sowas?
      Erich Honecker :D Sind 1-stellige alte DDR Anzeigen VQB200. Ist halt heutzutage retro, wie man so sagt.

      Multiplexen geht schon.
      1x MAX6969 alle Segmente der Anzeigen und die Stellen (Digit's) nacheinander schalten oder
      für 3 Anzeigen (wie bei mir) 3x MAX6969 und bei jeder Anzeige nur bei Änderung Daten senden und per Latch freischalten und wie Du sagst, der AVR hat keinen Stress
      sicherlich alles eine Ansichtssache, welches Vorgehen nun besser ist
    • Hallo,
      so, mein Thermometer für Außen- und Innentemperatur-Anzeige mit Speicherung der jeweiligen Max- und Min Temp. ist programmier-technisch auf der Sender-Seite und Empfängerseite nun erstmal soweit fertig.
      Die Programme für Sender und Empfänger laufen permanent ohne Wait's.
      Sicherlich gibt es immernoch Optimierungspotential für den Code; ab einem gewissen Stand der Programmierung wird es halt eine Philosphie-Frage.

      Der Sender für die Außen-Temp. läuft schon seit 4 Wochen Probe, ohne Aussetzer, schön gemütlich vor sich hin.
      Die lokale Anzeige der Temp. wurde mit MAX7219 und 7-Segment-Anzeigen in rot von Kingbright realisiert.
      Wenn der I²C-Bus einen Fehler hat wird "Err" auf dem lokalen Display ausgegeben.
      Für die Anzeige, daß das Funkmodul HC-12 sendet blinkt im Sendetakt ein Punkt der 7-Segment-Anzeige.
      Daten werden ca. alle 2 Sekunden gesendet.
      Die Funkverbindung steht permanent.

      Der Empfänger für die Außen-Temp. und Innen-Temp. läuft nun auch schon ein paar Tage ohne zu murren und speichert jeweils zuverlässig die Max- und Min-Temp.
      Für mein unbedingt gewolltes 3-stelliges Info-Display habe ich nun 3 x MAX6969 genommen.
      Die Ansteuerung ist dann natürlich einfach, die Helligkeitsregelung erfolgt dabei über PWM mit Timer.
      Für die Temp-Anzeige habe ich ja den MAX7219 verwendet, 5 Stellen, und die 6. Stelle für die Beleuchtung der Taster.
      Hardware-seitig habe ich aber die 7-Segment-Anzeigen über Fet's mit Vorwiderständen realisiert.
      Dies hat den Vorteil, daß man die Signale für die Ansteuerung der Anzeigen rechteckig wie aus dem Bilderbuch bekommt und den Strom exakt festlegen kann.
      Aufgrund der geringen Helligkeit der Anzeigen beim Tastverhältnis von 1:6 bei max. statischem Strom von 20 mA werden die Anzeigen mit 60 mA bestromt; 150 mA im Pulsbetrieb wären erlaubt.
      Es ist egal ob der Sender oder Empfänger zuerst eingeschaltet wird; beide finden sich.
      Die Fehlerbehandlung beim Empfänger ist etwas umfangreicher.
      Es werden folgende Fehler abgefangen und angezeigt:
      -I²C Bus des Innen-Temp.-Sensors
      -I²C Bus des Außen-Temp.-Sensors
      -Ausfall der Funkverbindung des Außen-Temp.-Sensors

      Die Fehler beinflussen nicht den jeweiligen anderen Sensor; wenn Außen-Temp. ausfällt, dann funktioniert Innen-Temp. in vollem Umfang und umgekehrt.



      Ich bedanke mich bei den Unterstützern und für die hilfreichen Antworten bei meinen Fragen und Problemen recht herzlich.

      Das Ganze wird dann auch unter "Vorstellung eigener Projekte" dokumentiert.
      Den Code für Sender und Empfänger stelle ich hier nach Vervollständigung der Kommentierung ein.
      Vielleicht kann man noch etwas optimieren.



      Gruß
      Dagobert
      Files
      • DTM8_01.jpg

        (288.75 kB, downloaded 12 times, last: )
      • DTM8_02.jpg

        (337.76 kB, downloaded 11 times, last: )