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


von Heyhey H. (Firma: unbekannt) (heyhey91)


Angehängte Dateien:

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

von Lehrmann M. (ubimbo)


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ß

von Lehrmann M. (ubimbo)


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.

von Lehrmann M. (ubimbo)


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

von Lehrmann M. (ubimbo)


Lesenswert?

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

http://www.sprut.de/electronic/pic/programm/lauflicht/lauflich.htm#warte

nach 4 Beiträgen bin ich jetzt still

von stephan (Gast)


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.

von Udo R. S. (Gast)


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 :-)

von stephan (Gast)


Lesenswert?

@ Udo R.
Du hast natürlich Recht ...

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.