www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik PIC: Verzögerung läuft nicht wie geplant


Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich hab da ein kleines Problem mit ner Verzögerung. Und zwar will ich 
nen Delay von einer Minute aufbauen. Als PIC kommt ein PIC16F54 zum 
Einsatz.

Von der Sprut-Seite hab ich mir die Verzögerungsroutine geklaut und ein 
wenig modifiert sodass ich, grob, auf eine Minute komme. Aber meine 
Mathekenntnis lässt mich grade wohl im Stich denn die Verzögerung ist 
deutlich länger als eine Minute:
    movlw  .240        ;240 Schleifendurchgänge für 1 Minute: 60*4*250ms=240*250ms=1min
    movwf  outerloop
;*******geklaut von Sprut*******
loop1  movlw  .250        ;250 Schleifendurchgänge für 250ms
    movwf  innerloop
;delay für eine Millisekunde, 1 MHz Oszilator
loop2  movwf  .27         ;110/4=27.5, 110 fuer 4 MHz
    movwf  onemsloop
loop3  nop
    nop
    nop
    nop
    nop
    nop
    decfsz  onemsloop      ;onemsloop bei 0?
    goto  loop3        ;nein, nochmal durchlaufen
;delay für eine Millisekunde ist fertig
    decfsz  innerloop      ;innerloop fertig?
    goto  loop2        ;nein, nochmal durchlaufen
;*******geklaut von Sprut*******
;250 mal eine Millisekunden-Schleife ausgeführt    
    decfsz  outerloop      ;outerloop bei 0?
    goto  loop1        ;nein, nochmal durchlaufen

Stelle ich outerloop auf 4 ein für eine Sekunde dann läuft das Ganze 
zwischen drei und vier Sekunden (die eine Minutenvariante hab ich nicht 
ausgemessen). Als Oszilator habe ich einen RC-Schwingkreis (Config auf 
RC eingestellt) aber auch mit nem 4 MHz Quarz komme ich nicht hin. Kann 
es sein, dass der Oszilatoreingang am PIC kaputt ist? Ich hab leider 
derzeit keinen zweiten PIC mit dem ich testen könnte. Hab zwar hier 
neben dem 16F54 noch zwei 16F84 aber die sind mit dem PICKIT2 nicht 
programmierbar. Vielleicht ist aber auch was am Code falsch und jemandem 
springt es jetzt so direkt ins Auge nur ich seh mal wieder nix.

Autor: K. J. (theborg0815) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi 1MIN bei 4mhz sieht bei mir wie folgt aus nen rc kanste für ne 
Zeitbasis knicken selbst nen Quarz ist da je nach Temperatur ziemlich 
anfällig zum kurtz mal ne min überbrücken geht es.

; Zeitverzögerung = 0.99999300s mit Osc = 4.00000000MHz

delay_1_sec
  movlw  D'6'
  movwf  ZählerC
delay_1_sec_loop
  call  sub_delay_1_sec
  decfsz  ZählerC,1
  goto  delay_1_sec_loop
  return

sub_delay_1_sec
  movlw  D'217'
  movwf  ZählerB
  movlw  D'111'
  movwf  ZählerA
sub_delay_1_sec_loop
  decfsz  ZählerA,1
  goto  sub_delay_1_sec_loop
  decfsz  ZählerB,1
  goto  sub_delay_1_sec_loop
  return

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für deine Mühe, ich hab meinen Fehler gefunden.

folgende Zeile (Zeile 7 im obigen Post von mir) war/ist falsch gewesen
loop2  movwf  .27         ;110/4=27.5, 110 fuer 4 MHz

Da muss natürlich
loop2  movlw  .27         ;110/4=27.5, 110 fuer 4 MHz

stehen. Ich glaub da ist es für mich zu Spät, vielleicht hilft ein 
Kaffee? Die Pause hat aber geholfen, wird Zeit für das WE.

Klar, ein RC-Schwingkreis ist für zeitkritische Sachen nicht wirklich zu 
gebrauchen aufgrund der Toleranzen aber mir genügen in meiner Anwendung 
auch 57 Sec oder 66 Sec. Es müssen nur ungefähr 60 Sekunden sein. Da 
soll eine Pumpe nachdem der Schwimmer wieder auf low geht noch ca. eine 
Minute nachpumpen ;)

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.