mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Stoppuhr mit 16F84A


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Kalle (Gast)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
Ich befasse mich erst seit einigen Monaten mit der Programmierung von 
PIC's.
Für mich als Laie (von Beruf Schlosser) ein faszinierendes Thema. Die HP 
Sprut.de ist mir dabei ein ständiger Begleiter und ich hab schon einige 
kleinere Projekte nachgebaut. Bin grade bei der Stoppuhr mit PIC 16F84 
gelandet. Habe die Schaltung exakt nachgebaut und siehe da, sie 
funktioniert.
Meine Idee war, die kleinen 7-Segment Anzeigen durch große 100mm 
Anzeigen
zu ersetzen. Habe die Schaltung modifiziert und als Treiber (High) 
UND2981A und als Treiber(Low) ULN2803A verdrahtet. Habe die Schaltung 
mit einfacher Ansteuerung getestet und sie funktioniert. Nun mein 
Problem: Da die kleinen Digits direkt bzw. gem. Anode über einen PNP 
Transistor an den Pic gingen brauchten sie um zu leuchten jeweils ein 
Low Pegel am Ausgang. Mit den beiden Treiber IC's ist es aber umgekehrt. 
Was muss ich nun im Programm ändern? ich habe in meiner Unwissenheit 
schon verschiedene Einstellungen (ISR,Initalisierung etc.) ausprobiert. 
Die Anzeigen bleiben immer dunkel.
Wäre klasse wenn ihr Profis mir einen Tipp geben könntet.

Autor: Anal Ysator (Gast)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
Kalle schrieb:
> Wäre klasse wenn ihr Profis mir einen Tipp geben könntet.

Du meinst also die drei Programme (oder waren es vier)
die im Internet kursieren kennen wir alle auswendig?

Merke: du willst Hilfe und wir sollen helfen. Dann zeige
uns genau was du hast, denn wir sind es leid uns nach
träglich die Informationen aus dem Internet zu holen nur
weil du zu faul dazu bist.

Autor: hinz (Gast)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
Quellcode?

Autor: Teo D. (teoderix)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kalle schrieb:
> Was muss ich nun im Programm ändern?

Überall da wo die betreffenden Ports gesetzt o. gelöscht werden, das 
genaue Gegenteil tun, fettig.

Autor: hinz (Gast)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
Gefunden.

; 7-Segment-Tabelle
Segmente
  addwf  PCL, f
  retlw  B'00011000'  ; 0
  retlw  B'11011110'  ; 1
  retlw  B'00110010'  ; 2
  retlw  B'01010010'  ; 3
  retlw  B'11010100'  ; 4
  retlw  B'01010001'  ; 5
  retlw  B'00010001'  ; 6
  retlw  B'11011010'  ; 7
  retlw  B'00010000'  ; 8
  retlw  B'01010000'  ; 9


Du musst einfach alle '0' durch '1' ersetzen, und vice versa.

Autor: Kalle (Gast)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
Oh je, du bist ja klasse drauf. Ich hab immer gedacht so ein Forum ist 
dazu da um sich zu helfen. Mich als faul zu beschimpfen tut mir echt 
weh, zumal ich 14 Stunden am Tag arbeite. Wenn ich hier in ein 
Wespennest gestochen habe , entschuldige ich mich dafür.Aber trotzdem 
danke für deine schnelle Antwort.

Autor: Kalle (Gast)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
Danke für die Antwort, aber das habe ich getan und nichts passiert.

Autor: Teo D. (teoderix)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
Das war nicht wirklich auf dich gemünzt.
Sowas passiert hier dutzende mal am Tag, bzw. ist quasi Standard, da 
fällt es schwer durchgängig freundlich zu bleiben.

Autor: Kalle (Gast)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
Vielen Dank für deine beruhigende Worte

Autor: Teo D. (teoderix)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kalle schrieb:
> Danke für die Antwort, aber das habe ich getan und nichts passiert.

Dann steck noch woanders der Hund drin. An der SW sollte es aber nicht 
liegen. Tut's der µC überhaupt?

Autor: Thomas E. (picalic)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kalle schrieb:
> Mit den beiden Treiber IC's ist es aber umgekehrt.
> Was muss ich nun im Programm ändern? ich habe in meiner Unwissenheit
> schon verschiedene Einstellungen (ISR,Initalisierung etc.) ausprobiert.
> Die Anzeigen bleiben immer dunkel.

Ich denke nicht, daß das Problem nur am zu ändernden Programm liegt - da 
müsste sich zumindest irgend etwas tun, d.h. die falschen Segmente 
und/oder die falschen Digits angesteuert werden und irgendwas müsste 
aufblinken, wenn auch unlesbar. Aber "alles dunkel" deutet für mich auf 
ein anderes Problem hin, z.B. falsche Polarität der Anzeige.

Autor: MaWin (Gast)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
Kalle schrieb:
> Da die kleinen Digits direkt bzw. gem. Anode über einen PNP Transistor
> an den Pic gingen brauchten sie um zu leuchten jeweils ein Low Pegel am
> Ausgang.

Gut analysiert.

> Mit den beiden Treiber IC's ist es aber umgekehrt.

Richtig.

> Was muss ich nun im Programm ändern?

Welchem Programm. Ich sehe keines. Also kann man nur allgemein sagen, 
dass vor der Ausgabe sowohl der Segmente (was hinz Vorschlag macht) als 
auch der Digits (was er vergessen hat) die betroffenen bits invertiert 
werden müssen.

Autor: Kalle (Gast)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
Ich hab die Schaltung mit einem einfachen Programm, mit dem selben Pic 
getestet. Also Multiplexing mit einfacher Zeitschleife, Ansteuerung 
jeder einzelnen Anzeige etc. alles funktioniert.Habe dann das Programm 
von Sprut(Stoppuhr) mit meinen Änderungen in der 7-Segment Tabelle (also 
bit 0 auf 1 gesetzt) und Portregister modifiziert. Ich werde am besten 
mal meine Änderungen im ASM-Code schicken.

Autor: Thomas E. (picalic)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
MaWin schrieb:
> Welchem Programm.

Es geht vermutlich um dieses Lernbeispiel:
http://www.sprut.de/electronic/pic/programm/stop.htm

Autor: Teo D. (teoderix)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kalle schrieb:
> Portregister modifiziert

Scheint das dabei was schief lief. Ich würde da mal ansetzen zu 
suchen.

Autor: hinz (Gast)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
MaWin schrieb:
> als
> auch der Digits (was er vergessen hat) die betroffenen bits invertiert
> werden müssen.

Mea culpa.

Und auch noch vergessen hab ich die Initialisierung der Ports und die 
Behandlung des Dezimalpunkts.

Morgen ist auch noch ein Tag.

Autor: Kalle (Gast)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
Vielen Dank für eure Tipps, werde alles nochmal überprüfen. Schicke 
Morgen mal den Code. Also schlaft gut.

Autor: Teo D. (teoderix)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hinz schrieb:
> Und auch noch vergessen hab ich die Initialisierung der Ports

Was sollte sich da geändert haben, das er andre Ports verwendet, hat er 
doch nie erwähnt.

Autor: MaWin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Thomas E. schrieb im Beitrag #5402868
> Es geht vermutlich um dieses Lernbeispiel:
> http://www.sprut.de/electronic/pic/programm/stop.htm

Dann muss er halt alle bsf PORTA und bsf PORTB gegen bcf PORTA und bcf 
PORTB ersetzen und alle bcf PORTA und bcf PORTB gegen bsf PORTA und bsf 
PORTB.

Autor: Kalle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hier mal der Code in asm. Meine Änderungen sind unterstrichen alles 
Andere ist nicht verändert worden. Die 4 Siebensegmente sind genauso 
angeschlossen wie in der Sprutschaltung, also an die selben 
Ausgansports.

  list      p=16f84a           ;definiert den verwendeten Prozessor
  #include <p16f84a.inc>       ;in diesem File stehen die Adressen und 
Bitnamen

  ERRORLEVEL      -302

  __CONFIG  _PWRTE_ON & _WDT_OFF & _XT_OSC
; Variablennamen vergeben

w_copy  Equ  0x20    ; Backup für Akkuregister
s_copy  Equ  0x21    ; Backup für Statusregister
Ziffer1  Equ  0x22    ; Wert des LSD
Ziffer2  Equ  0x23    ; Wert der zweitkleinsten Stelle
Ziffer3  Equ  0x24    ; Wert der zweitgrößten Stelle
Ziffer4  Equ  0x25    ; Wert des MSD
Digit  Equ  0x26    ; Ziffernzähler
ar      Equ  0x27
Timer2  Equ  0x28    ; Vorteiler von 50 Hz auf 10 Hz


;**************************************************************
; los gehts mit dem Programm

  org   0
  goto  Init

;**************************************************************
; die Interuptserviceroutine

  org   4
intvec
     bcf  INTCON, GIE  ; disable Interupt

  movwf  w_copy    ; w retten
  swapf  STATUS, w   ; STATUS retten
  movwf  s_copy    ;

  movlw  D'131'    ; 256-125=131 ((1MHz : 32 ): 125 = 250 Hz)
  movwf  TMR0

; Intrupt servic routine
Int_serv

  bcf  PORTA, 0  ; Ziffer1 aus
  bcf  PORTA, 1  ; Ziffer2 aus
  bcf  PORTA, 2  ; Ziffer3 aus
  bcf  PORTA, 3  ; Ziffer4 aus


  decf  Digit,f    ; Ziffernzähler verringern
;Digit=4: anzeigen Ziffer 4
;Digit=3: anzeigen Ziffer 3
;Digit=2: anzeigen Ziffer 2
;Digit=1: anzeigen Ziffer 1
;Digit=0: andere Aktionen, keine Anzeige

  btfsc  STATUS, Z
  goto  Int_0    ; Z-Flag=1 ergo Digit=0
  movfw  Digit
  movwf  ar
  decf  ar, f
  btfsc  STATUS, Z
  goto  Int_1    ; Digit=1
  decf  ar, f
  btfsc  STATUS, Z
  goto  Int_2    ; Digit=2
  decf  ar, f
  btfsc  STATUS, Z
  goto  Int_3    ; Digit=3
  goto  Int_4    ; Digit=4

Int_0
  movlw  5
  movwf  Digit

  btfss  PORTA, 4
  goto  Int_end    ; Stop-Taste gedrückt

  decf  Timer2, f  ; von 5 bis 0 zählen (50 Hz / 5 = 10 Hz)
  btfss  STATUS, Z
  goto  Int_end    ; Timer2 <> 0

  movlw  5
  movwf  Timer2
  incf  Ziffer1, f  ; 1/10 Sekunden erhöhen
  movlw  D'10'
  subwf  Ziffer1, w
  btfss  STATUS, Z
  goto  Int_end    ; 1/10 Sekunden <> 10

  clrf  Ziffer1
  incf  Ziffer2, f  ; 1/10 Sekunden erhöhen
  movlw  D'10'
  subwf  Ziffer2, w
  btfss  STATUS, Z
  goto  Int_end    ; 1 Sekunden <> 10

  clrf  Ziffer2
  incf  Ziffer3, f  ; 10 Sekunden erhöhen
  movlw  D'6'
  subwf  Ziffer3, w
  btfss  STATUS, Z
    goto  Int_end    ; 10 Sekunden <> 6
    clrf  Ziffer3
  incf  Ziffer4, f  ; 1 Minuten erhöhen
  movlw  D'10'
  subwf  Ziffer4, w
  btfss  STATUS, Z
  goto  Int_end    ; 1 Minuten <> 10

    clrf  Ziffer4
    goto  Int_end

Int_1
  movfw  Ziffer1    ; Wert der 1. Ziffer
  call  Segmente
  movwf  PORTB    ; Segmente einschalten
    bsf      PORTA, 0   ; 1. Ziffer einschalten
  goto  Int_end

Int_2
  movfw  Ziffer2    ; Wert der 2. Ziffer
  call  Segmente
  movwf  PORTB    ; Segmente einschalten
  bsf      PORTA, 1   ; 2. Ziffer einschalten
  goto  Int_end

Int_3
  movfw  Ziffer3    ; Wert der 3. Ziffer
  call  Segmente
  movwf  PORTB    ; Segmente einschalten
  bsf      PORTA, 1   ; 3. Ziffer einschalten
  goto  Int_end

Int_4
  movfw  Ziffer4    ; Wert der 4. Ziffer
  call  Segmente
  movwf  PORTB    ; Segmente einschalten
  bsf    PORTA, 3  ; 4. Ziffer einschalten
  goto  Int_end


Int_end  swapf  s_copy, w  ; STATUS zurück
  movwf  STATUS
  swapf  w_copy, f  ; w zurück mit flags
  swapf  w_copy, w

  bcf  INTCON, T0IF  ; Interupt-Flag löschen
  bsf  INTCON, GIE  ; enable Interupt

  retfie

; 7-Segment-Tabelle
Segmente
  addwf  PCL, f
  retlw  B'11100111'  ; 0
  retlw  B'00100001'  ; 1
  retlw  B'11001101'  ; 2
  retlw  B'10101101'  ; 3
  retlw  B'00101011'  ; 4
  retlw  B'10101110'  ; 5
  retlw  B'11101110'  ; 6
  retlw  B'00100101'  ; 7
  retlw  B'11101111'  ; 8
  retlw  B'10101111'  ; 9

;**************************************************************

; Port A/B auf Ausgabe stellen

Init
  movlw  B'00000000'
  movwf  PORTA
  movwf  PORTB    ; Anzeige dunkel
    bsf     STATUS, RP0  ; auf Bank 1 umschalten
  movlw  B'11110000'  ; PortA RA0-RA3 output
  movwf  TRISA
  movlw  B'00000000'  ; PortB alle output
  movwf  TRISB
    bcf     STATUS, RP0  ; auf Bank 0 zurückschalten


; Zeit 0 einstellen

    clrf  Ziffer1
    clrf  Ziffer2
    clrf  Ziffer3
    clrf  Ziffer4


  movlw  5
  movwf  Digit    ; Ziffernzähler einstellen

; 250 Hz-Timer-Interupt einstellen
  bsf     STATUS, RP0  ; auf Bank 1 umschalten
  movlw  B'10000100'  ; internen Takt zählen, Vorteiler zum Timer0, 32:1
  movwf  OPTION_REG
  movlw  D'131'    ; 256-125=131 ((1MHz : 32 ): 125 = 250 Hz)
  bcf     STATUS, RP0  ; auf Bank 0 zurückschalten
  movwf  TMR0

  movlw  5
  movwf  Timer2    ; 50Hz -> 10 Hz Teiler

  bsf  INTCON, T0IE  ; Timer0 interupt erlauben
  bsf  INTCON, GIE  ; Interupt erlauben


loop
    goto  loop    ; eine Endlosschleife

;**********************************************************


  end

Autor: Kalle (Gast)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
Sorry, die Unterstreichung der Änderungen habe ich vergessen.

Autor: hinz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kalle schrieb:
> Sorry, die Unterstreichung der Änderungen habe ich vergessen.

Sieht aber gut aus.

Autor: Friedhelm E. (fredfromflett)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
gerade den Code überflogen

Ist das nicht so das zwischen loop und goto loop
irgend ein Code stehen sollte?
Sonst macht der nichts.


Sorry läuft wohl im interrupt
dann nehme ich alles zurück, und.....

: Bearbeitet durch User
Autor: Kalle (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hier mal der Schaltplan mit den großen Anzeigen. Vorwiderstände sind nur 
für den DP nötig. Ich gehe über ein regelbares Netzteil mit 10 Volt rein 
und die Schaltung (Verpolungsschutz, Treiber etc.) verbraucht ca. 2,4 V 
sodass zur Ansteuerung der 7-Semente ca.7,6 V übrig bleiben. Das bringt 
sie gerade so zum leuchten dass man es noch gut erkennen kann. Die der 
Stromverbrauch der Segmente bewegt sich dann in einem unkritischem 
Bereich.Wie gesagt habe ich die Schaltung mit dem selben PIC mit 
einfachen Testprogrammen (multiplexen, einzelne Ansteuerung der 
Digits)ausprobiert und sie machen das was sie sollen. Ich vermute, dass 
der Fehler irgendwo in dem Interruptprogramm liegt.

Beitrag #5403418 wurde vom Autor gelöscht.
Autor: Thomas E. (picalic)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Servus,

das hat zwar vermutlich nichts mit dem eigentlichen Fehler zu tun (den 
konnte ich in Deinem Code auch noch nicht entdecken - der sieht 
eigentlich richtig aus), aber:
Die SB130 ist sehr seltsam platziert - als Verpolungsschutz wirkt sie so 
nicht für den PIC und den Spannungsregler. Außerdem verschiebt sie das 
Massepotential zwischen PIC und den Treibern. Die sollte wohl besser 
direkt in die (+)-Leitung vom Netzteil.

Autor: hinz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kalle schrieb:
> Vorwiderstände sind nur
> für den DP nötig.

Nein, brauchst du für alle Segmente, der vom DP ist lediglich größer.

Autor: Manni (Gast)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
In der Orginalschaltung von Sprut sind Transistoren in den 
Anodenleitungen. Diese negieren das Signal gleichzeitig. Dein jetziger 
Anodentreiber tut das nicht. Das gleiche bei dem Segmenttreiber. Der 
ULN2803 negiert jetzt das Signal was vorher nicht war. Wenn du beide 
Treiber miteinander austauschst könnte es funktionieren. Oder wie schon 
erwähnt im Programm alle  Portausgaben negieren.

Autor: Kalle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oh, da geb ich dir Recht. Die schützt ja den Spannungsregler nicht. 
Werde sie gleich umlöten. Hat aber keine Auswirkung auf den Ablauf, da 
ich bei meinen Versuchen diese weggelassen habe.
Aber vielen Dank für den guten Tip.

Autor: Kalle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sehr interresanter Vorschlag. Werde ich mal ausprobieren und melde mich 
dann.

Autor: Teo D. (teoderix)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Manni schrieb:
> In der Orginalschaltung von Sprut sind Transistoren in den
> Anodenleitungen. Diese negieren das Signal gleichzeitig. Dein jetziger
> Anodentreiber tut das nicht.

Das wars dann glaube ich.
Den Code für die Segmenttreiber wieder Retoure auf Original.

Manni schrieb:
> Das gleiche bei dem Segmenttreiber. Der
> ULN2803 negiert jetzt das Signal was vorher nicht war.

Nein das tut er nicht, passt also, das dies geändert wurde.

Autor: Manni (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Teo D. schrieb:
> Nein das tut er nicht, passt also, das dies geändert wurde.

trotzdem muss ich die Segmentausgaben jetzt negieren.

Autor: Thomas E. (picalic)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Teo D. schrieb:
> Den Code für die Segmenttreiber wieder Retoure auf Original.

Stimmt doch gar nicht! Mit den Transistoren wird das Digit durch 
Low-Pegel aktiviert, mit dem Treiber aber durch High-Pegel -> muss also 
gegenüber der original-Programmversion invertiert werden!

Autor: Teo D. (teoderix)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Manni schrieb:
> Teo D. schrieb:
>> Nein das tut er nicht, passt also, das dies geändert wurde.
>
> trotzdem muss ich die Segmentausgaben jetzt negieren.

Du meinst sicher ER muss?!

Wie kommst du drauf?
(bin grad zu faul selber zu denken, sorry)

Autor: Teo D. (teoderix)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Thomas E. schrieb:
> -> muss also
> gegenüber der original-Programmversion invertiert werden!

Hat er doch so gemacht, also wieder zurück....

Autor: Kalle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habe mir deinen Vorschlag mal zu Brust genommen, wird aber daran 
scheitern dass der ULN ein NPN Array ist und nur nach GND schalten kann.
Beim UDN ist es umgekehrt. Der ist ein PNP und kann nur nach VSS 
schalten.

Autor: Kalle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Meinte VDD statt VSS

Autor: Teo D. (teoderix)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kalle schrieb:
> Habe mir deinen Vorschlag mal zu Brust genommen, wird aber daran
> scheitern dass der ULN ein NPN Array ist und nur nach GND schalten kann.

ULN2803 Invertiert.
ULN2981 Invertiert nicht!

Autor: Manni (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Teo D. schrieb:
> Wie kommst du drauf?
> (bin grad zu faul selber zu denken, sorry)

Der ULN2803 muss invertiert angesteuert werden. Vorher war ein L 
notwendig um
ein Segment einzuschalten. Jetzt ist ein H notwendig um den ULN2803 nach 
Ground durchzuschalten. ok?

Autor: Teo D. (teoderix)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Manni schrieb:
> Jetzt ist ein H notwendig um den ULN2803 nach
> Ground durchzuschalten. ok?

Ja. Verschwurbelt war, das ich vom TO bereits geänderten Code sprach und 
du vom unveränderten Original Code. :(

Autor: Thomas E. (picalic)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Manni schrieb:
> ein Segment einzuschalten. Jetzt ist ein H notwendig um den ULN2803 nach
> Ground durchzuschalten. ok?

Und bei den Anoden haben im original die Transistoren invertiert und die 
Treiber tun es nicht, also müssen auch diese Signale invertiert werden.
Soweit ich sehe, hat Kalle das aber schon alles richtig gemacht.

Autor: Manni (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kalle schrieb:
> Habe mir deinen Vorschlag mal zu Brust genommen, wird aber daran
> scheitern dass der ULN ein NPN Array ist und nur nach GND schalten kann.

Da hast du recht, aber das Problem ist jetzt klar.
Wie wäre es vor jeden Treiber noch einen Cmos Negator zu setzen. Dann 
stimmt wieder alles.

Autor: Thomas E. (picalic)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn der Schaltplan so mit dem Aufbau übereinstimmt, sind aber beim 
UDN2981 die Ein- und Ausgänge vertauscht!
Pins 1..8 sind nämlich die Eingänge, 11..18 die Ausgänge.

: Bearbeitet durch User
Autor: Kalle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gute Idee. Ist das richtig gedacht von mir, dass ich den Negator mit 
einem N-Channel und einem P-Channel Mosfet aufbauen kann?

Autor: Kalle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ne ist richtig. Die Schaltung würde sonst nicht mit meinen 
Testprogrammen funktionieren.

Autor: Kalle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sorry, du hast natürlich Recht. Im Schaltplan ist es verkehrt 
angeschlossen.
Aber auf meiner Platine ist es richtig herum. Schicke nochmal die 
Änderung

Autor: Thomas E. (picalic)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kalle schrieb:
> Gute Idee. Ist das richtig gedacht von mir, dass ich den Negator mit
> einem N-Channel und einem P-Channel Mosfet aufbauen kann?

Sorry, was soll denn daran eine gute Idee sein? Das wäre für mich 
Kapitulation und hilf- und aussichtsloses herumdoktoren an Symptomen. 
Eine Invertierung der Signale kann man ebenso gut (nein, besser!) per 
Software-Anpassung machen. Und wenn wirklich das das Problem wäre, wären 
die Segmente nicht einfach nur dunkel, sondern würden halt was falsches 
Anzeigen (Minus-Zeichen statt 0 o.ä.).

: Bearbeitet durch User
Autor: Kalle (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hier die Änderung im Schaltplan. Sorry ich hoffe das hat nicht allzuviel 
Verwirrung gestiftet.

Autor: Kalle (Gast)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
Da gebe ich dir natürlich Recht. Die Beste Lösung wäre, das Programm zum 
Laufen bringen. Ich weiß auch nicht ob so ein Negator schnell genug 
schalten kann. Wären dann vielleicht auch wieder neue Fehlerquellen die 
ich mir einbauen würde.

Autor: hinz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kalle schrieb:
> Hier die Änderung im Schaltplan.

Immer noch keine Widerstände...

Autor: Teo D. (teoderix)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Chaos....

Beide Treiber sind aktiv Hi. Der zuletzt gepostet Code macht das.
Wenn NICHTS leuchtet, ist der PIC falsch konfiguriert oder die HW ist 
fehlerhaft.
Du schriebst ja, das du eben diesen Aufbau schon getestet hast. Also 
sollten die Segmente eine gemeinsame Anode besitzen?
Dann bleiben nur noch die Treiber über, bei denen was nicht passt.

Autor: Teo D. (teoderix)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hinz schrieb:
> Immer noch keine Widerstände...

Das juckt die Treiber herzlich wenig.
Die Lebensdauer der LEDs könnte aber massiv verkürzt werden....

Autor: Michael B. (laberkopp)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kalle schrieb:
> Hier mal der Schaltplan mit den großen Anzeigen.

Wie kommt man auf so abstruse Schaltungen ?

Was macht die Diode in GND ?

> Vorwiderstände sind nur für den DP nötig.

Nein, natürlich nicht, wie kommt man auf so einen Unsinn ?

Bei Sprut findet man so einen Unsinn nicht, der hat Widerstände drin und 
keine dumme Diode.

Und wenn denn mal die Anzeigen wirklich common anode sind,
bei Mouser steht common cathode aber im Datenblatt common anode
https://www.mouser.de/ProductDetail/Kingbright/SA40-19GWA?qs=DkZGzo4b%252bTL8vrYSjxcvgg==

Kalle schrieb:
> Hier die Änderung im Schaltplan.

Häh ?

Thomas E. schrieb:
> Wenn der Schaltplan so mit dem Aufbau übereinstimmt,

Das auch noch.

Thomas E. schrieb:
> Soweit ich sehe, hat Kalle das aber schon alles richtig gemacht

Im Programm scheint es zu passen.

Manni schrieb:
> Wenn du beide Treiber miteinander austauschst könnte es funktionieren

Dann braucht er common cathode statt common anode Displays.

Autor: Kalle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
An alle freundlichen Menschen die mich hierbei unterstützt haben.
Die Schaltung funktioniert jetzt. Der Quarz hat sich verabschiedet.
Habe jetzt einen 16f627a drin (hatte keinen Quarz mehr) und es läuft.
Vielen vielen Dank für eure Mühe

Autor: Teo D. (teoderix)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Teo D. schrieb:
> Dann steck noch woanders der Hund drin. An der SW sollte es aber nicht
> liegen. Tut's der µC überhaupt?

Kalle schrieb:
> Ich hab die Schaltung mit einem einfachen Programm, mit dem selben Pic
> getestet.

:(

Kalle schrieb:
> Der Quarz hat sich verabschiedet.

Muss nicht sein, der 16f84(a) hat da etwas Schwierigkeiten, manche 
Quarze anschwingen zu lassen. Da hilft ein 1MOhm parallel dazu.

Autor: Kalle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wieder was gelernt

Autor: Furkan O. (albertus)
Datum:

Bewertung
-2 lesenswert
nicht lesenswert
Hallo
Was hast du letzendlich alles geändert?
Ich versuche seit fast einer Woche den selben kode mit pic16f84a und bin 
dabei erfolgslos.
Hat jemand vielleicht noch in Tipp?

Autor: daumendrücker (Gast)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
Versuchs weiter mit dem selben kode. Vielleicht klappt es irgendwann 
mal.

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.