Des weiteren habe ich heraus gefunden, dass wenn ich anstatt der beiden
8bit timer den 16 bit timer nehme und noch
pwm = 10
hinzufüge in der deklatarion, dass der fehler nicht auftaucht.
Könnte es vielleicht sein (kenne mich mit den Datentypen in BASCOM nicht
aus), dass Du versuchst, einem 8-Bit-Timer-Register einen (vermutlich
16-Bit-) Integer-Wert zuweisen willst? Dazu würde auch passen, dass es
mit dem 16-Bit-Timer klappt... Ich weiß nur nicht, wie in BASCOM ein
8-Bit-Integer-Typ heißt. Aber Motor, Pumpe und Luefter sind als Integer
deklariert...
und der hammer:
jetzt hab ich das ganze wieder auf den 8 bit timer verändert und der
fehler trifft nur noch bei einem timer auf, wie verrückt!
der code ist komplett der gleiche wie vorher, nur jetzt kommt der fehlre
bei timer2 und nicht mehr bei timer 2 und timer 0:
Config Timer0 = Pwm , Compare A Pwm = Clear Down , Compare B Pwm = Clear
Down , Prescale = 8
Config Timer2 = Pwm , Compare A Pwm = Clear Down , Compare B Pwm = Clear
Down , Prescale = 8
Pwm1a = Motor
Pwm1b = Pumpe
Pwm2a = Luefter
Edit:
ich hab alle typen ausprobiert und immer kam der Fehler..., integer,
bit, byte....
Edit2:
Fehlalarn, habs versehentlich noch auf Timer 1 gehabt, also den post
vergessen mit dem "verrückten" :-(
Edit3:
Aber trotzdem befürchte ich, dass timer0 kein pwm kann, habs also mal
mit timer 1 realisiert, jetzt kommt nur noch der fehler bei timer 2
Also jetzt noch mal alles kurz zum Verständnis:
Code:
'-----------------------------------------------------------------------
------------------
'micro : Mega32
'-----------------------------------------------------------------------
------------------
$regfile = "m32def.dat" ' specify
the used micro
$crystal = 1000000 ' used
crystal frequency
$baud = 2400 ' use baud
rate
$hwstack = 32 ' default
use 32 for the hardware stack
$swstack = 10 ' default
use 10 for the SW stack
$framesize = 40 ' default
use 40 for the frame space
'Config Com1 = Dummy , Synchrone = 0 , Parity = Even , Stopbits = 2 ,
Databits = 8
Config Pind.6 = Output
Config Pind.2 = Input
Config Pind.3 = Input
Config Pind.4 = Input
Led1 Alias Portd.6
Taster1 Alias Pind.2
Taster2 Alias Pind.3
Taster3 Alias Pind.4
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Start Adc
Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Compare B
Pwm = Clear Down , Prescale = 8
Config Timer2 = Pwm , Compare A Pwm = Clear Down , Compare B Pwm = Clear
Down , Prescale = 8
Dim Motor As Integer
Dim Pumpe As Integer
Dim Luefter As Integer
Dim W As Integer
Motor = 255
Pumpe = 255
Gosub Setvalues
Waitms 1000
Do
Motor = 127
Pumpe = 127
Luefter = 127
Gosub Setvalues
'W = Getadc(0 , 0)
Loop
Setvalues:
Pwm1a = Motor
Pwm1b = Pumpe
Pwm2a = Luefter
Return
End
Ein Fehler besteht:
Error : 46 Line : 63 Assignment error [PWM2A: 0 LUEFTER: 3] , in
File ...
Das Pwm = 8 beim Timer 1 ist von nöten, beim Timer 2 nicht.
Woran mag es liegen?
Sag mal, hast Du mein Posting überhaupt gelesen? Timer 2 ist wie Timer 0
ein 8-Bit-Timer. Und wenn Dein Compiler beim Zuweisen eines
Integer-Wertes auf ein 8-Bit-Register einen Zuweisungsfehler (engl.
Assignment Error) liefert, bedeutet das, dass die Datentypen nicht
kompatibel sind!!! Du kannst keinem 8-Bit-Register einen 16-Bit-Wert
zuweisen. Schau bitte in Deine Compiler-Doku und suche nach einem
8-Bit-Integer-Typ (afair hieß der "Short" oder so ähnlich, bin mir aber
nicht sicher...). Und wenn Du dann "Dim Luefter As Integer" durch "Dim
Luefter As Short" ersetzt, müsste es klappen...
Da der Timer 2 nur eine Compare-Einheit hat, wäre es zumindest denkbar,
dass es heißen muss "Pwm2 = Luefter". Das "a" macht da imho wenig Sinn.
Probier es einfach aus...
Ohne Bascom jetzt überhaupt zu kennen:
Bist du die sicher, daß es pwm0a und pwm2a überhaupt gibt? Das sind ja
anscheinend Bascom-eigene Bezeichnungen für die 8-bit-compare-register
(die im Original OCR0 und OCR2) heissen, warum also soll da ein 'a' dran
sein?
pwm1a und pwm1b heisen im Original
"Output Compare Register 1 A" und "Output Compare Register 1 B" bzw.
OCR1AH and OCR1AL, OCR1BH and OCR1BL, da macht das ja noch Sinn.
Such doch mal in "m32def.dat", oder wo auch immmer die
Registerdefinitionen drinstehen.
Und wenn du das dann verstanden hast, lade dir bitte, bitte, WinAVR und
AVR-Studio runter, und lerne ganz schnell C. Dieses unstrukturierte
Basic-Kauderwelsch verursacht ja Augenkrebs.
Oliver
Auch auf die Gefahr hin, mich jetzt komplett zu verzetteln:
Kann der Mega32 überhaupt hardwaremässig auf dem Timer0 ein
PWM machen (der Mega16 kanns definitv nicht). Oder
emuliert Bascom das wieder mal?
Hi,
ersetze :
Config Timer2 = Pwm , Compare A Pwm = Clear Down , Compare B Pwm = Clear
durch :
Config Timer2 = Pwm , Compare Pwm = Clear Down
und ersetze :
Pwm2a = Luefter
durch :
OCR2 = Luefter
dann sollte es gehen, Timer2 hat nur einen PWM - Kanal