Forum: Mikrocontroller und Digitale Elektronik Timer in Basic mit Atmel


von Tobias Blome (Gast)


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

von harry (Gast)


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

von Tobias Blome (Gast)


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 --------------------------------

von harry (Gast)


Lesenswert?

na suppi,

dass der compiler über den 'config clock' stolpert hängt mit der
'2313def.dat' zusammen. in der wird alles deklariert was der avr so
kann und hat.

gruss, weiter so, harry

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.