ik heb een stuk code geschreven die een klok toont.

de klok werkt opzich wel maar hij werkt te snel das vrij irritant.


Print At 1, 1,"00:00:00"
While 1 = 1
    If Seconden <59 Then
        DelayMS 1000
        Inc Seconden
        Print At 1, 7, DEC2 Seconden
    EndIf
    
    If Seconden = 59 Then
        Inc Minuten
        Clear Seconden
        Print At 1, 4, DEC2 Minuten
    EndIf

    If Minuten = 59 Then
        Inc Uren
        Clear Minuten
        Print At 1, 1, DEC2 Uren
    EndIf
    
    If Uren <23 Then
        Clear Uren
        Print At 1, 1, DEC2 Uren
    EndIf
    
    If S1 = 0 Then
        Inc Minuten
        Clear Seconden
    EndIf
    
    If S2 = 0 Then
        Inc Uren
        Clear Seconden
    EndIf
Wend

Van basic weet ik niet zoveel af, maar ik merk dat je de minuten al verhoogd als de seconden overgaan van 58 naar 59. Moet dat niet bij de overgang van 59 naar 60? Hetzelfde met minuten en uren.
In c zou ik zoiets schrijven:


while (1) {
  delay_ms(1000);
  seconden++;
  if (seconden == 60) {
    seconden = 0;
    minuten++;
    if (minuten == 60) {
      minuten = 0;
      uren++;
 enz...

Wat voor crystal gebruik je bij wat voor pic? Als je een interne oscilator gebruikt heb je dikke kans dat het daar aan ligt, dat is gewoon een rc filtertje en bij lange na niet nauwkeurig genoeg voor een klok.

En als de code goed is zou de klok eigenlijk te langzaam moeten lopen. :)

Op 26 september 2006 11:49:02 schreef pros:
Van basic weet ik niet zoveel af, maar ik merk dat je de minuten al verhoogd als de seconden overgaan van 58 naar 59. Moet dat niet bij de overgang van 59 naar 60? Hetzelfde met minuten en uren.
In c zou ik zoiets schrijven:


while (1) {
  delay_ms(1000);
  seconden++;
  if (seconden == 60) {
    seconden = 0;
    minuten++;
    if (minuten == 60) {
      minuten = 0;
      uren++;
 enz...

het moet wel goed zijn want een pic telt van 0
een klok van 1 tot 60
ik tel daarom van 0 tot en met 59 (zijn 60 cyfers)

pic16f628a op interne 4Mhz crystal
ik zal even naar een winkel gaan eerdaags voor een crystal

als ik een 20 Mhz crystal haal pas de compiler dit dan automatisch aan ? 1000 MS blijft toch gewoon daadwerkelijk 1 Sec
aangezien 20Mhz sneller is dan 4 Mhz
zijn deze 20Mhz veel duurder dan 4Mhz ?

Je zal aan de compiler moeten vertellen wat voor kristal je gebruikt, want enkel dan kan hij weten hoe snel de pic zijn instructies uitvoert, en zal hij de delay routine aanpassen.

En de kristallen liggen in dezelfde prijsklasse volgens mij

Op 26 september 2006 15:18:18 schreef Kevinoud:het moet wel goed zijn want een pic telt van 0
een klok van 1 tot 60
ik tel daarom van 0 tot en met 59 (zijn 60 cyfers)

Van 0 tot en met 59 is OK - zo telt een klok ook. Maar als ik je basic-code goed inschat, spring je naar de volgende minuut, als de secondenteller op 59 staat. Of is mijn kennis van basic nóg slechter dan ik vreesde?
Wat kristallen betreft: zolang het gangbare waarden zijn, liggen de prijzen niet ver uit mekaar. Een andere mogelijkheid bestaat er in, 100Hz van het lichtnet af te tappen - desgewenst delen door 100 met een 74HC390 - en dat als tijdreferentie te gebruiken.

Heeft niets met kristal te maken.
1000ms = 1000ms
Gedurende sec 59 wordt niet gewacht.
Pros heeft gelijk.

if then ELSE is natuurlijk nog mooier:


....
    If Seconden >= 59 Then
        DelayMS 1000 '**** vergeten
        Inc Minuten
        Clear Seconden
        Print At 1, 4, DEC2 Minuten
    Else
        DelayMS 1000
        Inc Seconden
        Print At 1, 7, DEC2 Seconden
    EndIf    
 .....

Op 26 september 2006 19:04:21 schreef Martijn v:
Heeft niets met kristal te maken.
1000ms = 1000ms

Jawel, de delay routine gaat uit van een correcte clock. Klopt de clock niet, dan wijkt de delay routine ook af. Verder wordt er in de code geen rekening mee gehouden dat de overige instructies ook tijd in beslag nemen. Beter zou zijn om een timer interrupt te gebruiken.

Er bestaat ook nog een valsspeler-optie voor het geval de afwijking niet al te groot is: meten hoeveel de klok afwijkt op 24h, en de µC 's nachts --als niemand het ziet-- in't geniep zijn tijd laten aanpassen door er enkele seconden bij te tellen of af te trekken...

Op 26 september 2006 15:18:18 schreef Kevinoud:
[...]

het moet wel goed zijn want een pic telt van 0
een klok van 1 tot 60
ik tel daarom van 0 tot en met 59 (zijn 60 cyfers)

pic16f628a op interne 4Mhz crystal
ik zal even naar een winkel gaan eerdaags voor een crystal

als ik een 20 Mhz crystal haal pas de compiler dit dan automatisch aan ? 1000 MS blijft toch gewoon daadwerkelijk 1 Sec
aangezien 20Mhz sneller is dan 4 Mhz
zijn deze 20Mhz veel duurder dan 4Mhz ?

Dat interne kristal waar je het over hebt is alleen geen kristal :) Zoals gezegd een RC netwerk dat zeker niet nauwkeurig is. Je moet aangeven wat voor kristal je gebruikt, de compiler past daarop je timebase statements aan (dus dingen als delay).