Gibt es kein Tutorial oder ein fertiges Projekt / eine Formel die mir sagt wie der Prescaler bei 16 MHz eingestellt sein muss das er jede Sekunde interruptet.
Mfg
Tobi
hallo,
der prescale geht max. bis 1024 er teilt den quarztakt durch diese zahl und verwendet ihn dann für den timer.
du musst den timer auf voreinstellen.
mfg franzlCode:on timer1 ontimer1 'interrupt-rputine für timer 1 config timer 1 = timer , prescale = 256 'Takt ist Quarz / 256 enable timer1 enable interrupts do loop ontimer1: timer1 = XXXXX 'dein voreingestellter wert Sekunde = Sekunde + 1 return
Gibt es kein Tutorial oder ein fertiges Projekt / eine Formel die mir sagt wie der Prescaler bei 16 MHz eingestellt sein muss das er jede Sekunde interruptet.
Mfg
Tobi
(auch mal den Artikel komplett lesen!)Zitat von uwegw
Auch auf der Gefahr in das dir der Link bekannt vorkommthttp://www.rowalt.de/mc/avr/avrboard/06/avrb06.htm
Nichtnur Artikel komplett lesen, sondern auch Links die man als Tipp bekommt!
Zum Tut für eine Sekunde bei 16MHz:
Im Donwloadbereich gibt es ein Programm, mit dem du die Timer für gänige Taktfrequenzen und alle möglichen Auslösezeiten berechnen lassen kannst.
Es nennt sich RNAVR. Es erzeugt gleich einen Bascomcode.
PS: Beim Mega128 kannst du auch ein Uhrenquarz anschliessen und hast damit eine vom Programm unabhänige und genauere Uhr. Damit wird dein Programm auch nicht immer durch den Timer unterbrochen. Evtl brauchst du ihn ja auch noch für was anderes?!
sry... danke
Ich hab jetzt noch ein kleines Prob bei der Erstellung des Zeitstrings:
Hex wandelt einen numerischen Wert in einen String (laut Hilfe)Code:Dim Tresult As String * 8 Dim Dresult As String * 8 Dim D1 As String * 2 Dim D2 As String * 2 Dim D3 As String * 2 If Second < 10 Then D1 = "0" + Hex(second) Else D1 = Hex(second) If Minute < 10 Then D2 = "0" + Hex(minute) Else D2 = Hex(minute) If Hour < 10 Then D3 = "0" + Hex(hour) Else D3 = Hex(hour) Tresult = Hour + ":" + Minute + ":" + Second
Das funktioniert leider nicht richtigwas mache ich jetzt schon wieder falsch. Dazu sagt das RN-Wissen leider auch nichts.
Ich bekomme stadt bspw. 03:24:01 leider nur 3:24:1 und das zusammenführen des tresults klappt auch nicht.
Mfg
Tobi
Schau dir mal die Befehle Format und Fusing an.
funktioniert leider nicht![]()
was mach ich falsch:
MfgCode:D1 = Format(hex(second) , "00") 'Hier kommt auch bei 3 nur 3 statt 03 D2 = Format(hex(minute) , "00") D3 = Format(hex(hour) , "00") Tresult = Hour + ":" + Minute + ":" + Second 'Hier kommt ein Compilerfehler E242
Wie kommst du eigentlich auf deine HEX-Zahlen???
Was für eine Uhr benutzt du denn jetzt? Timer mit 32kHz-Quarz oder Timer im Sekundentakt in einer INT-Routine?
ich hab z.Zt. folgenden Code:
MfgCode:$regfile = "m128def.dat" $crystal = 16000000 Config Timer1 = Timer , Prescale = 256 Enable Timer1 On Timer1 Tini Enable Interrupts Timer1 = 68569 Dim Tresult As String * 8 Dim Dresult As String * 8 Dim D1 As String * 2 Dim D2 As String * 2 Dim D3 As String * 2 Dim Year As Word Dim Month As Word Dim Day As Word Dim Hour As Word Dim Minute As Word Dim Second As Word minute = 58 Do '....Hauptprogramm Loop End Tini: Timer1 = 68569 Second = Second + 1 If Second = 60 Then Gosub Addminute If Minute = 60 Then Gosub Addhour If Hour = 24 Then Gosub Addday If Day = 30 Then Gosub Addmonth If Month = 12 Then Gosub Addyear D1 = Format(hex(second) , "00") D2 = Format(hex(minute) , "00") D3 = Format(hex(hour) , "00") Tresult = Hour + ":" + Minute + ":" + Second Print Tresult Return Addminute: Minute = Minute + 1 Second = 0 Return Addhour: Hour = Hour + 1 Minute = 0 Return Addday: Day = Day + 1 Hour = 0 Return Addmonth: Month = Month + 1 Day = 0 Return Addyear: Year = Year + 1 Month = 0 Return
Tobi
Lesezeichen