Fusebits und Timer1

Gast #1243274
Lesenswert?

Moin,
Ich habe das Evulationsboard von pollin und versuche für eine 
Druckregelung den Timer1 zu benutzen. Dieser zaehlt bei mir jedoch 
schneller als er soll. Daher mein Verdacht, dass ich die falschen 
Fusebits gesetzt habe und das er garnicht den 16MHz Quarz, der auf dem 
Board ist, verwendet. Ich benutze einen Atmega16.
Villeicht ist der Fehler aber beim Timer1, hier mein Code:

$regfile = "m16def.dat"
 $crystal = 16000000

 'PA2 auf Board
 Config Porta.1 = Output

 '###############################################
 'Display

 Config Lcd = 16 * 2
 Config Lcdpin = Pin , Db4 = Porta.4 , Db5 = Porta.5 , Db6 = Porta.6 , 
Db7 = Porta.7 , E = Portb.0 , Rs = Portb.2
 Config Lcdbus = 4

 'ADC Initzialisierung
 Config Adc = Single , Prescaler = Auto , Reference = Internal
 Start Adc
 '###############################################
 Dim Sekunden As Integer
 Sekunden = 0

 Dim W As Word , Channel As Byte
 Dim Wmulti As Single
 Dim Wstring As String * 10

 Channel = 0

 'Begrüßungsbildschirm
 Cls
 Locate 1 , 1
 Lcd "HS Bremen"
 Locate 2 , 1
 Lcd "Waterhammer v.1"
 Wait 2
 Cls

 'timer
 Config Timer1 = Timer , Edge = Rising , Prescale = 1024
 Enable Timer1
 On Timer1 Timer_overflow
 Enable Interrupts
 '65535 - (16000000 / 1024)
 '65535 - 15625
 '49910
 Timer1 = 49911


Do
  'Wert von ADC channel 0 auslesen
  W = Getadc(channel)

  'W umrechnen
  Wmulti = W * 0.0048288
  Wstring = Str(wmulti)
  Wstring = Fusing(wmulti , "#.&&")

  'LCD-Darstellung
  Locate 1 , 1
  Lcd "Wert: " ; W
  Locate 2 , 1
  Lcd "Sec. " ; Sekunden
  'Lcd "Volt: " ; Wstring
  Waitms 300
  Cls

Loop
End

'jede Sekunde 'Sekunden' erhöhen
Timer_overflow:
Sekunden = Sekunden + 1
Timer1 = 49911
Return

und so sehen meine Fusebits aus die ich über PonyProg einstelle:
haken bei JATGEN, SPIEN, CKOPT, BOOTSZ1, BOOTSZ0, SUT1

Zur zeit zählt er einfach viel zu schnell die Sekunden, die werden auf 
dem Addon board von Pollin ausgegeben.

Danke euch
Patrik
#1243290
Lesenswert?

> schneller als er soll. Daher mein Verdacht, dass ich die falschen
> Fusebits gesetzt habe und das er garnicht den 16MHz Quarz, der auf dem
> Board ist, verwendet. Ich benutze einen Atmega16.

wenn die interne Taktquelle benutzt werden würde, müsste aber alles 
langsamer laufen als mit dem 16MHz-Quarz erwartet...
Gast #1243344
Lesenswert?

müsste langsamer laufen bzw genau so wie es soll. nen kumpel hat mir die 
fusebits eingestellt. wie muss ich die denn schalten für den atmega16 
wenn ich den internen takt verwenden will und muss ich dem dann trotzdem 
$crystal=1000000 sagen?
#1243410
Lesenswert?

Patrik wrote:
> müsste langsamer laufen bzw genau so wie es soll.

du verstehst nicht was ich meine: Du glaubst, dass wegen falscher Fuses 
der interne RC-Oszillator statt dem Quarz benutzt wird, und deswegen 
dein Zähler zu schnell läuft. Der interne Oszi ist aber langsamer, 
also müsste der Zähler auch langsamer als wie von dir erwartet jede 
Sekunde eins hochzählen..

> fusebits eingestellt. wie muss ich die denn schalten für den atmega16
> wenn ich den internen takt verwenden will und muss ich dem dann trotzdem
> $crystal=1000000 sagen?

kA, vielleicht solltest du in einem Bascom-Forum fragen, hier sind nach 
meinem Eindruck mehrheitlich C & Assembler-Anwender unterwegs...

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