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


von Lukas (Gast)


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

von ingo (Gast)


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

von CARP (Gast)


Lesenswert?


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.