mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik 7_segment zahl9 anstatt 5


Autor: steffen (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kommt auch statt einer 6 eine 8?

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schaltplan?

Autor: Falk (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: steffen (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: steffen (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Schaltplan gibt es hier!

Autor: Falk (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Knut Ballhause (Firma: TravelRec.) (travelrec) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Würde auf ´nen Programmfehler tippen.

Autor: brain (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
schau mal ob es funktioniert, wenn du ein paar nops einbaust,
hatte vor kurzem fast das gleicche problem

Autor: steffen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ne so zeigt sie nur lauter misst an!

aber trozdem danke

Autor: Falk (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Falk (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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




Autor: steffen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
coll danke probier ich morgen aus!

jetzt ist leider feierabend!

Autor: Falk (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hier mal eine etwas aufgeräumte Variante.

MFG
Falk

Autor: Falk (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Mist, falsche Datei erwischt! :-(

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.