Miért nem villog a LED-em?

Hogyan programozzak AVR chipet? Programozók beállításai...
Bascom nyelvű programok...
Avatar
joda
DrótVégénSzéndarab
Hozzászólások: 47
Csatlakozott: 2011. március 23. szerda, 6:00

Miért nem villog a LED-em?

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

Üdv.
a TimerX-el játszom az ATTiny2313 prockóval és ezzel
a kóddal szeretném villogásba hozni a LED-em de nem megy:

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

$regfile = "ATtiny2313.DAT"
$crystal = 1000000
$hwstack = 32
$swstack = 10
$framesize = 32


Config Pinb.2 = Output

Config Timer1 = Timer , Prescale = 64

On Timer1 Letelt

Enable Interrupts
Enable Timer1


Timer1 = 50011
Start Timer1

Letelt:
Toggle Pinb.2

Return
Miért?

Köszi.
Avatar
szegoj
SzínkódFestő
Hozzászólások: 92
Csatlakozott: 2010. február 4. csütörtök, 7:00

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

Hivatalosan a PORTB regiszter szolgál kimenetként, a PINB regiszter bemeneti módban működik, és olvasni szokták. Inkább a
Toggle PORT.2
utasítással kellene próbálkozni.
Egyébként érdekesen lett kitalálva az AVR port, a PINB.2 is használható állapotváltásra, de úgy, hogy mindig 1-et írunk bele. A
PINB.2 = 1
utasítás hatása azonos a TOGGLE utasításéval.
Avatar
joda
DrótVégénSzéndarab
Hozzászólások: 47
Csatlakozott: 2011. március 23. szerda, 6:00

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

igazad van, kipróbáltam portb. - vel is de akkor se tudom elindítani... :(
csak ég de nincs villogás...
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

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

Szerintem már nem érzékeli a szemed ezt a nagy frekvenciát!

De honnan veted a : „Crystal = 1MHz” értéket???
Mikor a fentebb beidézet pdf-ben 8MHz Oscilátor van boardodon!
:?:
Avatar
joda
DrótVégénSzéndarab
Hozzászólások: 47
Csatlakozott: 2011. március 23. szerda, 6:00

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

Igen, a 8MHz bordomon 8MHz de nem használom mind külső kristaly. Ki van kapcsolva....
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

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

1MHZ/ 64 / 256 / 2 = 30 Hz
64 - prescale
256 - Timer0Overflow
2 - toggle miatt
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

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

Hi Joda!
De mégis! Akkor honnan vetted az 1MHz-et? :?
Avatar
joda
DrótVégénSzéndarab
Hozzászólások: 47
Csatlakozott: 2011. március 23. szerda, 6:00

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

kapu48:
ha jól értettem ha BASCOM-ba beírom:

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

$crystal = 1000000
akkor a belső oszci működik 1Mhz-n.

Tévedek?
Avatar
Allspark
Bitmanipulátor
Hozzászólások: 106
Csatlakozott: 2009. július 9. csütörtök, 6:00

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

Az oszci a fusebitek beállítása alapján fog működni. Olvasd el a könyvben.

Amit a "$crystal" után írsz az a fordítónak kell mert abból számolja ki az időzítéseket.

Pl ha 1mhz-t írsz de 8mhz-n fut a proc akkor minden 8x gyorsabban fog működni, a villogást is. Tehát 30x8=240hz amit már nem látsz.
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

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

Avatar
joda
DrótVégénSzéndarab
Hozzászólások: 47
Csatlakozott: 2011. március 23. szerda, 6:00

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

Nos, ez így jó-e:

ezzel a kóddal tán 1KHz körüli jelet kapok a portb.2 lábon:

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

$regfile = "ATtiny2313.DAT"

Config Portb.2 = Output

Config Timer1 = Timer , Prescale = 64

On Timer1 Letelt

Enable Timer1
Enable Interrupts

Timer1 = 65535
Start Timer1
Do
  Nop
Loop

Letelt:
  Timer1 = 65529
  Toggle Portb.2
Return
Itt a kép az oszciloszkópról:
Kép

Ami engem érdekel:
számításotokon keresztül is megeggyezik a képen látható freki?

Köszönöm az ellenőrzést.
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

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

Ott az adatlap, tessék behelyettesíteni. illetve az AVRCalc és az AVRKalc program.... :x


Amúgy mennyi az órajel? mert a programból a $crystal sor hiányzik.....
Avatar
joda
DrótVégénSzéndarab
Hozzászólások: 47
Csatlakozott: 2011. március 23. szerda, 6:00

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

Az órajelem 1Mhz.

Ezt a képletet találtam az adatlapban remélem erről beszélsz:
fOCnx=fclk_I/O/(2 ⋅ N ⋅ (1 + OCRnx))
ahol
fOCnx - a kapott frekvencia
fclk_I/O - CPU freki
2 - feltételezem a két félperiódus száma
N - a prescaler faktor
(1 + OCRnx) - ezt a részt nem értem...
annyit értek, hogy ez a szám 8bit jelent mert az OCRnx az 8bit-es, nem értem mért írták ilyen fórmában? mért nem lehet konstans szám? mivel 1+7 az mindig 8 lessz.

Ha jól értettem akkor az OCRnx számolja a TCNT0 lépéseit és ha elérte a TOP lépésszámot akkor nullára áll.

Valójában az OCRnx regiszterbe írja pl. ez a kód sor az előre megadott TIMER0 értéket:

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

TIMER0 = 250
és ekkor az OCRnx érték is 250? azaz marad már csak még 6 lépés.

itt kellene egy kis segítség...

Köszi.
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

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

Mivel a számláló 0-tól kezd számolni, tehát ha x érték van benne.
Akkor az x+1 megszámolt órajelet jelent.
Avatar
joda
DrótVégénSzéndarab
Hozzászólások: 47
Csatlakozott: 2011. március 23. szerda, 6:00

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

AhA!
akkor azt hiszem kezdem érteni! :)

Tehat, ha a TIMER0-át használom akkor valójában a max érték a OCR0x 0-255 mivel a TIMER0 8bittes számláló.

Ha pedig a TIMER2 használom akkor valójában az X 0 - 65535 a szám.

Igazam van?
Válasz küldése