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.
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.
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.
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.
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.
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?
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.
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.
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.
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.
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.
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.
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.....
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.
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.
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.
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.
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.
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!
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)
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.
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!
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?
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. :(
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.
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.
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.
Sorry, du hast natürlich Recht. Im Schaltplan ist es verkehrt
angeschlossen.
Aber auf meiner Platine ist es richtig herum. Schicke nochmal die
Änderung
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.ä.).
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.
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.
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.
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
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.
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?