mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Hilfe - PIC 16F768 Resetet sich sändig - Hilfe


Autor: Joachim Scherz (captainfuture)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute,

ich bin ziemlich am verzweifeln. Ich hab mir ne NIXIE Uhr gebaut und mit 
MPLAB
4.72 das Programm für oben genannten µC geschrieben. In der Simulation 
läuft es tadellos, stundenlang, aber ihr werdet es euch sicher schon 
denken im µC eben nicht und ich weiß ehrlich nicht warum. Der PIC 
resetet sich alle paar Sekunden von selbst, ohne Regel, grad so wie es 
ihm einfällt. Ich hab alles versucht was mir eingefallen ist, aber ich 
bin am Ende mit meinem Latein. Vielleicht hat jemand Lust sich das 
Programm mal anzuschauen und mir den Fehler mitzuteilen.

Zur Uhr:

Nixie Uhr mit 8stelliger Anzeige um das Datum mit Jahrtausend 
anzuzeigen,
4fach Zeitmultiplex immer 2 Röhren gleichzeitig. 2 unabhängige 
Alarmfunktionen, An und Abschalt Zeit frei programmierbar.

Die Uhr läuft mit einem 4,... MHz Quarz. Die Hauptschleife nebst Zugang 
zum Konfigurationsmenü läuft tadellos, der Fehler muß irgendwo in der 
ISR liegen, aber mir bleibt ehr einfach verborgen...über Hilfe würde ich 
mich sehr freuen.

:-))
Joachim

Autor: Otto (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Joachim,

> Der PIC resetet sich alle paar Sekunden von selbst,
> ohne Regel, grad so wie es ihm einfällt.

Eventuell it es ein Hardwareproblem z. B. mit der
5V-Versorgung oder der Nixie-Ansteuerung.

Hast Du die 5V-Spannungsstabilisierung nach "allen Regeln"
aufgebaut:

- Netztrafo mindestens 9V
- Ausreichend dimensionierter Siebelko
- 100nF direkt an Spannungsreglerein- und Ausgang
- Haben alle IC einen 100nF Kondensator von Ub gegen GND

Gruss Otto

Autor: Joachim Scherz (captainfuture)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Otto,

also die KM555 Treiber IC's haben jeweils einen 22nF Co, ebenfalls der 
PIC.
Die Spannungsversorgung wird klassisch mit nem 7805 geregelt welcher am 
Eingang nen 470µF Co hat und am Ausgang nen 10µF Co. Die Nixies werden 
mit Hilfe eines Schaltnetzteils versorgt welches ja nur 2Röhren 
gleichzeitig versorgen muß. Kannst dir ja mal den Schaltplan 
anschauen...

Joachim

Autor: Otto (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Joachim,

die 100nF solltest Du nachrüsten, die könnten es
bringen - am Besten SMD so dicht wie möglich von
7805 Eingang zu Masse und Ausgang zu Masse.

Gruss Otto

Autor: Joachim Scherz (captainfuture)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
OK, werd ich die Tage mal machen. Und wie müßen die da rein? Paralle zu 
den beiden anderen oder wie soll ich das verstehen? Weist, das seltsame 
is, manchmal geht sie richtig, stundenlang und dann passierts einfach, 
andere uhrzeit, anderes Datum, etc.

Autor: Otto (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es ist m. E. auch ungünstig, das die Kathoden von D1
und D2 miteinander verbunden sind - eine getrennte
Siebung für 5V und Schaltregler sind günstiger.

Davon abgesehen, sollte parallel "C15" auch ein 100nF
liegen.

Otto

Autor: Otto (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du schriebst "resettet" - wenn die Zeit "wegläuft",
könnten es auch die "Rundsteuerimpulse", Leuchtstoff-
lampen usw. sein.

Gruss Otto

Autor: Joachim Scherz (captainfuture)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Okay, hab ich eingezeichnet und werd ich ausprobiern, aber dann kriegt 
der 7805 nur noch eine Halbwelle ab, meinst du das reicht? Hast du dir 
die ISR mal angeschaut, nich das es ein Software Problem is und ich 
jetzt meine Schaltung umsonst "masakriere" ;-)


Joachim

Autor: Otto (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Joachim,

Du fragst: "wie müßten die rein ?"

und ich schrieb:

> am Besten SMD so dicht wie möglich von
> 7805 Eingang zu Masse und Ausgang zu Masse.

damit ist gemeint:

direkt und so Dicht wie möglich an die Löt-
pads des Spannungsreglers.

Und wegen des "Springens" der Uhrzeit:

Evtl. wäre es günstiger, die Uhr quarz-
gesteuert laufen zu lassen, denn besser
1 Minute im Monat als jeden Tag eine Zufalls-
zahl auf dem Display.

Gruss Otto

Autor: Joachim Scherz (captainfuture)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also die Zeit läuft in diesem Fall nicht einfach weg, die Sekunden sind 
schon noch Sekunden, nur Stunden, Minuten, Tage, Monat und Jahr haben 
dann einfach falsche Werte oder ihm fällt ein auf einmal über die 9 
hinaus zu zählen...Eben wars noch 2007 und von einer Sekunde zur anderen 
wirds 2050 und ne Zeitmaschine hab ich halt echt nicht gebaut...

Joachim

Autor: Otto (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> nur noch eine Halbwelle ab

gutes Argument - dann lass es so und spendier
dem Spannungswandler eine weitere Diode von
den gemeinsamen Kathoden "D1" und "D2

> nich das es ein Software Problem is und ich
> jetzt meine Schaltung umsonst "masakriere" ;-)

Gegenargument:

> Weist, das seltsame is, manchmal geht sie richtig,
> stundenlang und dann passierts einfach,
> andere uhrzeit, anderes Datum, etc.

Otto

Autor: Joachim Scherz (captainfuture)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Uhr läuft Quarz gesteuert, der Timer 0 zählt bis zum Überlauf und 
anschließend wirds nochmal durch 4096 geteilt was dann 1,000001 Sek. 
genau ist, anschließend werden die Sekunden hochgezählt und je nachdem 
obs die 10 wird oder nich gehts in der Routine weiter bis zum Jahrzehnt, 
das passt schon alles. Es wird auch nur Bank 0 genutzt und ich hab 
aufgepasst das ich nie über Stacklaevel 4 hinauskomme bzw in der ISR 
arbeite ich nur mit Sprüngen. Die Alarmzeit und die An bzw Abschaltzeit 
werden auch nur zur vollen Minute abgefragt.

Joachim (Leipzig)

Autor: Otto (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Joachim,

> die Sekunden sind schon noch Sekunden,
> nur Stunden, Minuten, Tage, Monat und Jahr haben
> dann einfach falsche Werte oder ihm fällt ein
> auf einmal über die 9 hinaus zu zählen...
> Eben wars noch 2007 und von einer Sekunde zur anderen
> wirds 2050 und ne Zeitmaschine hab ich halt
> echt nicht gebaut...

genau das kenne ich von einer Digitaluhr, die ich
vor langer Zeit mal mit TTL-IC gebaut hatte und
da war garantiert kein Programm die Ursache...

Gruss Otto

Autor: Joachim Scherz (captainfuture)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Okay okay, hast mich überzeugt. Wenn ich dich also richtig verstehe ist 
das Problem der 7805 weil der nicht genug Saft kriegt wenn das 
Schaltnetzteil in nem ungünstigen Moment schaltet und das Problem wäre 
wahrscheinlich behoben wenn ich nochne dritte Diode mit einbau.

Gruß Joachim

Autor: Ruf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hast du im Configwort des PICs den Watchdog abgeschaltet? Falls nicht 
würde ich das mal ausprobieren, hört sich für mich so an, als ob es 
daran liegen könnte.

Autor: Otto (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Joachim,

davon abgesehen machst Du VIEL ZU VIEL in der ISR:

da gehört nur die "Sekundenauswertung" rein und
sonst nichts !

Andernfalls bekommst Du u. U. Probleme, wenn mehrere
Bedingungen erfüllt sind und die ISR zu lange dauert.

Otto

Autor: Joachim Scherz (captainfuture)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das sieht nur so viel aus, die meißten Teile werden ja nur einmal im 
Monat abgefragt. Bzw, 3x Monat, wodurch sie maximal einen Interrupt 
verpennt und das macht mir halt echt nix aus. Es ist auch mein 1. 
Assembler Programm und mir viel z. B. fürs multiplexen keine bessere 
Lösung ein.

Joachim

Autor: Joachim Scherz (captainfuture)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nein, der Watchdog ist an und wir rechtzeitig zurückgesetzt, daran 
liegts nicht und der soll auch laufen.

Joachim

Autor: Ruf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gut, wenn du dir SICHER bist, dass der immer rechtzeitig rückgesetzt 
wird, ok. Würde ihn aber trotzdem mal testweise ausschalten, ist viel 
weniger aufwändiger als an der Hardware rumzubasteln.

Autor: Otto (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Joachim,

überlege erst mal, wie Du die C und die Diode
mit geringstem Aufeand am besten integrieren
kannst und dann teste erstmal nur die HW-Änderung.

Weniger in der ISR durchzuführen, macht den MPX
doch nicht anders...

Du setzt in der ISR ein "Sekunden-Änderungsflag",
testest alle Bedingungen und setzt es am Ende
zurück - alles andere bleibt - oder ?

Otto

Autor: Joachim Scherz (captainfuture)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Für die Hardware Änderungen kommt wohl für die Kondesatoren nur SMD in 
Frage, da ich mich voll auf die Multisim und mich verlassen hab und die 
Platinen geätzt hab. Die Diode werd ich auf der Unterseite einbauen, die 
hab ich noch hier und werd die heut noch einbasteln...

Joachim ;-)

Autor: Joachim Scherz (captainfuture)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das abgefahrene is auch das die Uhr Störungen an meinem Fernseher 
verursacht... :-)

Joachim

Autor: Michael U. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich weiß zwar nicht, was vorn als Trafo dranhängt, aber ein Netzfilter 
könnte auch helfen. Impulse aus dem Netz können durch übliche Trafos und 
7805 usw. durchaus "durchmarschieren".

µC sind da zwar nicht unbedingt so anfällig wie mein damaliges TTL-Grab, 
aber ausschließen würde ich es nicht unbedingt. Ich habe mich damals mit 
einem 0,1µ/1500V direkt über der Primärseite des Trafos gerettet. Damit 
war dann Ruhe...

Evtl. helfen auch ein CF über der Eingangsspannung vor den Dioden.

Gruß aus Berlin
Michael

Autor: Joachim Scherz (captainfuture)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Steckernetzteil AC/AC 230V/8,5V von Pollin für 1,86€

wohl nicht das Beste...

Joachim

Autor: Otto (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Das abgefahrene is auch das die Uhr Störungen an meinem Fernseher
> verursacht... :-)

das sind die fehlenden Kondensatoren - das kenne ich

Der Watchdog würde übrigens immer zur gleichen Bedingung
"zuschlagen" also beispielsweise um "23:59:59"

Gruss Otto

Autor: Otto (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Steckernetzteil AC/AC 230V/8,5V von Pollin für 1,86€

wieviel mA ?

Autor: Joachim Scherz (captainfuture)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Richtig, tut er aber nicht, ist vollkommen egal ob er an oder aus is. 
Wie gesagt das klappt. Hab alle Möglichkeiten durchrechnen lassen und 
die Zeit gestoppt.

Joachim

Autor: drcrazy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
http://www.sprut.de/electronic/pic/config/config.htm

auszug :
Auch ein PIC kann abstürzen. Damit das ohne schlimme Folgen bleibt, löst 
der Watchdog in so einem Fall automatisch ein Reset des PIC aus.
Der Watchdog ist ein kleiner Timer im PIC, der einen eigenen internen 
RC-Taktgeber besitzt, und somit von der Funktion des PIC unabhängig ist. 
Dieser Watchdogtimer (WDT) löst, wenn er eingeschaltet ist, alle 18 ms 
(Toleranzbereich: 7 ms ... 33 ms) ein Reset des PIC aus. Der Reset kann 
nur verhindert werden, wenn das im PIC laufende Programm den WDT immer 
wieder zurücksetzt, bevor er einen Reset auslösen kann. Dieses 
Rücksetzen erfolgt mit dem Befehl clrwdt (oder sleep).

Das ordnungsgemäß laufende Programm muß also so programmiert werden, daß 
in kurzen Abständen (z.B. alle 5 ms) der Befehl clrwdt ausgeführt wird, 
dann kommt der WDT nicht dazu ein Reset auszulösen. Stürzt das Programm 
aber ab, wird der WDT nicht mehr gelöscht und startet den PIC neu.

Falls 18 ms zu kurz sind, kann man den Vorteiler des TIMER1 benutzen und 
so einen WDT-Zyklus von bis zu 2,3 s einstellen. Dann steht der 
Vorteiler aber dem TIMER1 nicht mehr zur Verfügung.

Ohne besondere Notwendigkeit sollte man den WDT nicht verwenden, da er 
die Programmentwicklung kompliziert.

vielleicht hilft das

Autor: Uwe Nagel (ulegan)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@drcrazy
WDT aus oder ein hat er doch schon probiert, hilft nicht.

@Joachim
Hab mir das Programm angeschaut. Sehr undurchsichtig...
Sei nicht so geizig mit Unterprogrammen, der PIC hat 8 Stackebenen, 
nicht nur 4. Viele Sequenzen im Programm wiederholen sich völlig oder 
fast gleich mit unterschiedlichen Eingabedaten. Das kann man viel kürzer 
mit Unterprogrammen erschlagen. Dann scheinst Du da Bits umzusortieren, 
da die Nixiedekoder in einer unglücklichen Reihenfolge angeschlossen 
sind, sowas ist zwar schön fürs Layout, aber hässlich im Programm.
Zuviel in der ISR, ist zwar nicht unbedingt schön, geht aber. Die 
Interruptroutine kann ja auch nicht unterbrochen werden. Ich habe schon 
Programme gesehen, deren Hauptprogrammschleife besteht aus einem 'goto 
mainloop'.
Das wirre Verhalten kann sehr wohl ein Hardwareproblem sein. 
Abblockkondensatoren sind wichtig. Auch am Reset-Pin sollte ein kleiner 
Kondensator gegen Masse hängen (4,7 .. 47nF).
Schaltungen, die man im Fernseher sieht haben ein Problem, die stören 
sich auch selbst! Das Schaltnetzteil mit dem 555 kommt mir verdächtig 
vor, stört das vielleicht schon, wenn der PIC noch garnicht läuft? Dann 
wird sich der PIC in dieser Schaltung auch nicht wohl fühlen...
Die Simulation läuft bei mir nicht wirklich. Gut ich habe die Eingänge 
für die Taster nicht auf 1 gesetzt, man darf wohl nicht alle Tasten 
gleichzeitig drücken.
Eine Sekunde ist bei mir auch zu lang, oder Du hast einen exotischen 
Quarz. Genaue Zeiten mit 4MHz gehen beim PIC nur mit Timer 1!
Versuche erstmal eine Minimalversion zum laufen zu bringen. 
Initialisierung und Multiplexen der Displays im Interrupt. Einfach was 
statisches Anzeigen. Ohne der ganzen Uhrenkram. Wenn das geht, weiter 
ausbauen. Die Uhr dazu, dann mit Stellen und zum Schluss den Alarm.
Dann bleiben die Probleme überschaubar...
Hast Du ein Oszilloskop? Spannungen überprüfen! Testausgaben im Programm 
auf freie Portleitungen und auf dem Oszi schauen, ob das Programm da 
auch vorbeikommt.

Uwe

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich kenn mich mit PICs nicht aus, aber das Banksel als erstes im 
Interrupt bereitet mir Bauchschmerzen.

Müßte man nicht vorher die alte Bankauswahl retten, ehe man die Bank 
umstellt ?

Als Main würde ich jedenfalls allergisch reagieren, wenn mir ein 
Interrupt die Bank unter den Füßen wegreißt.


Peter

Autor: Uwe Nagel (ulegan)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die banksel-Makros werden übersetzt zu
bcf STATUS,RP0
bcf STATUS,RP1
ändern also Bits im Status-Register.
In Joachim's Programm sind reichlich viele und an falscher Stelle.

Der Anfang der Interrupt-Routine sollte besser so aussehen:
 movwf w_temp ; Arbeitsregister in Sicherheit bringen
 swapf STATUS,w ; Status->W ohne Status zu ändern
 movwf status_temp ; STATUS sichern
 bcf STATUS,RP0 ; jetzt die Page 0 anwählen (oder über banksel)
 bcf STATUS,RP1
 ...

Am Ende:
 swapf status_temp,w ; STATUS zurück und damit auch wieder die alte Bank
 movwf STATUS
 swapf w_temp,f ; w zurück
 swapf w_temp,w
 retfie

status_temp und w_temp liegen über $70, das ist aus allen Banks 
erreichbar, auch das STATUS-Register kann in allen Banks unter der 
gleichen Adresse angesprochen werden.

Die ganze Bank-switcherei kann er sich auch schenken, da er ausser in 
der Initialisierung nur Adressen in Bank 0 anspricht, aber sicher ist 
sicher...

Autor: Joachim Scherz (captainfuture)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Abend,

also die Bansel Geschichten hab ich eingebaut um zu schauen obs an der 
Bankumschaltung lag, da dieser Befehl den Pic in die richtige Bank 
zwingt, hat nichts gebracht ist mitlerweile gestrichen. Der Quarz hat 
4,194304Mhz was sich genau auf 1s teilen läßt, wirklich genau. Die 
"undurchsichtigen" Portabfragen waren auch zur Fehlerdiagnose um 
auszuschließen das es an einem Prellen der Taster liegt, sind 
mittlerweile auch gesrichen. Die Bitrotationen, gut das würde ich bei 
der nächsten Uhr auch anders machen, aber der Bus für die Daten der 
Uhrzeit ist ziemlich lang muß shließlich aufs andere Board und um Fehler 
im Bus zu vermeiden hab ich die Leitungen so angeordnet, daher die 
Rotationen, aber die funktionieren einwandfrei, werden Timing technisch 
auch ausgeglichen so, dass das multiplexen auch annähernd gleich lang 
ist. Was die Unterprogramme angeht, es ging dabei auch darum 
auszuschließen das es mir aus Versehen passiert das er jenseits seiner 
Stacklevel springt. Daher ein paar gotos mehr, kann ich aber wieder in 
calls ändern wie ich jetzt weiß. Da das Programm in der Simulation 
einwandfrei läuft, wenn man die btfss Abfragen in der Hauptschleife und 
in der Bitrotation in btfsc ändert (In der Schaltung schalte ich von 5V 
gegen 0V) weiß ich auch. Es lief auch mit den banksel Befehlen. Ich bin 
mitlerweile soweit das ich sage es liegt nicht am Programm, eher an der 
Hardware. Hab gestern Abend versuchsweise nen 47pF Kerko parallel zu C15 
geschaltet und siehe da, um 00.00 schaltete sie sich aus und um 06.00 
schaltete sie sich wieder an, erst als sie dann das Datum mit allen 8 
Röhren angezeit hat war leider nicht der 1.3.2007 sondern der 0.3.2007. 
Was mir sagt das es nicht am Programm liegen kann, sonst wäre sie in den 
6h auch schon ausgetickt und garantiert nicht von selbst wieder 
angegangen.

An Otto, hab das mit der 3. Diode probiert und oben genannten 47p ko 
eingebaut, aber das Ergebnis war das die Treiber IC's erst so richtig 
gesponnen haben, aber das Schaltnetzteil kriegt dann halt nur noch eine 
Halbwelle ab und das scheint erst recht zu stören. Daher werd ich noch 
die 3 100nF SMD Kondensatoren einbauen, 2 am Spannungsregler und 1 
zwischen Pin 1 und Pin 8 vom NE555, da das die Flankensteilheit erhöht, 
wie ich mitlerweile herausgefunden hab den 10µF Kondensator am 7805 
werde ich ebenfalls in 2,2µF ändern, da das dem Spannungsregler besser 
ermöglicht die Spannung stabil zu halten und er schneller auf die 
Störgröße wirken kann.
Geänderten Schalplan habe ich angehängt. Nochmal vielen Dank für die 
Hilfe.

In meinem nächsten Post werde ich das geänderte und um die vielen 
Banksel bereinigtes Programm stellen. Wie gesagt ändert man die 3 btfss 
Abfragen in btfsc läßt es sich einwandfrei simulieren und läuft Tage. 
Wenn es ein Programmfehler wäre würde er auch wiederkomm, immer zum 
selben Event, tritt aber unregelmäßig auf, daher eher Hardware. Wir 
haben die Uhr auch mal Tagelang nur mit 6Röhren läufen lassen, ohne 
Schnick Schnack und da ging alles einwandfrei, es scheint erst zu 
passieren wenn alle 8 aktiv sind.

Grüße Joachim (Leipzig)

Autor: Joachim Scherz (captainfuture)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hier das geänderte Programm

Joachim (Leipzig)

Autor: Joachim Scherz (captainfuture)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hier die Version zum simulieren mit den geänderten PORTA Abfragen.

Joachim (Leipzig)

Autor: Uwe Nagel (ulegan)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Scheint ja langsam besser zu werden ;-)
Aber die Datumsberechnung geht trotzdem nicht. Bei mir liefert die 
Simulation nach dem 28.02.07 den 09.02.07

Hier geht was schief:

;****** Datum ***************************************

;??? warum löschst du hier den Tages-Zehner ???
; so wird aus dem 28. der 08.
    clrf  ZT
; der hier zum 09. wird
    incf  ET, f      ;1 Tag erhöhen
    movlw  D'10'      ;10dez ins Arbeitsregister schreiben
    subwf  ET, w      ;Arbeitsregister von DatumU abziehen und Ergebnis 
im Arbeitsregister stehen lassen
    btfss  STATUS, Z    ;Übergehe die nächste Zeile wenn Zero Flag 
gesetzt
    goto  Schaltjahr    ;1 Tage <> 10

    clrf  ET        ;lösche ET
    incf  ZT, f      ;10 Tage erhöhen
    goto  Int_end      ;springe zu Int_end
;!!!! hier kommt das Programm nie hin !!!
; hier wird aus den zwei Datumsbyte ein BCD-Byte gemacht.
; Hättest du gleich in BCD gerechnet...
    movf  ZM,0      ;Schreibe ZJ ins Arbeitsregister
    andlw  0x0F      ;Arbeitsregister mit 0x0F UND verknüpfen
    movwf  Monat      ;Arbeitsregister nach Monat schreiben
    swapf  Monat,1      ;obere und untere 4 Bit von Monat vertauschen
    movf  EM,0      ;Schreibe EJ ins Arbeitsregister
    andlw  0x0F      ;Arbeitsregister mit 0x0F UND verknüpfen
    iorwf  Monat,1      ;Arbeitsregister mit Monat ODER verknüpfen 
Ergebnis in Monat stehen lassen


Später soll dieser BCD-Wert verglichen werden, da steht dann zB:
;*** Oktober? ***

    movlw  D'10'      ;10 in Arbeitsregister schreiben
    subwf  Monat,0      ;Arbeitsregister von Monat abziehen und Ergebnis 
im Arbeitsregister stehen lassen

Du vergleichst hier die Dezimalzahl 10 (Hex 0A) mit der BCD-Zahl 10 (Hex 
10). Vergleiche mit 0x10! Genauso im November und Dezember.


Uwe

Autor: Joachim Scherz (captainfuture)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Okay, danke, hab ich schon geändert. Wie ich oben schon geschrieben hab 
is das
mein erstes großes Assemblerprogramm. Dachte das wär egal ob D'10' oder
Hex. Wieder was gelernt. Die "clrf ZT" Zeile hab ich nachträglich 
eingefügt.
Hast recht, völliger Unsinn, is auch schon gelöscht. Der einzige Fehler 
den
das Ding jetzt noch hat ist das das Multiplexen ab und an einfach stehen 
bleibt und ich weiß nicht warum. Genau deshalb hab ich den WDT 
eingeschaltet
aber es scheint nicht zu funzen. Gerade eben hat sich auch wieder das 
Datum
umgestellt... zum verzweifeln...

Joachim

Autor: Otto (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Joachim,

wofür koppelst Du eigentlich die Netzfrequenz in den Controller - dies 
ließ mich ursprünglich vermuten, dass die Uhr netzsynchron arbeiten 
soll. Die Diode für den Schaltregler sollte schlußendlich (nachdem ich 
es dann richtig verstanden hatte) von den zusammengeschalteten Kathoden 
von "D1" und "D2" zum Elko des Schaltreglers - hier ist Gleichspannung 
und nicht nur 1 Halbwelle. Der "555" reagiert übrigens schon immer sehr 
empfindlich auf Störungen - speziell in "Langzeitanwendungen" die Du 
hier aber nicht hast.

Gruss Otto

Autor: Joachim Scherz (captainfuture)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Richtig gesehen. Ich hatte ursprünglich vor eine ganze Reihe von 
Features zu
integrieren. DCF77, falls kein Empfang dann Netzsynchron da die 
Netzfrequenz nicht schwankt, zudem sollte noch ein Bewegungsmelder 
integriert werden IS471,
über denn sich dann nachts die Röhren einschalten lassen, falls man mal 
aufwacht und wissen will wie spät es ist, Alarm deaktivierung ebenfalls 
über den Bewegungsmelder und zu guter letzt noch ein LDR über den sich 
die Röhren in Abhängigkeit zur Helligkeit im Raum dimmen. Mit dem LDR 
gehts aber nur direkt über die Anodenspannung da die ausgeschalteten 
Röhren das spinnen anfangen wenn das Multiplexen ausbleibt. Hab ich 
alles aus Zeitgründen fürs erste gestrichen, soll aber noch integriert 
werden, wenn die Uhr läuft und ich nach meinen Prüfungen wieder Zeit hab 
oder spätestens im Winter wenn ich eh nicht weis was ich anfangen soll. 
Aber die Hardware ist darauf vorbereitet. Alternativ hab ich auch schon 
überlegt die Uhr W-LAN fähig zu machen damit sie sich die Zeit aus dem 
Netz lädt, aber das mach ich irgendwann wenn dementsprechende 
Aplikationen erschwinglich sind und sie eben endlich läuft. Morgen geh 
ich mal zu Conrad und hol mir die SMD Elkos und dann läuft sie 
hoffentlich endlich rund... ;-))

Joachim

Autor: Otto (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Joachim,

bis Du die Netzfrequenz nutzt, könntest Du diesen Eingang
abklemmen und gegen GND kurzschließen - evtl. "fängt" sich
der Controller hier auch einen Teil der Störungen ein.

Gruss Otto

Autor: Joachim Scherz (captainfuture)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ach ja zum Netzteil, das schafft 1,3A, das sollte durchaus ausreichen. 
Jedoch mit vorsicht zu genießen, das das Schaltnetzeil das auch locker 
schafft.

Joachim

Autor: Joachim Scherz (captainfuture)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So, HW ist geändert. Mal sehen was passiert...

Joachim

Autor: blubblub (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
tja.. wenn mann halt einen PIC benutzt.........................

Autor: Joachim Scherz (captainfuture)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Selber Fehler. :-((

Autor: tastendrücker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Keine Lösung, aber mal ein Tip:

Du kommentierst Dein Programm zwar reichlich aber ungünstig. Das 
erschwert eine Fehlersuche ungemein! Speziell, wenn andere Dein Programm 
verstehen sollen.

Beisp:

  clrw    ;lösche Arbeitsregister

Das 'clrw' das WREG löscht, ist jedem (PIC) Programmierer klar. Das muss 
nicht im Kommentar stehen. Besser wäre, funktional zusammenhängende 
Blöcke am Anfang zu kommentieren nach der Devise "Was wird gemacht" und 
nicht "Wie wird's gemacht".

Beispiel:

; Zehner-Minuten zählen. Ende wenn kein Überlauf
  clrf   EM
  incf   ZM, f
  movlw  D'6'
  subwf  ZM, w
  btfss  STATUS, Z
  goto   Int_end


Autor: Joachim Scherz (captainfuture)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Richtig, aber wie man im Kopf lesen kann, nicht nur so zum Jux sondern 
is halt auch klein wenig für die Schule, da legt man leider Wert drauf. 
Hätte uns viel Zeit erspart wenn es anders gegangen wäre.

Joachim

Autor: Joachim Scherz (captainfuture)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Problem erkannt, Problem gebannt.

Fehlerquelle: Schaltimpuls von Q9 und C5 zu klein.

Lösung: C5 ändern von 49pF auf 100pF.

In der Simulation sahs ganz gut aus und sie läuft jetzt auch schon ne 
Weile.

:-))

Joachim

Autor: Joachim Scherz (captainfuture)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich wollte mich hier noch für die umfangreiche Hilfe bedanken.

Die Uhr geht und tut was sie soll :-))

Nochmals danke

Joachim

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Joachim Scherz wrote:
> Fehlerquelle: Schaltimpuls von Q9 und C5 zu klein.

Ich bin wohl blind.

Ich sehe weder Q9 noch C5

Was für ein Schaltimpuls ist das denn ?

Wo gibts denn überhaupt 49pF ?


Peter

Autor: Joachim Scherz (captainfuture)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Upps, Q11 und ich meinte natürlich 47pF.
Der IRF730. ;-)

Joachim

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.