PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Verwirrung.....Timer von Mega16 mit Bascom



JensB
28.05.2008, 20:33
Hallo, habe einen ATMEGA16 und wollte mit diesem relativ zeitgenau eine Messung abwickeln. Leider mag der Compiler die Zeile Enable Timer1 nicht und antwortet mit einem Error 85: Unknown interrupt source COUNT<>3.

Die Konfig habe ich nach RN Wissen vorgenommen (Timer im 1 Sek. Takt).Bascom ist 1.11.8.7
Gibt es hier irgendwelche erkenntnisse?
Anmerkung: So genau habe ich das Datenblatt vom Mega noch nicht studiert, ich mache ein paar Analogwerterfassungen damit, nicht daß der Timer irgendwie in Konflikt mit den ADs steht.......?

Gruß

Jens

Jaecko
29.05.2008, 07:02
Schreib mal den kompletten Code hier rein.
Ein vom Compiler angegebener Fehler muss nicht immer in der bemeckerten Zeile sein. Kann sich auch um nen Folgefehler von weiter oben handeln.

JensB
03.06.2008, 09:40
Hallo Jaecko,

hier der Code.....




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

'Konfigurieren von Timer 1
Config Timer1 = Timer , Prescale = 256
On Timer1 Timer_irq
Timer1 = 34286
Enable Timer1
Enable Interrupts

Gruß

Jens


'Konfiguration der Displayports





Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portc.6 , Db7 = Portc.7 , E = Portc.3 , Rs = Portc.2
Config Lcdbus = 4
Config Adc = Single , Prescaler = , Reference = Avcc
Start Adc
Config Portb.0 = Output



Dim Anain1 As Integer 'Variablendefinition Analog In als Integer (0-1023)
Dim Anain2 As Integer ' generated. Take care that the chip supports all fuse bytes.$PROG &HFF,&HE1,&H99,&H00' generated. Take care that the chip supports all fuse bytes.$PROG &HFF,&HE1,&H99,&H00' generated. Take care that the chip supports all fuse bytes.Dim Anain2 As Integer
Dim Anain3 As Integer
Dim Anain4 As Integer
Dim Anain5 As Integer
Dim Zeit As Integer


Dim Multipli5 As Single
Dim Stunde As Single

Dim Strom As Single
Dim Ladung As Single
Dim Ladunggesamt As Single
Dim Amperesekunden As Single

Dim Ergebnis As String * 10 'Definition der Ausgabevariable als 10 stelliger String
Dim Ergebnis2 As String * 10
Dim Ergebnis3 As String * 10
Dim Ergebnis4 As String * 10
Dim Ergebnis5 As String * 10
Dim Stromfluss As String * 10


Cursor Off
Cls

'Konstanten
Zeit = 0
Ladung = 0
Ladunggesamt = 0
Stunde = 3600

Do
Portb.0 = 1
Waitms 50
Portb.0 = 0
Waitms 50
Zeit = 1
Cursor Off
Loop

End
'Endlosschleife

'Abfrage der ADC´s und Parametrierung des Wertebereichs

Timer_irq:
Timer1 = 34286
Anain5 = Getadc(4)
Multipli5 = 152 / 1023
Multipli5 = Multipli5 * Anain5
Strom = Multipli5
Ladung = Strom * Zeit
Ladung = Ladung - 1.0399
Ladung = Ladung
Ladunggesamt = Ladunggesamt + Ladung
Amperesekunden = Ladunggesamt / Zeit
Amperesekunden = Amperesekunden / 3600
Amperesekunden = Amperesekunden
Ergebnis5 = Str(amperesekunden , 5)
Ergebnis5 = Left(ergebnis5 , 5)
Stromfluss = Str(ladung , 5)
Stromfluss = Left(stromfluss , 5)
Locate 1 , 6
Lcd Ergebnis5
Locate 2 , 6
Lcd Stromfluss
Return

'Ende der Endlosschleife

Jaecko
03.06.2008, 09:53
Schau dir mal diese Zeile an:


Config Adc = Single , Prescaler = , Reference = Avcc


Da fehlt die Zuweisung, welchen Wert der Prescaler haben soll.

JensB
04.06.2008, 18:47
Ja, sorry, der ist aber 256, habe ich vergessen zu schreiben, der Fehler bleibt aber.....

for_ro
04.06.2008, 19:02
Wenn ich deinen Code kompiliere, kommt nur eine Fehlermeldung, dass der Prescaler mit 256 nicht geht. Max für ADC ist 128.
Du meinst glaube ich den Timer Prescaler, Jaecko spricht vom ADC.
Den kannst du übrigens auch auf Auto stellen.

Gruß

Rolf

JensB
04.06.2008, 20:58
Also der ADC Prescaler steht auf Auto, der prescaler für den timer auf 256. Das sollte gehen, aber ich habe mir sagen lassen, daß solche Meldungen typisch für Bascom sind. Die Version 1.11.7.4 will den Code auch nicht, allerdings habe ich da noch ganz andere Fehlermeldungen.

Jaecko
05.06.2008, 07:00
Der Prescaler des Timers ist hier nicht wichtig.
Wenn in der von mir angegebenen Zeile (Config Adc = Single , Prescaler = , Reference = Avcc) hinter dem = von Prescaler auch was eingetragen ist (z.B. Auto), dann geht der Code bei mir ohne Fehler.

peterfido
05.06.2008, 10:10
1.11.90 kompiliert ohne Fehler, wenn ADC Prescaler auf Auto steht.