time3r on atmega64

Hogyan programozzak AVR chipet? Programozók beállításai...
Bascom nyelvű programok...
Válasz küldése
Avatar
bg568
Újonc
Újonc
Hozzászólások: 7
Csatlakozott: 2007. július 26. csütörtök, 6:00

time3r on atmega64

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

Sziasztok, egy kis segítségre lenne szükségem.
a 64as ATmegán szeretném használni a 3as timert(16bit)
méghozzá a 14 es üzemmódban amelynél az ICR3H és ICR3L val lehet definiálni a számláló maximális értékét.

Az OCR3A,OCR3B,OCR3C vel akarom beállítani a komparálási értékeket,

a datasheetnek megfelelően beállítottam a TCCR3A, TCCR3B, regisztereket, + a timerhez kapcsolódó port-irányregisztert, de sem a szimulációban de sem a szimulációban sem a kontolleren nem az történik amit várok.
a kód a következő:

#include "m64def.inc"

.org 0x0000
rjmp init

init:
cli

ldi r16, LOW(RAMEND)
out SPL, r16
ldi r16, HIGH(RAMEND)
out SPH, r16

ldi r16,0x08
sts OCR3AH,r16
ldi r16,0x00
sts OCR3AL,r16

ldi r16,0x08
sts OCR3BH,r16
ldi r16,0x00
sts OCR3BL,r16

ldi r16,0x08
sts OCR3CH,r16
ldi r16,0x00
sts OCR3CL,r16

ldi r16, 0xFF
out DDRE, r16

ldi r16,0xAA
sts TCCR3A,r16

ldi r16,0x1A
sts TCCR3B,r16

ldi r16, 0xEE
sts ICR3H, r16
ldi r16,0x00
sts ICR3L,r16



sei


rjmp loop

loop:
rjmp loop
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

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

Bascomul nem jó?:)

Enable Int van, de enable timert nem látok....
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

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

Bascomban meglesném a config timer3=.... és vmi időzítős program, disassm-nek vetném alá-...

Ebből láható, h mi és hogy van...
Avatar
bg568
Újonc
Újonc
Hozzászólások: 7
Csatlakozott: 2007. július 26. csütörtök, 6:00

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

tökéletesen jó bascomban is lefordítom ..
amugy itt nem kell enable timer mivel ugy engedélyezed h a TCCR3B ben 0 tól különböző órajel osztót állítasz be.

bár érdekelne nagyon h bascomban valaki el tudja indítani ezt a timert 14 es üzemmódban, és ha el akkor mind a három compare unit megy-e.
Az Atmeles supporterektől kérdeztem már, de nem tudták..
előre is köszi.
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

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

14-es üzemmód?
Bascomban amik vannak (lsd súgó):

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

CONFIG TIMER0 = COUNTER , PRESCALE= 1|8|64|256|1024 , 
EDGE=RISING/FALLING , CLEAR TIMER = 1|0
CONFIG TIMER0 = TIMER , PRESCALE= 1|8|64|256|1024

CONFIG TIMER1 = COUNTER | TIMER | PWM , 
EDGE=RISING | FALLING , PRESCALE= 1|8|64|256|1024 , 
NOISE CANCEL=0 |1, CAPTURE EDGE = RISING | FALLING , 
CLEAR TIMER = 1|0, 
COMPARE A = CLEAR | SET | TOGGLE I DISCONNECT , 
COMPARE B = CLEAR | SET | TOGGLE I DISCONNECT , 
PWM = 8 | 9 10 , 
COMPARE A PWM = CLEAR UP| CLEAR DOWN | DISCONNECT 
COMPARE B PWM = CLEAR UP| CLEAR DOWN | DISCONNECT 
A TimerCompare egymástól függetlenek. Miért ne menne?
Sajna nincsen M64/128-am panelen - még.
Avatar
bg568
Újonc
Újonc
Hozzászólások: 7
Csatlakozott: 2007. július 26. csütörtök, 6:00

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

a datasheetben van olyan üzemmód, hogy a számláló top értékét az ICR3 regiszterrel állítod be. a számláló nullától kezd és felfut ICR3 ig. a comparálási értékek meg vhol közte vannak, ezek az OCR3 regiszterekben állítandók. ilyen üzemmódra gondoltam.
Avatar
bg568
Újonc
Újonc
Hozzászólások: 7
Csatlakozott: 2007. július 26. csütörtök, 6:00

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

igazából mind1 h atmega64 vagy tiny2313 , 2313-t ha rá tudod venni erre az üzemódra az már jó..
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

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

2313 nincs timer3.

Az OCR1A es OCR1B működik...

De meglesem...
Avatar
bg568
Újonc
Újonc
Hozzászólások: 7
Csatlakozott: 2007. július 26. csütörtök, 6:00

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

valóban nincs, tényleg..sorry..
bár igazából lényegtelen h timer1 vagy timer3, 16 bites legyen. az érdekelne h miképp lehet elérni akár 2313ban azt az üzemmódot ahol az ICRben állítod a timer top értékét.
sanzol

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

Én a Codevision avr codewizardavr nevű eszközével próbálnám ki, hiszen akkor ő legenerálná neked, hogy miként állítsd be az ide vonatkozó regisztereket!
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

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

Gyakorlatilag a ICR3 regiszterrel bejövő impulzusokat számolsz?
Avatar
bg568
Újonc
Újonc
Hozzászólások: 7
Csatlakozott: 2007. július 26. csütörtök, 6:00

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

codevisionnal kipróbáltam. a regisztereket ugyanúgy állítja be mint ahogy én tettem. de úgy sem megy. közben találtam egy német fórumot, ott egy srác ugyanezzel a problémával küzd, de ők sem jutottak semmire. ők ráfogták arra hogy rossz a szimuláció. pedig sztem csak valami apróság elkerüli a figyelmet.

robert: az ICR3 regiszter egy input capture regiszter arra való hogy amikor a timert input capture üzemmódban használad akkor amikor megérkezik a triggerjel(fel v lefutó él) akkor a timer értéke ezekben a regiszterekben tárolódik. DE van egy olyan pwm üzemmód a datasheet szerint a 14es amikor ezeket a regisztereket nem a valós rendeltetési céljukra használjuk hanem például beállítjuk vele hogy a 16 bites számláló ne 65535-t hanem az ICR3H,ICR3L regiszterben lévő értéket tekintse max értéknek.
arra kellene például hogy akármilyen kvarc mellett mindenféle interrupt használata nélkül tudjak előállítani akármilyen periódusidőket.

interrupt használatával megoldható máshogy is sokkal egyszerűbben , de ebben a projectben véletlenszerüen jönnek más interruptok, így volt olyan hogy a timer interruptok miatt lekéstem egy pontos kiszolgálásáról.
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

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

Ilyet a Bascom direktben nem tud.
Erre ami lehet:
INTen belül a startértéket adod meg. Ez néhány órajel, ha nem kell SRAMból kivenni az értéket.
Az INT rutinban a be/kilépés regisztermentései 20-25 órajelet jelentenek.

Ha nagyon sűrű INT van, és nem megenegedhető az idővesztesség (20 MHz kristály esetén ez ~0.8-1 MHz INT kiszolgálást jelent, azaz ~1usec késést) akkor ide kevés a AVR chip.

De ha több INT esik be egyidőben, akkor az egyik INT rutinból visszatérve automatikusan a következő INTre ugrik. Azaz nem veszik el INT. Nézd meg az INTERRUPT fejezetet. Ott van ez a probléma kivesézve... Mármint hogyan legyen a legrövidebb az INT és mi van ha túl sokat időzik a INT alatt.

Én nem mernék nem túl gyakori/szabványos megoldást használni....
Nem lehet a prg-t átírni? vagy más megoldás esetleg?


Ha nagyon INT igényes a feladat, akkor ARM, AVR32 proci javasolt.... Ezek 66-400 MHzn járnak... de sztem ez ágyú-veréb esete....
Avatar
bg568
Újonc
Újonc
Hozzászólások: 7
Csatlakozott: 2007. július 26. csütörtök, 6:00

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

hmhh köszönöm, még gondolkozok, keresem a hibát..
azt tudom hogy a bascom sok mindent nem tud amit assamblyben simán meg lehet csinálni, ezért is nem használom. bár kommersz célokra tökéletes.

a két interrupt várakozik esetében meg az a baj hogy egyik sem várakozhat semmit, mindet ki kell szolgálni amint lehet, mert pontatlanságot okoz.


Avr32?Arm?

avr32-t nem ismerem, bár sok jót olvastam felőle :( Arm memóriakezelése nem tetszik :(

ha bonyolultabb feladat van akkor inkább tms320.
amugy igazad lehet inkább megfogom a dolgot vmi más megközelítésben de az ágyút a nagy vadakra kell tartogatni , ide jó a puska is

:P
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

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

Bascomban ezért lehet szüksé ASM betétekre...
A C-vel ugyanez a helyzet....

Ennire INT kitikus nem lehet vmi! Ezt egyetlen chippel akkor nem tudod megoldani....
A PC-n in 10msec érzékenységgel dolgozik. Amúgy egyetlen chip sem lalmas 2 int _egyidejű_ lkezelésére, hacsak nem többmagvas... De ez már nem a kontrollerek világa...
Atomelemzések a cél?

Nálam 1-2 msec be zkott férni. Ha meg frekvenciamérés kell pl, ahhoz cél IC-t kell illeszteni a AVRre...
Válasz küldése