mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik LM75, 7 segment @ 16F84A


Autor: Lukas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Frohes Neues!

Wie aus der Überschrift zu entnehmen versuche ich bei oben genannter
Konstellation mit Hilfe von Multiplexing, eine zweistellige, positive
Temperatur ohne Nachkommastellen, anzeigen zu lassen.

Es löuft nun folgendes ab:
Über i²C wird die Temperatur vom Sensor geholt und gespeichert,
daraufhin wird der Wert umgewandelt um auf der 7-Segmentanzeige
dargestellt zu werden. Da ich einen BCD->7Segment Dekoder verwende,
benutze ich nur 6 Ausgänge am PortB. 4 für die Daten und zwei für
jeweils einen Transistor von denen jeder eine Anzeige treibt.

Mein Problem liegt nun darin eine höhere Frequenz beim Multiplexing zu
erreichen. Da das auslesen der Temperatur aus dem LM75 einige Zeit
braucht.. Vielleicht gehe ich auch mit dem Falschen Ansatz daran.

Hoffe jemand kann mir einen Tipp geben.


Hier ein Codeschnipsel:

          call  i2c_on
    call  i2c_txACK
    call  i2c_rxACK
    movwf  buff_HIGH
    call  i2c_rx
    movwf  buff_LOW
    call  i2c_off

;Hier die eigentliche Schleife !

nochmal
    call  conversion
    iorwf  zehner, w
    movwf  PORTB
    movlw  .5
    movwf  loop2
    movlw  .50
    movwf  loop
    call  WAIT

    clrf  PORTB
    movlw  B'10000000'
    iorwf  einer, w
    movwf  PORTB



    movlw  .2
    call  WAIT
                goto    nochmal

Autor: ingo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Lukas,

das Problem wird sein, das Deine I2C-Routinen zu viel Zeit brauchen.
Bei zwei LED-Anzeigen ist eine Multiplex-Frequenz noch 150 Herz völlig
ausreichend. Der LM75 kann Daten mit 100KHz senden. Wenn also zwischen
PIC und LM 100 Bit "fliegen müssen bis Du die Daten hast, dann ist das
immernoch 1Khz Wiederholfrequenz!
1Khz zu 150 Hz, da hast Du eigendlich jede Menge Zeit!!!!

Ich würde folgendes Programm verwenden:

nochmal
    call  i2c_on
    call  i2c_txACK
    call  i2c_rxACK
    movwf  buff_HIGH
    call  i2c_rx
    movwf  buff_LOW
    call  i2c_off
    call  conversion
    iorwf  zehner, w
    movwf  PORTB

    call  i2c_on
    call  i2c_txACK
    call  i2c_rxACK
    movwf  buff_HIGH
    call  i2c_rx
    movwf  buff_LOW
    call  i2c_off
    clrf  PORTB
    movlw  B'10000000'
    iorwf  einer, w
    movwf  PORTB
    goto    nochmal

Auf diese Weise bestimmt die I2C Programmierung Deine
Multiplexfrequenz. Das der Einer und Zehnerwert aus zwei
unterschiedlichen Abfragen herrühren, merkt man nicht, da die Anzeige
für das Auge eh zu schnell ist!

Hoffe es hilft Dir weiter!!

GRUSS
INGO

Autor: CARP (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.