www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik PIC 16F690 Capture / Timer1


Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo ich hab für meine Diplomarbeit folgendes Problem.. Wir haben ganze 
zeit C# programmiert und jetzt haben wir ein kleines Nebenprojekt wo wir 
über einen PIC (16F690) eine geschwindigkeit messen müssen...

Folgendes Problem ich habe am RC5 (CCP1) einen Button geschlossen (der 
soll fürn anfang einen Lichtschranken simulieren) d.h wenn ich den 
Button drücke soll der Timer 1 anfangen zu zählen und wenn ich ihn 
nochmal drücke soll er aufhören zum zählen. Jetzt versteh ich nicht 
wirklich wie ich das lösen soll und was das auf sich hat mit den Capture 
Mode usw... Ich habe versucht die Datenblätter zu verstehen aber keine 
Ahnung wie. Ich hoffe ihr könnt mir vlt ein bisschen weiter helfen

danke im vorraus

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielleicht fängst du mal damit an die Aufgabenstellung so genau wie 
möglich zu beschreiben.

Der PIC kann das Starten und Stoppen von Timer1 auf Tastendruck ganz 
sicher - auch ohne die Capture-Compare Funktion an RC5, wobei die es 
natürlich einfach macht.
Schau Dir im Datenblatt zunm CCP-Modul die Beschreibung des 
Capture-Modes an. Da stehen die notwendigen Einstellungen und Register. 
Eventl. nochmals bei Timer1-Modul schauen was dort für den Capture-Mode 
gesetzt sein muss.

Ach ja - C# hilft nicht viel beim PIC. Schau mal ob eine 
Studentenversion des HiTech - C-Compilers bereits bei Microchip 
verfügbar ist. Die haben HiTECH gekauft und stellen ihre eigenen Compler 
immer kostenlos zur Verfügung.
MPLAB downloaden, Compiler installieren und los geht's!
Viel Spass
Karsten

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für die schnelle Antwort. Hab mir gerade das durch gelesen was ich 
geschrieben habe und ich muss zu geben es ist echt etwas unverständlich 
=)

also nochmal zur Aufgabenstellung.

Meine erste Aufgabe war es einen LC-Display dazu zuschließen und diesen 
zu initialisieren. Das war ja relativ einfach für einen Laien wie mich.

Im Endeffekt soll dieses Projekt folgendes können: Wir haben eine 2m 
lange Plexiglasröhre mit 4 Lichtschranken. Wenn ein Gegenstand durch 
diese Röhre durchfliegt soll der PIC mittels des Timers die Zeiten 
messen und Werte wie Beschleunigung, Geschwindigkeit und Zeit ausgeben.

Ich hänge jetzt daran, dass ich überhaupt nicht weiss wie ich vorgehen 
soll. Inwiefern hängt dieser Capture Mode mit dem Timer1 zusammen ? Mein 
Professor meint ich brauche diesen Capture Mode unbedingt dazu.

Und mit C# habe ich nur gemeint, dass ich ganze zeit nur auf c# ebene 
programmiert habe und deshalb es für mich etwas schwieriger ist einen 
pic zu programmieren obwohl es ja eh C ist aber ja ...

den PIC programmiere ich eh auf Hi-Tide und MPLAB

mfg martin

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Deine Beschreibung bringt etwas mehr Licht ins Dunkle...also der Capture 
mode funktioniert so, dass bei jeder fallenden  steigenden  jeder 4ten 
oder 16ten steigenden Flanke die Timerwerte aus Timer1 in die 
Capture-Register übernommen werden.

Damit ist die Umsetzung klar:
mit der 1ten Lichtschranke startes Du den Timer1 und aktivierts den 
Capture mode, bei der fallenden oder steigenden Flanke (abhängig von der 
Logik der Lichtschranke) der Lichtschranke 2 findet das erste 
Capture-Event statt.
Netterweise generiert das Capture Event einen Interrupt in dem man 
schnell die Werte der Capture-register sichern kann.
Sobald fertig auf den nächsten Capture-Interrupt von Lichtschranke 2 
warten, Werte sichern usw...

Nun hast Du 3 Timerwerte (Differenzen bilden :-)) ), kennst Deine 
Zeitbasis (Taktfrequenz) und den Abstand der Lichtschranken. Daraus 
sollte sich Geschwindigkeit und Beschleunigung errechnen lassen.

Alternativ kannst du auch den Timer frei laufen lassen und auf das 
Capture-event bei der ersten Lichtschranke warten - dann hast Du 4 
Timerwerte aber du must den Timerüberlauf abfangen für alle 4 Werte bei 
der Differenzbildung.

Das Einzige was etwas dauert ist die richtige Software zu schreiben... 
Initialisierung der Register für den Capture mode (immer ins Datenblatt 
schauen und auch das Error-Sheet zu dem Controller aknn hilfreich sein) 
und den Timer.

MfG
Karsten

P.S.: ich hab mich auf die CCP1 vom 16F88x bezogen - Dein PIC sollte 
aber auch so funktionieren.
Bi Problemen helf ich gern weiter..

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Soo ich bin jetzt mal so weit das wenn ich den Button auf RC5 (CCP1) 
drücke ... das sich da was tut wenn ich die register auslesen will...

nur wie zähl ich jetzt mit wieoft ich den Button schon gedrückt habe bzw 
z.b nach den 4. Knopfdruck will ich den Timer abdrehen..
wie mach ich das jetzt gibts da ein eigenes Bit im Timer register oder 
sowas ???

lg

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
eine Möglichkeit ist Zählen, aber recht fehlerträchtig....

Vlt. kannst du ja auch die Lichtschranke 1 an den externen Interrupt INT 
(Port RB0) anschliessen und somit den ganzen Messvorgang starten.
Hat einfach den Vorteil, dass Du Dich nie verzählen kansst und immer 
saubere Startbedingungen hast.

Zählen der Tastendrücke geht natürlich auch, aber du musst es selbst 
erledigen - es gibt keinen HW-Zähler der das erledigt. Du musst nur 
sicher sein, dass Du nie einen Wert verlierst damit die Sache dauerhaft 
funktioniert. Eventl. kannst du "verlorene" Werte auch über einen 
Timeout abfangen damit kein totaler Unsinn rauskommt.

Ok - bei der Lösung mt dem Start-Interrupt musst du auch mitzählen um 
den Messvorgang zu beenden, aber das ist deutlich einfacher.

MfG
Karsten

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hmm ich würd es gerne zählen, da es nicht so genau sein muss ...

Ich habe echt wenig ahnung von PIC Programmierung ...

ich will ja nicht das du mir jetzt den ganzen code oder so sagst nur 
könntest du mir vielleicht ein paar tipps geben wie ich anfangen soll 
dieses problem zu lösen ??

soll ich da den TMR1ON beim ersten druck einschalten und beim 4. 
abschalten ?? nur wie ich kann ich das machen bzw in welches register 
werden die werte dann gespeichert ??

sorry dass ich dich so nerve vielleicht wegen dem =) aber es scheint das 
du ziemlich viel ahnung davon hast.. danke

mfg
Martin

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also...
Du sollst bei ersten Tastendruck den Timer1 starten und das CCP1 auch 
starten. Dann bei ersten CCP1-Event (nächster Tastendruck) hast Du die 
Timerwerte im CCP-Register stehen und ein Interrupt wird ausgelöst 
(vorher aktivieren). In dem Interrupt speicherst Du das CCP-Register 
(16bit!)
und wartest auch den nächsten Event.
Am Ende der 4 Ereignisse hast Du 3 Werte gespeichert. Aus Deiner 
Zeitbasis (Takt) und den Werten kannst Du Geschwindigkeit und 
Beschleunigung errechnen.
Ach ja beim Tastendrücken solltest du ans Prellen denken. Das wird 
bestimmt etwas ungenau mit enem Taster..

MfG
Karsten

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.