-         

Ergebnis 1 bis 9 von 9

Thema: Timingproblem

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    20.03.2007
    Beiträge
    9

    Timingproblem

    Anzeige

    Hallo Leute,

    ich komm irgendwie mit dem Timer nicht klar.
    Ich versuch mal zu erklären was ich bisher verstanden hab:
    PIC läuft mit internem Takt von 37kHz
    1/4 davon kann ich nutzen für den Timer, bedeutet 9,25kHz
    Den Prescaler hab ich auch 1:2 eingestellt, was wiederum bedeutet 4,625kHz
    Wenn ich den Timer jetzt von '0' ab zählen lassen läuft der 18,066... mal pro Sekunde über. Richtig?

    Dazu hab ich mir nen Zähler programmiert der ab 18 bei jedem Timerüberlauf um 1 runterzählt. Ist der Zähler bei 0 angekommen sollte ca. 1 Sekunde vorrüber sein. Richtig?

    Nach dutzenden von Versuchen das mit der Stoppuhr abzustoppen (LED blinkt) bin ich zu dem Schluss gekommen das nur ca. 1 halbe Sekunde vorrüber is. Ist in meiner Rechnung was verkehrt oder bin ich einfach nur Depp?

  2. #2
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    07.05.2006
    Alter
    29
    Beiträge
    122
    Hallo

    Ich verstehe deine Rechnunug noch nich so ganz. Erstens einmal, wäre der Interne Takt schon 1/4 des externen Takts, also vom Takt des Quarz. Der ganze Pic läuft nur mit 1/4 des externen Taktes. (Das hat seinen Grund in der RISC-Architektur, damit ist fast jeder Befehl in einem Takt-Zyklus ausführbar.) Bei deiner Rechnung oben ist nicht so klar, wievel mal du geteilt durch 4 rechnest und wieviel der externe Takt ist.

    Zudem solltest du noch sagen, welchen Timer (8-Bit oder 16-Bit) du verwendest und weleche Werte du für den Autoreload der Register gesetzt hast. Sonst kann ich deine Werte nicht wirklich nachvollziehen.

    quote: oder bin ich einfach nur Depp?
    Das kann ich so nicht sagen
    Anything that can go wrong, will go wrong. Kabel sind entweder zu lang oder zu kurz...

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    20.03.2007
    Beiträge
    9
    Sorry, falsch ausgedrückt. ich meine natürlich den internen oszillator. ich verwende keinen externen.
    Dieser ist eingestellt auf 37kHz.

    Als Timer verwende ich einen 8-Bit Timer.

    Was heisst "Autoreload der Register"?


    Achja, bei dem verwendeten PIC handelt es sich um einen 16f627A

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    07.12.2005
    Ort
    Euskirchen-Großbüllesheim
    Alter
    67
    Beiträge
    2.063
    @Rev0luTio
    Deine Berechnung stimmt so weit:
    Frequenz : 4 : 2 (Prescaler) = 4,625kHz
    Ab hier wird es einfacher zu rechnen, wenn Du die Frequenz in Zeit umwandelst: 1 : 4,625kHz = 0,216 ms.
    Das Timer-Register wird alle 0,216ms um 1 erhöht, bei 255 (0xFF) erfolgt ein Überlauf nach 0. Dabei wird das Timer-Flag gesetzt und evtl. ein Interrupt ausgelöst.
    Mit der obigen Konfiguration kannst Du Zeiten von 255...256=1 * 0,216ms = 0,216ms bis 0...256=256 * 0,216ms = 55,296ms einstellen.
    Je nach Timer gibt es allerdings noch weitere Skalierungs-Möglichkeiten.
    Für längere Zeiten würde ich einen Timer so initialisieren, daß er jede Millisekunde einen Interrupt auslöst. In der Interrupt-Routine kannst Du dann leicht weitere Zähler z.B. bis auf 0 dekrementieren und bei 0 wieder mit einem (Zeit-)Wert laden.
    MfG Karl-Heinz
    HobbyElektronik hier klicken ....

  5. #5
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    07.05.2006
    Alter
    29
    Beiträge
    122
    na so,
    da du die Preload-Register offenbar nicht verwendest, nehme ich wie von kalledom bereits geschrieben, an, dass ein Durchgang des Timers 55.296ms benötigt. Da aber 55.269*18=995.328ms gibt, ist noch nicht geklärt, wo der Fehler passiert ist, dass du empirisch nur 0.5sek erkennst.
    So auf den ersten Blick kann ich mir nicht erklären, woran das liegen könnte. Aber wenn du sagst, dass du den internen Oszi verwendest, könnte das Problem eventuell an dessen Ungenauigkeit liegen. Ich hab zwar die Taktgenauigkeit eines internen Oszillators zwar noch nie überprüft, aber so vom hören-sagen soll die ja angeblich nicht gerade der Hit sein.
    Vielleicht kannst du für das Blinklicht mal einen externen Quarz oder Oszillator nehmen und schauen, ob es sich verbessert. Aber wie gesagt; ist nur ne vermutung.

    greez
    Anything that can go wrong, will go wrong. Kabel sind entweder zu lang oder zu kurz...

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    20.03.2007
    Beiträge
    9
    Also es lag wohl tatsächlich an der Ungenauigkeit des internen Oszis.
    Das wäre somit geklärt. Auch hab ich es geschafft das der PIC genau das macht was er soll, aber... und damit tut sich auch schon ein neues Problem auf.

    Im Testboard läuft er einwandfrei. Jetzt hab ich ihn auf ne Platine gebastelt und stelle fest: Er startet nicht.
    Schaltplan im Anhang!

    Die Led sollte beim starten angehen!

    Das komische ist, wenn ich statt des verwendeten Spannungsreglers ein 5V Universalnetzteil nehme startet er. Ich kann dann sogar den Kondensator weglassen
    Angehängte Grafiken Angehängte Grafiken

  7. #7
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    08.10.2004
    Ort
    ferd. Waldmüllerg. 7/2
    Alter
    32
    Beiträge
    456
    Hum, hast du nachgemessen, ob der Spannungsregler "regelt"? Weil eigentlich braucht ein 7805 noch mindestens 2 Kondensatoren am Ein- und Ausgang, damit er stabil und sicher läuft (sich nicht hochschwingt).

    Ansonsten, hast du bei deinem PIC den extrenen MCLR abgeschaltet? Weil wenn nicht, dann brauchst du noch ein Pull-up auf den entsprechenden Pin des µC.
    Aja, dem LED würde ich nur so aus Gefühl noch nen Vorwiderstand verpassen, es ist schon richtig, dass die Pins des PIC ein LED mit Strom versorgen können, doch hab ich bis jetzt irgendwie nie der internen Strombegrenzung der Pins vertraut . So um 500 Ohm müssten vollkommen reichen.

    MfG
    Mobius

  8. #8
    Neuer Benutzer Öfters hier
    Registriert seit
    20.03.2007
    Beiträge
    9
    Der Spannungsregler liefert mir konstant 4,25 V, soweit ich das mit meinem 5 € Messgerät beurteilen kann.
    MCLR ist aus.
    Wie schon gesagt, mit nem 5V Universalnetzteil funktionierts ja. Das soll aber net Sinn der Sache sein.
    Welche Kondensatoren soll ich verwenden und wie muss ich die am 7805 beschalten?

  9. #9
    Erfahrener Benutzer Roboter Genie Avatar von BMS
    Registriert seit
    21.06.2006
    Ort
    TT,KA
    Alter
    26
    Beiträge
    1.192
    hi

    die 4,25 V sind aber zu wenig. der 5V-Regler heißt ja so, weil er ja 5Volt liefern soll . die eingangsspannung sollte mindestens 2volt höher sein als die ausgangsspannung (also mindestens 7 Volt an den Eingang. [EDIT: ah, in deinem schaltplan steht 12Volt - das müsste der reler doch gut schaffen])
    dreh' mal die eingangsspannung auf - dann müsste er wirklich auf 5v regeln.
    ansonsten stimmt was nicht mit deinem messgerät (mal batterie wechseln?)

    zu den elkos und kondensatoren - ein bild sagt mehr als 1000 worte:
    http://bwir.de/images/schaltungen/sr_s.gif

    mfg
    BMS

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •