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
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
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
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..
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
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
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.