LM75, 7 segment @ 16F84A

Gast #272772
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
Gast #272773
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

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.