Forum: Mikrocontroller und Digitale Elektronik Uhr-Programm


von Christian U. (christo28)


Angehängte Dateien:

Lesenswert?

Guten Abend

Für ein Schulprojekt wollen wir mittels Mikrocontroller eine sogenannte 
"Wortuhr" bauen. Wir sind gerade dabei die Schaltung zu plannen und 
machen uns schon gedanken bezüglich des programmieren des PICs, da wir 
in diesem Bereich wenig erfahrung haben. Der PIC soll pro ausgang eine 
LED-Reihe ansteuern. Die Uhrzeit soll: Bei den Minuten in 5 MInuten Takt 
angezeit werden.

Die Stunden sollen immer voll angezeit werden, also 1, 2, 3, ...

Meine Frage: Wie soll das Programm asusehen?

Hoffe das ich genug Infos gegeben habe, fragen oder verbesserungen sind 
gerne gesehen.

P.S. Schaltplan im Anhang

mfg Christian

von gaast (Gast)


Lesenswert?

Christian Unbekannt schrieb:
> Meine Frage: Wie soll das Programm asusehen?

Text in einer Sprache deiner Wahl, vorzugsweise in einer 
Proportionalschrift.

von Teo D. (teoderix)


Lesenswert?

Auf alle fälle nicht so wie Euer Schaltplan!
Is ja grausig das Suchspiel.

Was habt Ihr Euch bis jetzt überlegt, wie das so zu steuern ist und
wie man das auf den (mir leider) unbekannten PIC, umsetzen konnte?

von Pessimizer (Gast)


Lesenswert?

Christian Unbekannt schrieb:
> Meine Frage: Wie soll das Programm asusehen?

Diesen Monster-Thread kennst du?
http://www.mikrocontroller.net/topic/156661

=> Mal reinschauen, deren Software Lesen&Verstehen, so ähnlich für 
deinen PIC nachprogrammieren?

von Max H. (hartl192)


Angehängte Dateien:

Lesenswert?

Ich würde einen Uhrenquarz (2^15HZ) an den PIC hängen und mit einem 
16bit Timer jede Sekunden ein Interrupt erzeugen. Die ISR könnte in C 
dann so aussehen:
1
void interrupt ISR()
2
{
3
  if(PIR1bits.TMR1IF)  
4
  {
5
    TMR1L=??;
6
    TMR1H=??;              // Timer Vorladen
7
    PIR1bits.TMR1IF=0;
8
    sekunden++;
9
    if(sekunde>=60)
10
      minuten++;
11
    if(minuten>=60)
12
      stunden++;
13
    if(stunden>12)
14
      stunden=1;
15
  }
16
}
Bei meiner Wordclock habe die Funktionen zum Ansteuern der Anzeige so 
ausgesehen: Siehe Anhang. Der Code mag nicht schön oder Effizient sein, 
aber er erfüllt seine Aufgabe sein einem halben Jahr problemlos.

Der Rest bleibt dann deine Aufgabe...

von Max H. (hartl192)


Lesenswert?

Gerade ist mir aufgefallen, dass der Thread im falschen Forum ist... Das 
Unterforum heißt "PC-Programmierung" und nicht "PIC-Programmierung"

von Route_66 H. (route_66)


Lesenswert?

Max H. schrieb:
> sekunden++;
>     if(sekunde>=60)
>       minuten++;
>     if(minuten>=60)
>       stunden++;
>     if(stunden>12)
>       stunden=1;

Da fehlt jedesmal das Null-Setzen der Variablen bei Endwert 60,60,24, 
sonst Zählen die Sekunden, Minuten und Stunden bis zum numerischen 
Überlauf.

von Max H. (hartl192)


Lesenswert?

Sry, hab ich ganz vergessen :-(
1
void interrupt ISR()
2
{   
3
  if(PIR1bits.TMR1IF)  
4
  {
5
    PIR1bits.TMR1IF=0;
6
    sekunden++;
7
    if(sekunde>=60)
8
    {
9
      minuten++;
10
      sekunden=0;
11
    }
12
    if(minuten>=60)
13
    {
14
      stunden++;
15
      minuten=0;
16
    }
17
    if(stunden>12)
18
      stunden=1;
19
  }  
20
}

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.