-         

+ Antworten
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 16

Thema: Uhr zu langsam?

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    27.01.2006
    Beiträge
    82

    Uhr zu langsam?

    Anzeige


    hallo! ich habe jetzt ein Funkuhr gebaut.
    wenn sie kein Signal bekommt, geht die zu langsam. ca. 1 sek/5 minuten.
    woran kann es ligen?
    als Quarz habe ich einen 6.4000Mhz Quarz.
    gerade nachgemessen. Stimmt, der schwingt mit dieser Frequenz.

    das Programm sieht so aus:

    Code:
    $regfile = "2313def.dat"
    $crystal = 6400000
    Config Lcd = 16 * 2
     Config Lcdpin = Pin , Db4 = Portb.0 , Db5 = Portb.1 , Db6 = Portb.2 , Db7 = Portb.3 , E = Portb.5 , Rs = Portb.4
      Cls
      Cursor Off
    Config Dcf77 = Pind.6 , Inv = 0 , Upd = 0 , Timer = 1 , Timer1sec = 0 , Debug = 1 , Check = 2 , Switchpower = 0 , Powerlevel = 1
    
    
    Enable Interrupts
    
    Config Date = Dmy , Separator = .
    
    Dim I As Integer
    
    Dim Sec_old As Byte , Dcfsec_old As Byte
    
    Sec_old = 99 : Dcfsec_old = 99
    
    
    Do
    
    For I = 1 To 78
    
    Waitms 10
    
    If Sec_old <> _sec Then
    
    Exit For
    
    End If
    
    If Dcfsec_old <> Dcf_sec Then
    
    Exit For
    
    End If
    
    Next
    
    Waitms 220
    
    
    Sec_old = _sec
    
    Dcfsec_old = Dcf_sec
    
    Locate 1 , 5
    Lcd Time$ ; " "
    Locate 2 , 5
    Lcd Date$ ; " "
    Locate 2 , 15
    Lcd Bdcf_impuls ; " "
    
    
    Loop
    
    End
    weiss jemand, was hier für ein Problem da ist?

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2007
    Ort
    Göttingen
    Beiträge
    704
    "Waitms" kann mit ziemlichen Ungenauigkeiten behaftet sein. Das steht sogar in der Bascom-Hilfe:

    No accurate timing is possible with this command.

    In addition, the use of interrupts can slow this routine.
    Wobei 1 Sek auf 5 Min ja weniger als 0,3% entspricht - das ist für einen mit Waitms erzeugten Takt schon ziemlich gut! Du kannst ja spaßeshalber im Forum mal rumstöbern, über was für Abweichungen hier schon berichtet wurde

    genaue Zeiten sollte man mit ´nem Timer generieren, den Du auf einen entsprechenden Vorwert vorlädst und die gewünschte Aktion (z.B. Hochzählen von Sekunden o.ä.) vom Überlauf-Interrupt erledigen lässt.

    Wenn´s um Uhrzeit geht, könnten Dir ein 32,768kHz-Quarz und der Befehl "Config Clock" ebenfalls ungeahnte Möglichkeiten eröffnen! Würd´ ich mir mal in der Hilfe ansehen!!

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    27.01.2006
    Beiträge
    82
    wie es mit Timer geht, habe ich keine Ahnung.
    damit könnte vielleicht jemand anderer helfen.
    der Befehl "Config Clock" ist ja nur um die Uhr laufen zu lassen.
    ich möchte die aber noch synchronisieren, so oft, wie es geht.
    ich habe mal was entdeckt. und zwar, wenn ich dem Compiler erzähle dass es ein 1000000Mhz Quarz ist, dann läuft sie zu schnell.
    habe mal überlegt, und sowas geschreiben:
    "$crystal = 6370100"
    jetzt läuft alles etwas schneller.
    ich will jetzt 2 Stunden Abwarten, dann gucke ich mal, wieviel abweichung er dann noch hat.
    ich kann schon mit sichercheit sagen, es ist schon viiiiiiiiel genaur geworden

  4. #4
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    13.07.2004
    Ort
    bei Stuttgart
    Alter
    34
    Beiträge
    760
    Hi,
    das halte ich nicht für sehr sinnvoll, weil dann die anderen timings nicht mehr stimmen. tipp arbeite dich mal in die timer ein. ist nicht kompliziert. schau am besten bei den beispiel programmen.
    mfg jeffrey

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    27.01.2006
    Beiträge
    82
    >schau am besten bei den beispiel programmen.
    wo sind die?

  6. #6
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    13.07.2004
    Ort
    bei Stuttgart
    Alter
    34
    Beiträge
    760
    hi,
    der ordner heißt sample, glaube ich.
    mfg jeffrey

  7. #7
    Benutzer Stammmitglied
    Registriert seit
    27.01.2006
    Beiträge
    82
    ok, ich gucke mal.
    danke

  8. #8
    Benutzer Stammmitglied
    Registriert seit
    27.01.2006
    Beiträge
    82
    so, leute, so Leid es mir tut, aber die Uhr ist echt für´n arsch.
    die geht ab und zu zu schnell, dann auf einmal zu langsam..
    kann man echt nichts anfangen mit so einer Uhr.
    wie muss ich mit Timer abreiten? vielleicht hilft es dann.
    muss man den Code komplett neu schreiben, oder kann ich diesen noch bearbeiten?
    ich brauche jetzt echt eure Hilfe... ohne- geht nicht.
    habe zwar verstanden was ein Timer ist, und wozu er da ist, weiss aber nicht wie ich das bei mir einsetzen könnte!
    bitte, helft mir. *enttäuscht*

  9. #9
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    29.01.2004
    Beiträge
    2.441
    muss man den Code komplett neu schreiben, oder kann ich diesen noch bearbeiten?
    Bei den Mengen an Code die dein oben gepostetes Programm enthält, sollte das wohl keinen grossen Unterschied machen.

    ich brauche jetzt echt eure Hilfe... ohne- geht nicht.
    habe zwar verstanden was ein Timer ist, und wozu er da ist, weiss aber nicht wie ich das bei mir einsetzen könnte!
    bitte, helft mir. *enttäuscht*
    Naja, wenn es darum geht, dass du unbedingt eine Funkuhr brauchst, wäre es wohl einfacher dir eine zu kaufen. So teuer sind die Dinger ja nicht mehr und du hättest dann den Vorteil, dass du dein vermutlich teureres Controllerboard mit Zubehör weiterhin zum Experimentieren verwenden könntest.

    Sollte es darum gehen, dass du die Funkuhr unbedingt SELBER entwickeln willst, ist das Vorhaben spätestens in dem Moment wo dir jemand den fertigen Programmcode schickt gescheitert

    Lad dir mal das Tool zur AVR-Timer Berechnung herunter:
    http://www.roboternetz.de/phpBB2/dlo...le&file_id=169

    Das generiert dir einen Bascom-Code, der per Timer in festen Intervallen eine Interrupt Routine aufruft.

    Wenn du den Intervall z.B. auf 1 Hz setzt, hast du schon mal einen Taktgeber für die Sekunde.

    Über die Interruptroutine kannst du dann sekündlich deine Routinen zum Hochzählen von Sekunden, Minuten usw. aufrufen......


    Und noch was zum Trost:

    Ich habe vor einiger Zeit mal meinen "fertig gekauften" Funkwecker auf eine Dienstreise ins Ausland mitgenommen.

    Beim Versuch den Wecker auf die Zeitverschiebung anzupassen, habe ich ihn dann irgendwie resettet.
    Anschliessend hat er 5 Tage lang in Stellung 00:00:00 versucht ein Funksignal zu bekommen und war somit als Wecker erst mal gestorben.

    Da funktioniert deine Funkuhr doch jetzt schon besser

  10. #10
    Benutzer Stammmitglied
    Registriert seit
    27.01.2006
    Beiträge
    82
    >Sollte es darum gehen, dass du die Funkuhr unbedingt SELBER entwickeln willst


    selbst entwickeln natürlich nicht, aber zumindestens die Ausschnitte aus verschidenen Codes richtig anpassen und zusammenzufügen. Also halt selberbauen.
    wie gesagt, wozu der Timer da ist, habe ich schon verstanden, aber wie ich den Ansetzten kann - ist mir immer noch nicht klar.
    also das Tool hat mir sowas ausgegeben:

    --------------------------------------------------------------------
    'wenn mega 32, dann ändern in $regfile = "m32def.dat"
    $regfile = "m16def.dat"

    'Quarzfrequenz, entsprechend ihren Angaben
    'der passende Quarz muss in die Fassung gesteckt werden
    $crystal = 16000000

    'nur notwendig wenn RS232 benutzt werden soll
    $baud = 9600

    'Hier wird der Timer und der Teiler festgelegt
    Config Timer1 = Timer, Prescale = 256

    'Der Port mit der dritten LED auf RN-Control wird als Ausgang programmiert
    Config Pinc.2 = Output
    'Hier geben wir der Definition einen schöneren Namen
    Led3 Alias Portc.2

    'Hier wird das Unterprogramm festgelegt, das
    'in dem von ihnen eingestellten Intervall aufgerufen wird
    On Timer1 Timer_irq

    'Diese Vorgabe wurde berechnet um die genaue Intervallfrequenz zu erreichen
    Const Timervorgabe = 3036


    'Hier werden die Timer aktiviert
    Enable Timer1
    Enable Interrupts

    'Hier ist die Programmhauptschleife
    Do
    'Hier könnte Ihr Hauptprogramm stehen
    Loop



    'Dies ist der Programmteil, der in dem von ihnen gewählten
    'Intervall aufgerufen wird
    Timer_irq:
    Timer1 = Timervorgabe

    'Hier könnte nun ihre beliebige IRQ-Routine stehen
    'Dabei sollte man darauf achten das diese nicht mehr Zeit
    'benötigt, als das Intervall zuläßt

    'Der Zustand der LED wir umgekehrt, wodurch sich blinken in der halben Frequenz ergibt
    'Hohe Frequenzen sind natürlich nicht mehr sichtbar
    Toggle Led3

    Return
    -------------------------------------------------

    woeit klar.. aber was hat jetzt MEIN sode damit zu tun? bzw. wie kann ich das integrieren?
    Mein Quellcode habe ich nicht selbst geschrieben, sondert von der AVR-Bascom-hilfe kopiert und angepasst. weiter oben könnt ihr ihn sehen.
    wie soll ich weiter vorgehen? Ich möchte jetzt diese komische Uhr nicht hinschmeissen an der Stelle. dann würde ich sicherlich nichts mehr mit µC machen. sonst macht das ja Spass, aber wenn man weiss, was man machen muss.
    wenn das einer kann, würde ich dafür sogar noch bezahlen. es geht mir jetzt mehr um das Prizip.
    danke

+ Antworten
Seite 1 von 2 12 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Ja
  • Themen beantworten: Ja
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •