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
@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
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!
@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
schau mal ob es funktioniert, wenn du ein paar nops einbaust, hatte vor kurzem fast das gleicche problem
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.