Forum: Mikrocontroller und Digitale Elektronik Stoppuhr (PIC16F876A)


von Faruk F. (r91cky)


Lesenswert?

Hallo

Ich bin ein Quereinsteiger beim PIC allgemein. Ich muss unter anderem
eine Stoppuhr programmierunden die mit erstdruck auf taster am RA3
startet und zweitdruck (selber) taster stoppuhr anhält , mit assembler,
habe probleme mit dem quarz. ich benutze einen externen quarz von 4MHz.
Die Anzeige sind 7_segemtanzeige, zwei für stunde und zwei für minuten.
ich muss es irgendwie schafften dass die zeitbasis sekunden sind, damit
ich dann die minuten und stunden verädnern kann. Leider weiss ich nicht
wie ich das schaffen soll. habt ihr da eine idee?

das ist die erste frage :-)

von Geri (Gast)


Lesenswert?

Hallo Faruk

Vielleicht so:
fcpu / 4 = 1000000Hz  // ist beim PIC so

1000000 / 16 = 62500 Hz  (Prescaler)

Initialisiere einen der 16bit Timer mit 65535-62500 bei jedem Üb==> 1
Hz

Lege eine Interrupt-Routine an, die mit einem 16-bit imer gekoppelt
ist. Die Interrupt-Service Routine wird bei jedem Überlauf des Timers
aufgerufen.
Darin stehet

void ISR_TIMERXY(void)
{

   Seconds++    // increment time base
   TMRXY = 3035; // division by 62500 (65535-62500)
   TMRXYIF= 0;  // clear timer overflow flag

}

Beste Grüsse
Geri

von peter dannegger (Gast)


Lesenswert?

Stopuhr im Minutentakt ?

Die haben doch üblicher Weise 1/100s Anzeige.


Du must zuerst einen Plan machen und dann die Aufgabe aufteilen, z.B.
in der Reihenfolge:

- Multiplexinterrupt für Anzeige
- 7-segment dekodieren
- Binär nach dezimal wandeln
- Zählen
- Tastenentprellung
- Zeitbasis


Mit Assembler aufm PIC hast Du es Dir aber nicht gerade einfach
gemacht.


Peter

von Steffen (Gast)


Lesenswert?

"Mit Assembler aufm PIC hast Du es Dir aber nicht gerade einfach
gemacht."

Nervt irgendwie langsam aber sicher!

@Faruk F.

Schau mal in der Codesammlung, dort findest du ein Beispiel für eine
Belichtungsuhr für den 16F876(A). Auf der Grundlage sollte es kein
Problem sein eine Stoppuhr zu programmieren. Dort habe ich zwar ein
LCD-Display verwendet aber Beispiele für die Ansteuerung der
7-Segmentanzeige gibt es genügend. Z.B. www.sprut.de.

von Geri (Gast)


Lesenswert?

Hallo

Wenn es sich nicht gerade um eine Schul- oder Studienarbeit handelt
oder ausdrücklich Assembler gefordert ist, dann würde ich jedenfalls
auch den Einsatz eines C-Compilers vorschlagen.

Wichtige Gründe sind z.B.:
1.) Entwicklung der Software vielfach zuerst als Windows-Anwendung
möglich
2.) Bedeutend geringerer Entwicklungszeit herein
3.) bessere Lesbarkeit des Code
4.) Meiner Meinung absolut wichtig: Bedeutend weniger Aufwand beim
Wechsel auf einen anderen Controller oder Compiler. Nach ein paar
Jahren, ist man vielleicht auch froh darüer
5.) Ein Programm ist nur so gut wie des der Entwickler erstellt hat.

Für den PIC16 gibt es sehr günstige und leistungsfähige Controller.

Die Aufgabe von Faruk kann man m.E. gut mit einem C-Compiler
realisieren.

Assembler mach meiner Meinung dann Sinn, wenn sehr hohe Anforderungen
an das Timing gestellt werden. Es gibt evtl. auch Bibliotheksroutinen,
die aus Performancegründen durch ASM etwas effizienter gestaltet werden
können.


Freundliche Grüsse

Geri

von Faruk F. (r91cky)


Angehängte Dateien:

Lesenswert?

Hallo

Danke euch für die Zahreichen Antworten

Das Projekt ist sehr umfangreich, ich muss noch eine uhr + umstellen
von UTC auf GTM per tasten druck, einstelln der uhr, speichern der
uhrzeit beim auslösen eines tasters, wieder speichern beim auslösen
eines tasters. Die daten in eeprom speichern..

einfach gesagt das teil ist ein Flugdatenloggbuch. und ich muss es
LEIDER in assembler und mit 7 segement anzeige machen, weil das bei der
Dipl. arbeit gefordert ist.

das projekt hab ich mal als anhang getan.

@ Geri: danke für deine anregung, aber wie soll ich das in assembler
machen, in C wäre das einfacher, da stimm ich dir zu. aber wie gesagt
ich muss es in assembler machen

von peter dannegger (Gast)


Lesenswert?

"und ich muss es LEIDER in assembler und mit 7 segement anzeige machen,
weil das bei der Dipl. arbeit gefordert ist."

???

Ne Diplomarbeit sollte ja eigentlich praxisbezogen sein, d.h. das
Ergebnis ist entscheidend, nicht der Weg dorthin. Den Weg muß man nur
erklären können.


7-Segment nehme ich auch immer gerne, ist viel besser ablesbar.
LCD nehme ich nur, wenn es auf den Strombedarf ankommt oder viel Text
zu lesen ist.


Peter

von Geri (Gast)


Lesenswert?

Hallo Faruk

Schau mal hier:

http://www.sprut.de/electronic/pic/programm/sequenc/sequenc.htm

Sprut zeigt hier u.a. wie das Gerüst einer Interrupt Service Routine
aufgebaut ist. Nach dieser Vorlage kannst du den oben aufgeführten Code
umsetzen.

Beste Grüss
Geri

von Faruk F. (r91cky)


Lesenswert?

Hi

Danke für eure raschen Antworten.

@peter dannegger

Du hast recht, aber in unseren team ist einer ausgefallen und er hat im
Projekthandbuch bereits erwähnt dass er sich für assembler entschieden
hat. der doddle hatte all seine unterlagen auf laptop und extere
festplatte, beides wurde ihm gestohlen, (wohnung ausgeraubt). möchte
nicht weiter drauf eingehen.

fakt ist ich muss es machen. aber danke trotzdem

werde mich drauf stürzen , und hoffe bei fragen euch konsultieren zu
können.

mfg Faruk

von Bernd (Gast)


Lesenswert?

Hi,

Den Timer: Mit Timer1 und CCP1 (Compare) kannst Du eine "Zeitbasis"
schaffen, die alle 1/100tel (oder weniger hektisch) einen INT auslöst,
der dann die Zeit zählt.

Das Hauptprogramm darf man aber doch auch in PicBASIC schreiben und den
daraus generierten Assemblercode abgeben ??? ;-)

von Geri (Gast)


Lesenswert?

Hallo Bernd

Wenn du dich mit "weniger hektisch" auf den oben dargestellten
Lösungsansatz beziehst, dann siehst du, dass der Interrupt nur jede
Sekunde einmal aufgerufen wird.

f=fosc/4/16/62500 = 1Hz ==> 1s

Ich denke, die Verwendung des CCP-Registers bringt hier keine Vorteile

Freundliche Grüsse

Geri

von Steffen (Gast)


Lesenswert?

Die Verwendung des CCP-Modules bringt schon Vorteile. z.B. könnte man
bei ungenauem Quarz per Compare-Wert die Abweichung korrigieren. Der
Lösungsansatz oben berücksichtigt übrigens nicht die Zeit zum Einsprung
in die ISR bzw. bis zum Neuladen des Timers. Die Uhr würde also zu
langsam laufen.

von Geri (Gast)


Lesenswert?

Hallo Steffen

Du hast schon recht, eine bestimmte Ungenauigkeit (z.B. durch
Nichtberücksichtigung der Dauer für den Einstprung bis zur zum Neustart
u.a.) hat die Uhr, diese liesse sich bei der oben geforderten
Genauigkeit aber auch per Software korrigieren. Das machen viele noch
genauere Uhre auch so:)

Was mich aber interessieren würde: Wie würdest du die Uhr mit Hilffe
des CCP-Modules die die Abweichun des Quartzes korrigieren?

Freundliche Grüsse
Geri

von Steffen (Gast)


Lesenswert?

Der CCP-Interrupt (Compare-Mode) wird ausgelöst, wenn der Timer mit dem
Wert von CCPRx übereinstimmt. Also alle x*Vorteiler Takte. Läuft der
Quarz etwas zu schnell, müsste man den x vergrößern. An sonste wird x
verringert.

Das Stichwort Belichtungsuhr führt zu keinem gescheiten Ergebnis in der
Suche. Hier -->
http://www.mikrocontroller.net/forum/read-4-29195.html#29195 findet ihr
das Beispiel, was ich oben angesprochen habe.

von Geri (Gast)


Lesenswert?

Hallo Steffen

Besten Dank für die Info. Werde mir die Seite mal anschauen.

Freundliche Grüsse
Geri

von peter dannegger (Gast)


Lesenswert?

Du brauchst ja eh einen schnellen Interrupt zum Multiplexen der Anzeige
(~1ms) und zum Tasten entprellen. In dem kannst Du dann eine Variable
runterzählen, bis eine Sekunde um ist.


Wie man einen genauen beliebigen Teilerfaktor erhält, ist vom Prinzip
her hier erklärt:

http://www.mikrocontroller.net/forum/read-4-57760.html#new


Wenn das CPP so funktioniert, wie das "Clear on Compare" beim AVR ist
das unbedingt zu verwenden.
Mit einem Reload im Interrupt, das von der Interrupteinsprungzeit
abhängig ist, kriegst Du sonst nie eine vernünftige Zeitbasis hin.


Peter


P.S.:
Häufig sieht man leider das Multiplexen durch die rein zufällige
Laufzeit der Mainloop.

Davon würde ich dringen abraten, denn solche Programme sind nur schwer
wartbar und erweiterbar. Oft flackern sie oder die Digits haben
unterschiedliche Helligkeit.

von Faruk F. (r91cky)


Angehängte Dateien:

Lesenswert?

Hallo wiedermal

Hab nun mich tage und nächte mit dem ding rumgeschlagen
hoff es passt mal die stoouhr, was meint ihr zu ihr , ist als anhang
da.
stimmt das auch mit der pin abfrage?, wenn ich ein mal drücke dann
starte ich die uhr, beim zweiten mal halt ich sie an, was noch fehlt
ist , dass er den werd in den eeprom speichert, aber erstmal schaun ob
das eh passt was ich da verzappft hab.

war schon gespannt auf eure antworten

gute nacht

von Faruk F. (r91cky)


Angehängte Dateien:

Lesenswert?

hallo ich bins wieder

tut leid, hab falsche datei hochgeladen.....  HIER DIE RICHTIGE



der schlaf ruft
bye

von Faruk F. (r91cky)


Angehängte Dateien:

Lesenswert?

Hi

das letzt was ich hochgeladen hatte fehler, jetzt sollte es aber
richtig sein.

bitte die zwei vorigen datein von mir nicht beachten, am besten bitte
admin löschen :-)

lg

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.