www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik PIC18 Timeroder Interrupt


Autor: rapeur (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,
ich habe seit drei Tage eine Funktion mit Verzögerung probiert aber 
nicht geschafft. Ich habe mit der Delay-Funktion probiert und geschafft 
aber leider passt nit mit der Aufgabe(mit eine verzogerung funktioniert 
die anderen befehlen nicht). ich will jetzt mit interrupt oder Timer 
Probiert.ich habe viel probiert und nicht geschafft. ich verwende 
PIC18F4550 in Programm MPLAB mit compiler C (20MHz). ich moechte ein 
kleines Beispiel wo das Signal 100ms später kommt. ich habe schon im 
Forum gesucht aber nicht gefunden. ich brauche euer Hilfe
Gruß

Autor: Latissimo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
TMR0 benutzen!

wenn du FOSC von 20Mhz hast, dann wird der Timer mit 5Mhz also alle 
0,2us einen takt hochgezählt. dieser Timer ist 8 bittig, also kannste 
ohne prescaler(der Takt, der auf den Timer geht, wird vorgeteilt) nur 
bis 51 us pause erzeugen. am besten wäre ein interrupt mit tmr0 oder 
tmr1(16 biggig)

im interrupt hast du dann nen zähler, der beim x-ten interrupt dein 
ereignis auslöst.

oder wenn während der verzögerung nix passieren soll, dann kannste ne 
for schleife verwenden, in der du x-mal bis zum tmr0-überlauf wartest

for(x-mal)
{
  tmr0 = 0;
  while(tmr0 < ...);
}

das wäre dann die unelegante, einfache lösung!

Autor: Latissimo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hier mal der interrupt mit tmr 0


#include "int16CXX.h"  //Brauchste für Interrupts

#pragma origin 4

interrupt serverX( void)
{

  int_save_registers
  if(T0IF)                // T0 übergelaufen?
  {
       OPTION = 1;   //Prescaler einstellen
       TMR0 = 200;   //Timer-Startwert initialisieren
       T0IF = 0;       //Flag zurücksetzen
       //hier aktion z.B. Zähler, d. bei x-tem interrupt was tut

  }
  int_restore_registers
}                 // Interrupt-Routine zu ende

Autor: Latissimo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
3. Möglichkeit:



void delay_ms(uns16 ms)                // pause
{
    while (ms)
    {
        OPTION = 2;                    // Vorteiler auf 8 einstellen
        TMR0 = 131;                    // 125 * 8 = 1000 (= 1 ms)
        while (TMR0);                  // Abwarten einer Millisekunde
        ms--;                      // "ms" mit jeder Millisekunde 
erniedrigen
    }
}


dann aufrufen mit :

delay_ms(100)  // du musst den prescaler noch auf deine Taktung anpassen

               // bei OPTION = 2 wird FOSC/4 durch 8 geteilt.


die 125 die du da siehst, kommen wie folgt zustande: 256-131(8bittiger 
zähler läuft ja über nach 125 takten wenn er mit 131 ini wird.)

Autor: Master Snowman (snowman)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wenn du bis morgen warten kannst, kann ich dir von zu hause ein 
dummy-timer-interrupt-progrämmchen mitnehmen, das genau für deinen PIC 
passt...

@ Latissimo: bist du sicher, dass "int16CXX.h" zur C18-bibliothek 
gehört?

edit: arbeitest du mit dem Microchip-USB-bootloader? falls ja -> ich 
hatte auch meine probleme bis die interrupts liefen (nur vektor ummapen 
ging nicht)

Autor: Latissimo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oh ja kann sein, dass das bei andern compilern anders ist!

Denke aber, dass du immer so eine headerfile brauchst, wie auch immer 
diese bei dem jeweiligen comiler heißt.

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.