Forum: Projekte & Code Kurzzeittimer mit PIC


von Steffen (Gast)


Angehängte Dateien:

Lesenswert?

Hier ein kleines Beispiel für einen Kurzzeittimer, den ich mir für ein 
Belichtungsgerät geschrieben habe. Zur Anwendung kommt ein PIC16F876(A) 
oder ein PIC16F873(A). Eine genaue Zeitbasis von 10ms wird durch Timer1 
und das CCP-Modul erzeugt. Die Zeit wird auf einem LCD-Display 8x2 
dargestellt. Bedient wird die Uhr über 4 Tasten.
MfG
Steffen

von absolut beginner (Gast)


Lesenswert?

GUTE ARBEIT! respect

von Steffen (Gast)


Lesenswert?

Danke für die "Blumen".

MfG
Steffen

von Steffen (Gast)


Angehängte Dateien:

Lesenswert?

Durch eine andere Diskussion ist mir aufgefallen, das bei dem Beispiel 
in der ISR das Status-Register mit movf gesichert wird (das Programm ist 
schon etwas älter, ich habs nur noch etwas kommentiert) und nicht mit 
swapf. Movf beeinflusst das Z-Flag. Daraus folgt, das STATUS,Z falsch 
wieder hergestellt wird (wenn es gesetzt war wird es zurückgesetzt). Das 
Programm läuft zwar bei mir schon eine ganze Weile fehlerfrei aber es 
könnte doch irgendwann ein Fehler auftreten.

Als Anhang die korrigierte Version.

MfG
Steffen

von Peter D. (peda)


Lesenswert?

Hallo Steffen,

beim Ansehen des Programms ist mir folgendes aufgefallen:

Die Tastenpins werden ja schön definiert mit

#define    BT_Set    Taste,0

Das könnte dazu verleiten, diese umzudefinieren. Jedoch wird man damit 
auf die Nase fallen, da ja an anderer Stelle doch wieder eine feste Zahl 
verwendet wird:

andlw  00010111b  ; nur Tasteneingänge


Ich kenne den PIC nicht so gut, aber beim AVR kann man das so machen:

.equ BT_Set = 0
.equ BT_Up = 1
.equ BT_Down = 2
.equ BT_Start = 4

und dann im Programm:

andi r16, 1<<BT_Set ^ 1<<BT_Up ^ 1<<BT_Down ^ 1<<BT_Start

Dann kann man die Tasten ohne Gefahr zumindest am gleichen 8Bit-Port 
umdefinieren.
Gibts da beim PIC nicht was ähnlich komfortables ?


Ich versuche ja auch immer möglichst viel mit Definitionen variabel zu 
halten und nur selten feste Zahlen mitten im Programm zu verwenden.


Peter

von Steffen (Gast)


Lesenswert?

Hallo Peter,

die Kritik ist angebracht. Bei MPLAB geht das genauso.

Die Implementierung könnte dann so aussehen:
; Tastenzuordnung zu PORTB, bei Umbelegung nur diese Werte ändern

Taste_Set  =  0
Taste_Up  =  1
Taste_Down  =  2
Taste_Start  =  4

; ab hier braucht dann nichts mehr geändert zu werden

; Maske für Feststellung ob Taste gedrückt bzw. Up Down gedrückt und 
TRISB

Tasten_Mask  =  1<<Taste_Set ^ 1<<Taste_Up ^ 1<<Taste_Down ^ 
1<<Taste_Start
UpDown_Mask  =  1<<Taste_Up ^ 1<<Taste_Down

Im Programm müssten dann alle 00010111b-Werte in der Tastenauswertung 
durch Tasten_Mask und beim Test, ob Up und Down gleichzeitig gedrückt 
sind 00000110b durch UpDown_Mask ersetzt werden.

MfG
Steffen

von Peter D. (peda)


Lesenswert?

Bin ich froh, daß es endlich mal einer nicht persönlich nimmt :-)

Aber man muß doch auch mal Tips geben können, wie es besser ist oder 
auch nur eine andere Meinung vertreten, sonst lernt doch keiner was.

Ich machs doch auch nicht immer richtig (bin auch nur ein Mensch).

Kritik sollte immer willkommen sein.


Peter

von Uwe (Gast)


Lesenswert?

Hi!

@Peter

Wahre Worte!
Hoffentlich reagierst du bei Kritiken deiner Progr.auch so wie Steffen 
und setzt auch um was du gerade geschrieben hast.

MFG Uwe

von Peter D. (peda)


Lesenswert?

@Uwe,

aber selbstverständlich, ich will ja auch meine Programme verbessern.

Wenns aber einer gar nicht erst ausprobiert oder nur weit entfernt 
ähnlich oder nur etwas vermutet, dann kann ich natürlich nicht 
überprüfen, ob wirklich mein Programm Probleme macht oder nicht.


Peter

von Steffen (Gast)


Angehängte Dateien:

Lesenswert?

Aufgrund einer Nachfrage habe ich die HEx-Dezimal(ASCII)-Umwandlung und 
die Ausgabe an das LCD-Display noch etwas kommentiert. Die Quellen 
findet ihr im Anhang.
MfG
Steffen

von sunny198828 (Gast)


Lesenswert?

Hallo,
wie ist denn überhaupt die beschaltung?

mfg sunny

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.