$regfile = "attiny2313.dat"
$crystal = 1000000
Config Portb.2 = Output
Dim A As Byte
Dim B As Integer
Dim T As Integer
Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Down , Prescale = 1
Start Timer1
T = 1
Do
T = T + 1
For A = 255 To 0 Step -1
Pwm1a = A
Waitms T
Next
For A = 0 To 255 Step 1
Pwm1a = A
Waitms T
Next
Loop Until T = 10
End
Ezzel a programmal a portb.2 -n lévő led meg sem nyikkan?Mi az oka?
Most ismerkedek a PWM-el.
$regfile = "attiny2313.dat"
$crystal = 1000000
$hwstack = 32
$swstack = 16
$framesize = 40
' ATtiny2313 lábkiosztása a feladathoz
' __ __
' I U I
' Reset PA2 I I VCC
' PD0 I I PB7 SCK
' PD1 I I PB6 MOSI
' PA1 I I PB5 MISO
' PA0 I I PB4 OC1B
' PD2 I I PB3 OC1A
' PD3 I I PB2 OC0A
' PD4 I I PB1
' OC0B PD5 I I PB0
' GND I I PD6
' I_____I
Config Portb.2 = Output
'részletek az adatlapban...
Tccr0a = &B10000001
Tccr0b = &B00000011
'Tccr1a = &B10100001
'Tccr1b = &B00000011
Dim I As Byte
const Oc0a_ertek = 255
Enable Interrupts
Do
'(
For I = 0 To Oc1b_ertek
Ocr1bl = I
Waitms 5
Next I
For I = 0 To Oc1a_ertek
Ocr1al = I
Waitms 5
Next I
')
For I = 0 To Oc0a_ertek
Ocr0a = I
Waitms 5
Next I
'(
For I = 0 To Oc0b_ertek
Ocr0b = I
Waitms 5
Next I
')
Loop
$regfile = "attiny2313.dat"
$crystal = 1000000
$hwstack = 32 'hiányzott
$swstack = 16 'hiányzott
$framesize = 40 'hiányzott
Config Portb.2 = Output
'részletek az adatlapban...
Tccr0a = &B10000001 'hiányzott
Tccr0b = &B00000011 'hiányzott
'Tccr1a = &B10100001
'Tccr1b = &B00000011
Dim I As Byte
const Oc0a_ertek = 255 'hiányzott
Enable Interrupts
Do
'(
For I = 0 To Oc1b_ertek
Ocr1bl = I
Waitms 5
Next I
For I = 0 To Oc1a_ertek
Ocr1al = I
Waitms 5
Next I
')
For I = 0 To Oc0a_ertek
Ocr0a = I
Waitms 5
Next I
'(
For I = 0 To Oc0b_ertek
Ocr0b = I
Waitms 5
Next I
')
Loop
a waitms-el tudom szabályozni a felfutás idejét.
Köszönöm emésztem a dolgot mert így egy kicsit zavaros.
$regfile = "attiny2313.dat"
$crystal = 1000000
$hwstack = 32
$swstack = 16
$framesize = 40
Config Portb.2 = Output
Tccr0a = &B10000001
Tccr0b = &B00000011
'Tccr1a = &B10100001
'Tccr1b = &B00000011
Dim I As Byte
Const Felfele = 255
Const Lefele = 0
Enable Interrupts
Do
For I = 0 To Felfele Step 1
Ocr0a = I
Waitms 10
Next I
For I = 255 To Lefele Step -1
Ocr0a = I
Waitms 10
Next I
Loop
End 'end program
Jól. A timer0 A és B kimenetét konfigolja fel ez a két sor (mint a "Config Timer'...). Itt csak az A kimenet lett bekapcsolva, bitállapotokat hasonlítgasd össze az adatlap értékeivel - onnantól tiszta lesz az egész.
Kotesz írta:A kimeneti lábat (amin a led is van) csak a portb.2 = output határozza meg?
Mert átírva portd.2 -re a led semmit nem csinál.
Ahogyan az adatlap is említi a TCCR0A regiszternél:
...However, note that the Data Direction Register (DDR) bit corresponding to the OC0A pin must be set in order to _enable the output driver_.
A Config portx.y utasítással állítgatod a DDR(adott port) regisztert, ahogyan írja: kimenetre kell állítani a működéshez.
Azért kérdeztem mert átraktam egy másik lábra a ledet beállítom hogy a portd.2 kimnet legyen és a led semmit nem csinál, ha visszateszem a portb.2-re azonnal működik minden.
Kotesz írta:Azért kérdeztem mert átraktam egy másik lábra a ledet beállítom hogy a portd.2 kimnet legyen és a led semmit nem csinál, ha visszateszem a portb.2-re azonnal működik minden.
Ez most ugye pwm/ocr0a független kérdés?
Mert ugye az ocr0a hardveresen a portb.2-re van drótozva belsőleg... az nem cibálható át tetszés szerint - pedig sokszor jól jönne (nem fpga/xilinx áramkör ez). Ha arra a lábra kell pwm, akkor csak szoftveresen tudod megoldani... mint itt.
Avagy másik esetben: ha adsz utasítást a portd.2-re akkor sem megy?