Gerwin
An amplifier is just a modulator for a power supply |Toffe Gebruiker
Ik probeer met Bascom avr een PWM signaal te generen met een schuifregister. Dit omdat ik meer kanalen nodig heb dan de 4 hardware matige.
ik loop alleen tegen een raar probleem op.
dit is het programma (alleen relevante code)
$regfile = "m16def.dat"
$crystal = 12000000
$crystal = 12000000
$baud = 9600
' Declaratiets
Config Portc = Output
Config Portb = Output
Dta Alias Portb.0 ' data
Clk Alias Portb.1 ' clock
Rst Alias Portb.3 ' master reset
Ltc Alias Portb.2 ' latch
Dim Red As Byte , Green As Byte , Blue As Byte , Red_out As Byte
dim Green_out As Byte , Blue_out As Byte
Dim Trm2 As Byte, x as byte
Config Timer0 = Timer , Prescale = 1
Portc.0 = 1
Waitms 500
Portc.0 = 0
On Ovf0 Tim2_isr
Enable Timer0
Enable Interrupts
Rst = 1
Do
For X = 0 To 255
Blue = X
Toggle Portc.0
Waitms 1
Next X
For X = 255 To 0 Step -1
Blue = X
Toggle Portc.0
Waitms 1
Next X
Loop
End
Tim2_isr:
Incr Trm2
If Blue > Trm2 Or Blue = Trm2 Then
Blue_out = 255
Else
Blue_out = 0
End If
If Red > Trm2 Or Red = Trm2 Then
Red_out = 255
Else
Red_out = 0
End If
If Green > Trm2 Or Green = Trm2 Then
Green_out = 255
Else
Green_out = 0
End If
Shiftout Dta , Clk , Red_out , 1
Shiftout Dta , Clk , Green_out , 1
Shiftout Dta , Clk , Blue_out , 1
Ltc = 1
nop
Ltc = 0
nop
Return
Verder staan de volgende fuses aan:
CKOPT
SUT0
SUT0
CKSEL0
en er zit een Kristal aangesloten van 12MHz met condensatortjes welke ook werkt. (Scoop)
en ik heb de volgende problemen
Het ledje op portc.0 knippert bij lange na niet op 1mS interval. hier zit veel meer tussen. denk hierbij aan ~500mS
Als ik de clock meet van het schuifregister signaal komt deze uit op een 312.5 keer per seconde. Omdat ik in basic programeer zal er inderdaad een afwijking in zitten maar je zit hem haast knipperen dus dat klopt niet volgens mij.
Ik vermoed dat het een timing iets is maar ik kom er niet uit hoe en waar het zit.
Je gebruikt timer0 zijn overflow interrupt met een prescale van 1.
Timer0 = een 8 bit timer dus die genereerd om de 255 clock cycles een interrupt.
Jouw Tim2_isr routine heeft 642 clock cycles nodig om uit te voeren. Daarbij komt nog dat je stack nog gepushed en gepoped wordt.
Je gehele Tim2_isr duurt dus ongeveer 705 clock cycles, maar naar 256 cycles is daar alweer de volgende interrupt.
Dit gaat dus niet werken, back to the drawing board.
Gerwin
An amplifier is just a modulator for a power supply |Toffe Gebruiker
dus als ik timer1 zou gebruiken dan zou ik binnen die tijd kunnen blijven door die timer te preloaden en dan blijf ik wel binnen mijn cycles
of denk ik nou verkeerd
Gerwin
An amplifier is just a modulator for a power supply |Toffe Gebruiker
Hm timer0 op prescale met 8 nog steeds een hoop geknipper.
maar toen ik de bit resolutie omlaag haalde: 8 bit naar 7 bit (max waarde 100) dan werkt het al beter (alleen bij zeer lage waarden licht geknipper)
nu alleen nog uitvogelen waarom mijn ene schuif register niet meewerkt, ik vermoed verkeerd aangesloten of zoiets.
In elk geval hartelijk dank 