Forum: Mikrocontroller und Digitale Elektronik Fusebits und Timer1


von Patrik (Gast)


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

von Justus S. (jussa)


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

von Patrik (Gast)


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?

von Justus S. (jussa)


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

von Patrik (Gast)


Lesenswert?

Ich verstehe deinen Ansatz, das macht Sinn. Kann mir trotzdem jemand 
zeigen wie ich über ponyprog meinen atmega16 an meinem pollin board so 
einstelle dass der externe quarz benutzt wird?

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.