7_segment zahl9 anstatt 5

Gast #524585
Lesenswert?
• ▲
▼
hallo will temperatur an 7-segment anzeigen anzeigen!
es funktioniert wirklich alles, außer das wenn er ne 5 anzeigen soll ne 
9 anzeigt! die Zahlen liegen im richtigen bit-muster!

Komm einfach nicht mehr weiter!
ach ja wenn ich saft drauf gib leuchtet das zeichen was bei der neun 
mitleuchtet, aber bei der fünf nicht leuchten sollte so ca.5 sec! dann 
springt er auf meine temperatur!

Vieleicht hat ja jemand ne idee!

Danke
Angehängte Dateien:
Gast #524626
Lesenswert?
• ▲
▼
@steffen

>es funktioniert wirklich alles, außer das wenn er ne 5 anzeigen soll ne
>9 anzeigt! die Zahlen liegen im richtigen bit-muster!

Wie hast du das geprüft? Lass mal deine UART Sache weg und gib mal 
konstante Zahlen aus. Stimmen dann alle Bitmuster von 0..9?

>ach ja wenn ich saft drauf gib leuchtet das zeichen was bei der neun
>mitleuchtet, aber bei der fünf nicht leuchten sollte so ca.5 sec! dann
>springt er auf meine temperatur!

Ich seh da im Moment nicht den Fehler.
Allerdings ist dein MUX Interrupt noch nicht OK. Bei Drei 
Anzeigenbrauchst du logischerweise 3 Fälle in deinem select und nicht 6. 
Ausserdem soltest du den Timer auf einen höhere Freqeuz einstellen, ca. 
300 Hz (da ergibt dann 100 Hz Bildwiderholfreqeunz = flimmerfrei).

MFG
Falk
Gast #524630
Lesenswert?
• ▲
▼
hab eine platine dazu gebaut!
wenn ich sie einzeln darstellen will funktioniert es ja, also liegt es 
nicht an den anzeigen!

das blöde ist glaub ich alle siebensegmentanzeigen, also a,d,e,f,g 
liegen beim pic16f628a am port B und der b von der siebensegmentanzeige 
liegt am port A vom pic!
Gast #524647
Lesenswert?
• ▲
▼
@steffen

>hab eine platine dazu gebaut!
>wenn ich sie einzeln darstellen will funktioniert es ja, also liegt es
>nicht an den anzeigen!

Dann ist es zu 99%ei Softwareproblem deiner UART Empfangsroutine.

Versuchs mal damit.

   while true
     if Usart_Data_Ready = 1 then  'Daten eingetroffen?

       i = Usart_Read              'Ja -> UART-Puffer auslesen (ein 
Zeichen)

                  'Auf Startkennung (=Vorzeichen + oder -) warten
       if i = 43  then    '+ ? ASCII-Code "+" =43
          treffer = 1
          PORTA.3 = 1     'Bei + "Minus-LED" aus
          n=0             ' reset für Pufferindex
       end if
       if i = 45  then    'oder - ? ASCII-Code "-" =45
          treffer = 1
          PORTA.3 = 0     'Bei - "Minus-LED" an
          n=0             ' reset für Pufferindex
       end if

       if treffer = 1 then 'Puffer füllen
          'Usart_Read_Text(puffer, delim)'bis LF
          Puffer [n]=i - 48 'Ankommendes ASCII-Zeichen nach Byte wandeln
          n = n+1
       end if

       if n >= 7 then  'Alle Zeichen eingetroffen?
          n = 0
          treffer = 0

         ' Update nur dann, wenn alle Zeichen eingetroffen sind
         'Digitalanzeige ansteuern
         por[0] = Mask(Puffer[3]) '10er Stelle
         por[1] = Mask(Puffer[4]) '1er Stelle
         por[2] = Mask(Puffer[6]) '1. Nachkommastelle
       end if

     end if

MfG
Falk
Gast #524689
Lesenswert?
• ▲
▼
Dann machs mal wieder teilweise wie im Original

      if treffer = 1 then 'Puffer füllen
          'Usart_Read_Text(puffer, delim)'bis LF
          n = n+1
          Puffer [n]=i - 48 'Ankommendes ASCII-Zeichen nach Byte wandeln
       end if

MFG
Falk
Gast #524727
Lesenswert?
• ▲
▼
Ahhhhh, ich habs!

Deine Dekodierung des Segment B ist falsch!

sub function BSeg(dim num as byte) as byte 'Wird das B-Segment der 
Anzeige benötigt?
    select case num
      case 5,6 result = 1
      case else result = 0
    end select
end sub

Diese Fuktiongeht davon aus, dass sie mit Zahlen 0..9 gefüttert wird 
(BCD).

Du benutzt sie aber hier mit 7-Segmentcode.

 PORTA.4 = BSeg(por[0])

Mach einfach ein zweites Array und speichere dort Segement B, genauso 
wie du es mit por machst.

MfG
Falk



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.