Forum: Mikrocontroller und Digitale Elektronik LED Ausgabe in eine Zählschleife integrieren ohne Zeit zu verlieren


von Olaf K. (Firma: Hobby) (olaf-k)


Angehängte Dateien:

Lesenswert?

Hallo Gemeinde

Ich habe folgendes Problem:
Für eine Kurzzeitstoppuhr  ss,10,100 ( Pic 16f628A 4x7-Segment 
Multiplext ohne DP )
habe ich eine Zählschleife welche auch funktioniert.
Vor beginn der Zählschleife wird eine LED für 300 ms angeschaltet als 
Startsignal.
Die Zeitmessung beginnt also nach ende des Startsignals.
Leider ist nun die Forderung, das das Startsignal in die Zeitmessung 
integriert werden muss, ohne die genaugkeit der Zählschleife zu 
verändern.
Der Controler kann aber doch keine 2 Prozesse parallel abarbeiten.
Als Zeitbasis benutze ich den Timer0 interrupt.
Gibt es nun die Möglichkeit die Signalgebung am Beginn der 
Zähl/Anzeigeschleife zu integrieren ohne die Zeitbasis zu beeinflussen.

von nachdenklicher (Gast)


Lesenswert?

Da Du doch eh in einem Timer-Interupt die Zeit zählst, kannst du doch 
genau DIESEN Interupt auch zum abschalten der Led nutzen:

Hauptprogramm:
-startsignal abwarten
-led einschalten
-ledzähler auf 0 setzen

Timer-Interupt:
-ledzähler+1
-falls ledzähler>irgendwas: led abschalten

Wo ist das Problem?

Joe

von Daniel V. (danvet)


Lesenswert?

Ich fürchte ohne kompletten Code wird man dir schwer helfen können.
Wie wird der Timer initialisiert?
Im Prinzip brauchst du zwei Zähler im Timerinterrupt(oder eventuell 
sogar nur einen).
Wieso diese vielen "delay()"?

von Olaf K. (Firma: Hobby) (olaf-k)


Angehängte Dateien:

Lesenswert?

@ daniel
Die Delays machen eine Korrektur der Zählschleife, da sonst die Uhr auf 
der Hardware mit dem vorhandenen Quarz zu schnell läuft.
Ich bin C-Neuling und gerade dabei durch den Code zu steigen und zu 
verstehen. Deshalb die Blindheit für einige einfache Lösungen.
Das Projekt habe ich mit Flowcode erstellt.

von Daniel V. (danvet)


Lesenswert?

Olaf K. schrieb:
> @ daniel
> Die Delays machen eine Korrektur der Zählschleife, da sonst die Uhr auf
> der Hardware mit dem vorhandenen Quarz zu schnell läuft.
> Ich bin C-Neuling und gerade dabei durch den Code zu steigen und zu
> verstehen. Deshalb die Blindheit für einige einfache Lösungen.
> Das Projekt habe ich mit Flowcode erstellt.

Uuups. OK mit "Flowcode" erstellt... hab grad mal geschaut, was das 
ist...
Es gibt jetzt zwei Möglichkeiten:

1.) Du möchtest C lernen. Dann vergiss Flowcode und besorg dir einen 
"normalen" Compiler/Entwicklungsumgebung und ein gutes C-Buch 
(Kernighan-Ritchie wird als Standard oft genannt, das solltest du dir 
aber so soder so besorgen!).

2.) Du möchtest/musst Flowcode benutzen. Dann vergiss das C lernen. 
Durch diesen Code wirst du bestimmt nichts lernen. Versuch Flowcode zu 
verstehen.
Was ist denndas für ein Konstrukt?:
1
      if( 0 )          //Active high polarity
2
        portb = portb | 128;
3
      else          //Active low polarity
4
        portb = portb & ~128;

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.