www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik PIC Verzögerung 1 Sekunde, wie berechnet sichs ?


Autor: Heyhey Heyhey (Firma: unbekannt) (heyhey91)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Ich hab mit einem PIC und dem MPLAB von der Herstellerfirma der Chips 
ein kleines Programm geschrieben, das halt ein KITT Licht erzeugt, wo 
die LEDs im Abstand von einer Sekunde blinken, allerdings versteh ich 
überhaupt nicht, warum die 3 Delay Schleifen eine Sekunde ergeben.



Ich weiß, dass ein Befehl 4 Taktzyklen braucht und die Sprunganweisungen 
8, der PIC taktet mit 4 Mhz





könnt ihr mir erklären, warum mein Code für eine Verzögerung von 1 
Sekunde sorgt, ich verstehs nämlich nicht, wie man das ausrechnet.


lg HeyHey

Autor: Lehrmann Michael (ubimbo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

soweit ich das weiss braucht ein Befehl 1 Zyklus braucht / eine 
Sprumarke logischerweise 2.
Es gibt gute online Rechner für die wait loops.
mit ASM ist es am besten sich mit www.sprut.de zu beschäftigen. Hier 
gibt es alles für Assembler was das Herz begehrt. Von der LCD Uhr wo 
jeder Taktzyklus genauestens berechnet ist bis zu weiss gott ich was =)

Im Datenblatt gibt ist für jeden Befehl auch die entsprechenden 
Zeitangaben.

@4MHz braucht ein NOP genau eine ns.

4MHz ist eine "angesagte" Taktfrequenz - einfach mal nach pic loops 
calculator googln.

http://www.biltronix.com/picloops.html

is ganz ok ! und freeware..

Gruß

Autor: Lehrmann Michael (ubimbo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
huup hab ned genau gelesen: ööm das is wie eine mehrfach verschachtelte 
schleife.

for(durchlaufe 100 mal){
 for(durchlaufe 50 mal){
  for(durchlaufe 1000 mal){
   warte!
  }
 }
}

damit wir "warte!" 1000*50*100 mal aufgerufen

warum man nicht einfach 5000000 auf einmal aufruft?

also

for(durchlaufe 5000000 mal) {
 warte!
 }

?????

nunja die kleineren PICs kommt mit seinen 8 Bit halt gut nur mit zahlen 
bis 2^8 zurecht also 256. sonst muss man rumtricksen und so 
verschachtelt man lieber.

Autor: Lehrmann Michael (ubimbo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ojemine ich chaos typ =)

bei 4 Mhz ist der Zyklustakt selbstverständlich 1 MHz.

Von diesen Zyklustakten braucht der PIC normalerweise 1 bei 
Sprungmarken, etc. 2. Da lagst du korrekter als ich.

Ausserdem habe ich mich nochmal vertan: 1µS sind es bei 4 Mhz und nicht 
eine 1ns!


Hier das hab ich dir noch rausgesucht:


Diese Wartezeit von 1 Bit wird mit der Routine Warte_s erledig. Die 
Wartezeit ist von der gewünschten Baudrate der RS-232-Verbindung und vom 
PIC Takt abhängig. Das Prinzip der Warteschleifen habe ich schon in 
einem anderen Beispiel erläutert.

Bei 9600Bps ist ein Bit genau 1/9600 Sekunde lang, das sind 104 µs.
Bei einem PIC-Takt von 4 MHz, werden Befehle im PIC mit einem Zyklustakt 
von 1 MHz abgearbeitet. Jeder Befehl (mit Ausnahme der wenigen Befehle, 
die 2 Zyklen lang sind) dauert folglich 1 µs.
Die Schleife von 'Warte1' bis zu 'goto Warte1' ist im Programm 6 Zyklen 
lang (goto benötigt 2 Zyklen), ein Durchlauf benötigt folglich 6 µs. Um 
1 Bit lang (also 104µs) zu verzögern, muß man die Schleife 16 mal 
durchlaufen. Diese durchläufe benötigen 96µs. Die noch verbleibenden 8 
µs verbauchen der Aufruf  von Warte_s, das Laden von cycl_2 sowie das 
Return.

;**********************************************************
;ein Bit Zeitverzoegerung mit einer Warteschleife
;
; senden            4 MHz    10 MHz
; 2400 Bps =          69d    173d
; 9600 Bps =          16d     43d

Warte_s movlw   D'16'           ; 9600 Bps / 4 MHz senden
        movwf   cycl_2          ;
Warte1
        nop
        nop
        nop
        decfsz  cycl_2, 1
        goto    Warte1
        return

Autor: Lehrmann Michael (ubimbo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So mein Gott: hier ist endlich der ultimative Link für Assembler & 
Warteschleifen.

http://www.sprut.de/electronic/pic/programm/laufli...

nach 4 Beiträgen bin ich jetzt still

Autor: stephan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Warteschleifen haben aber ein Problem: sie sind nicht so genau wie 
ein Timer. Beim Timer kann man nebenher noch etwas anders machen, Tasten 
pollen o.ö., ich arbeite daher bei Verzögerungen lieber mit den Timern. 
Der Aufwand ist minimal: Timer konfigurieren im INIT, beim Aufruf: Timer 
setzen und Timerflag pollen.

Autor: Udo R. S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@stephan
Das ist sein erstes PIC Programm. Bei seinem 3 oder 5 wird er den Timer 
dann auch nutzen. Lass ihm Zeit zu lernen :-)

Autor: stephan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Udo R.
Du hast natürlich Recht ...

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.