Timer in Basic mit Atmel

Gast #96255
Lesenswert?

Hallo,
ich möchte eine Uhr in ein Projekt einbauen und versuche einen Timer zu
machen der z.B. jede Sekunde ein Signal gibt, welches
ich dann mit einem Zähler intern zählen kann. (und wenn Zähler auf 60
-> Sekunden löschen und Zähler für Minuten +1 -> wenn
Minuten auf 60,  Minuten löschen und Stunden +1 usw.)
Wie muss ich den Timer programmieren das er mit dem Quarz
läuft("Systemtakt")?

Ich hab einen Atmel AT90S2313 mit 3,6864 MHz Quarz den ich in Basic
programmieren möchte.


vielen Dank schon mal,

Tobias
Gast #96256
Lesenswert?

hi,

hab ich mal für'n mega163 probiert, ging gut.
ob's auf dem 2313 läuft weiss ich nich, musste probieren.
wenn's nix funzt muss man per irq machen.

------------------------------------
' einfacher test für date & time

$crystal = 3686411
$baud = 9600
$regfile = "m163def.dat"

Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 ,
Db7 = Portd.7 , E = Portd.3 , Rs = Portd.2
Config Lcd = 16 * 2
Cursor Off Noblink

Enable Timer1             ' Enable the timer interrupt
Enable Interrupts

Config Clock = Soft
Config Date = Ymd , Separator = -

Time$ = "02:20:00"

Cls

Do
  Lcd Time$
  Locate 2 , 1 : Lcd Date$
  Waitms 500
  Cls         ' lcd aus, damit man sieht, ob sich was tut
  Waitms 100
Loop

End
-----------------------------------

gruss, harry
Gast #96257
Lesenswert?

Hi,
vielen Dank!
Leider stolpert der µC immer über den Befehl: Config Clock = Soft.
warum weiss ich nicht :-(
Aber ich hab das nun etwas anders gelöst.
Trozdem vielen Dank für deine Bemühungen!!!
Tobias

'----------------------- schnipp --------------------------------
$regfile = "2313def.dat"
'AT90S2313-Deklarationen
$crystal = 3686400                                          'Quarz:
3.6864 MHz
$baud = 9600                                                'Baudrate
der seriellen Schnittstelle
'
'LCD
Dim Sresult As String * 16 At &H64 Overlay
Dim Result(16) As Byte At &H64
On Timer1 Ontimer1overflow
'Timer1-Interruptroutine deklarieren
'
Dim Stunden As Byte
Dim Minuten As Byte
Dim Sekunden As Byte

'---------------------------------------------------------------------
'LCD Anzeige
'---------------------------------------------------------------------

Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.3 , Db6 = Portb.2 ,
Db7 = Portb.1 , E = Portd.6 , Rs = Portb.0
Cursor Off Noblink                                          ' Cursor
aus
'-------------------



Config Timer1 = Timer , Prescale = 1024
'3686400Hz/1024=3600Hz
Enable Timer1
Timer1 = 65535                                              'Sofort
Timer1-Überlauf (Bei 16 Bit: 65535+1=0)
Enable Interrupts
'
Do
 Gosub Anzeige
 'Print Stunden ; ":" ; Minuten ; ":" ; Sekunden
Loop
'
Ontimer1overflow:
'Timer1-Interruptroutine
  'Nächster Überlauf soll in einer Sekunde sein:
  Timer1 = 61936                                            'Überlauf
nach 65535, also: 65535+1-3600=61936
  '
  Incr Sekunden
  If Sekunden = 60 Then
    Sekunden = 0
    Incr Minuten
    If Minuten = 60 Then
      Minuten = 0
      Incr Stunden
      If Stunden = 24 Then
        Stunden = 0
      End If
    End If
  End If




  'Print Stunden;":";Minuten;":";Sekunden
Return

Anzeige:
Home Upper                                                  'in die
obere zeile gehen
 Cls : Lcd "U:" + Str(stunden) ; ":" + Str(minuten) ; ":" +
Str(sekunden)       'Anzahl Türöffnungen
Home Lower                                                  'in die
untere zeile gehen
Lcd "Uhrzeit: ??? :-)"


Return
                                                      ' wichtig
'----------------------- schnapp --------------------------------

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren