ATTiny2313 és a PWM első lépései

Hogyan programozzak AVR chipet? Programozók beállításai...
Bascom nyelvű programok...
Avatar
Kotesz
Tranzisztorgyógyász
Hozzászólások: 171
Csatlakozott: 2009. szeptember 24. csütörtök, 6:00

Hozzászólás Szerző: Kotesz »

Kód: Egész kijelölése

$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.
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

Simán ha outputként használod, akkor mit mutat a LED?
Avatar
Kotesz
Tranzisztorgyógyász
Hozzászólások: 171
Csatlakozott: 2009. szeptember 24. csütörtök, 6:00

Hozzászólás Szerző: Kotesz »

Ha simán egy ledes villogóként használom a portb.2 villog a leg rendesen.
Avatar
SirLeslie
Pákabűvész
Hozzászólások: 247
Csatlakozott: 2005. április 14. csütörtök, 6:00

Hozzászólás Szerző: SirLeslie »

Kotesz írta:Ha simán egy ledes villogóként használom a portb.2 villog a leg rendesen.
"Enable interrupts" hiányzik a kódodból...
Avatar
Kotesz
Tranzisztorgyógyász
Hozzászólások: 171
Csatlakozott: 2009. szeptember 24. csütörtök, 6:00

Hozzászólás Szerző: Kotesz »

Továbbra sem csinál semmit.
Avatar
SirLeslie
Pákabűvész
Hozzászólások: 247
Csatlakozott: 2005. április 14. csütörtök, 6:00

Hozzászólás Szerző: SirLeslie »

Kód: Egész kijelölése

$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
Ezzel a próbáld meg...
Avatar
Kotesz
Tranzisztorgyógyász
Hozzászólások: 171
Csatlakozott: 2009. szeptember 24. csütörtök, 6:00

Hozzászólás Szerző: Kotesz »

Ezzel már működik.
Elalszik a led és fokozatosan nő a fényereje.

Kód: Egész kijelölése

$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.
Avatar
Kotesz
Tranzisztorgyógyász
Hozzászólások: 171
Csatlakozott: 2009. szeptember 24. csütörtök, 6:00

Hozzászólás Szerző: Kotesz »

Kód: Egész kijelölése

$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

Igy már oda-vissza megy a fényerőszabályzás.
Avatar
Kotesz
Tranzisztorgyógyász
Hozzászólások: 171
Csatlakozott: 2009. szeptember 24. csütörtök, 6:00

Hozzászólás Szerző: Kotesz »

Kód: Egész kijelölése

Tccr0a = &B10000001
Tccr0b = &B00000011
Ezt nem értem, az adatlapot böngészve - némi angol tudásommal- ez állítja be a port tulajdonságait?

Jól gondolom?
Avatar
SirLeslie
Pákabűvész
Hozzászólások: 247
Csatlakozott: 2005. április 14. csütörtök, 6:00

Hozzászólás Szerző: SirLeslie »

Kotesz írta:...Jól gondolom?
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.
Avatar
Kotesz
Tranzisztorgyógyász
Hozzászólások: 171
Csatlakozott: 2009. szeptember 24. csütörtök, 6:00

Hozzászólás Szerző: Kotesz »

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.
Avatar
SirLeslie
Pákabűvész
Hozzászólások: 247
Csatlakozott: 2005. április 14. csütörtök, 6:00

Hozzászólás Szerző: SirLeslie »

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.
Avatar
Kotesz
Tranzisztorgyógyász
Hozzászólások: 171
Csatlakozott: 2009. szeptember 24. csütörtök, 6:00

Hozzászólás Szerző: Kotesz »

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.
Avatar
SirLeslie
Pákabűvész
Hozzászólások: 247
Csatlakozott: 2005. április 14. csütörtök, 6:00

Hozzászólás Szerző: SirLeslie »

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?

Kód: Egész kijelölése

do
set portd.2
waitms 500
reset portd.2
waitms 500
loop
Avatar
Kotesz
Tranzisztorgyógyász
Hozzászólások: 171
Csatlakozott: 2009. szeptember 24. csütörtök, 6:00

Hozzászólás Szerző: Kotesz »

így már értem, tehát a
Mert ugye az ocr0a hardveresen a portb.2-re van drótozva belsőleg...
itt a kutya elásva.
Válasz küldése