Jelgenerátor AVR-el

Hogyan programozzak AVR chipet? Programozók beállításai...
Bascom nyelvű programok...
Válasz küldése
Avatar
Marvinn
Tranzisztorgyógyász
Hozzászólások: 153
Csatlakozott: 2008. július 24. csütörtök, 6:00

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

nobody_hun írta:A kapcsolás szinte ugyanaz.

A programot kell módosítani úgy, hogy az encoder 4 bemenetét olvassa be az AVR, értékelje ki a forgatás irányát, esetleg még a forgatás sebességét is lehet nézni. Az eredmény alapján pedig vezérelje a motort.

A BASCOM forrás ott van az oldalon, az jó kiindulási pont.
Igen valami ilyenre gondoltam.. a frekvenciát is az encoder kell hogy adja..
éppen olyan programot keresek amivel a programot tudom szerkeszteni de nem találok :) tudsz ajánlani valamit kezdők részére?

Az encodernek 3 lába van amiből egy a gnd és négyszögjelet állít elő ami el van tolva egymáshoz képest.
Avatar
nobody_hun
Bitfaragó
Hozzászólások: 425
Csatlakozott: 2005. november 14. hétfő, 7:00

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

BASCOM AVR Demo (limit 4k-ig): Innen

Az encoder által adott jeleket ki kell értékelni, utánna már egyszerű... :twisted:

Robert ezen az oldalon publikálta az encoderek alkalmazását AVR-rel. Kapcsolást, programot is találsz.
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

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

Külön fejleszd a programot. Egyik legyen az Enkóder kezelése 8ez van itt sz oldalon is a bascom könyvben.

A kapott eredmény - ha változott az előzőhöz- akkor tessék motort léptetni. Ezt a főprogramban is ellenőrizd
DE: a motor léptetési sebessége kisebb mint a tekerőé!

Nálam a motor max 2000 imp/sec-t tud.
Az enkóder 1 fordulata ~400....2000 impulzust ad. azaz az enkóder gyorsabban is tekerhető!
Könnyebbség hogyha az enkóder megszakítás alapon megy. Így a motor lépkedése alatt is tud számolni.


Buktatók: a motor elfordulás tól - ig lehet negatív szám is! Én - ha nem számolási teljesítményt kell vinni mellette double pontossággal dolgoznék, és indulnék ~3.000.000-ról. Így jó esetben nem mész le negatív számokig. Vagy valami középértékre állsz be, ha a motor áll.....

A kapcsolásra raknék egy sorosportot "debug" esetére. Így látom h belül mi történik....
A full/half step az lehet jumparrel is, de lehet sorosporton át kiadott paranccsal is.
Avatar
Marvinn
Tranzisztorgyógyász
Hozzászólások: 153
Csatlakozott: 2008. július 24. csütörtök, 6:00

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

Robert írta:Külön fejleszd a programot. Egyik legyen az Enkóder kezelése 8ez van itt sz oldalon is a bascom könyvben.

A kapott eredmény - ha változott az előzőhöz- akkor tessék motort léptetni. Ezt a főprogramban is ellenőrizd
DE: a motor léptetési sebessége kisebb mint a tekerőé!

Nálam a motor max 2000 imp/sec-t tud.
Az enkóder 1 fordulata ~400....2000 impulzust ad. azaz az enkóder gyorsabban is tekerhető!
Könnyebbség hogyha az enkóder megszakítás alapon megy. Így a motor lépkedése alatt is tud számolni.


Buktatók: a motor elfordulás tól - ig lehet negatív szám is! Én - ha nem számolási teljesítményt kell vinni mellette double pontossággal dolgoznék, és indulnék ~3.000.000-ról. Így jó esetben nem mész le negatív számokig. Vagy valami középértékre állsz be, ha a motor áll.....

A kapcsolásra raknék egy sorosportot "debug" esetére. Így látom h belül mi történik....
A full/half step az lehet jumparrel is, de lehet sorosporton át kiadott paranccsal is.
Köszönöm az ötleteket, de elkezdeni sem tudom :) vagyis a belinkelt kapcsolást proteusban megcsináltam de valamiért nem működik jól.. a kivezetésekre raktam ledeket és nem sorban villognak... Mivel tanulni szeretnék belőle így visszafelé kell indulom :) egy meglévő kapcsolással és programmal ismerkednék amit akár meg is építhatek.. aztán ha megértettem tudom programozni magamnak és átalakítani...
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

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

Bocs hogy bele....
Léptetőmotor topic (pár alap itt van, de sztem ott folytassuk): http://avr.tavir.hu/modules.php?name=Fo ... r&start=60

Enkóderre meg szerintem visszatérhetünk ha a motor már mozog:)
Amúgy enkóder, ami sorosport vagy LCDre visszaír:
http://avr.tavir.hu/modules.php?name=Co ... age&pid=19

Kezdőként én a LED villogtatás (1 lépés innen a motor, mert ott 4 LED van:) ), majd a sorosport. És utána az elkóder. ne harapj túl nagyot a tudásból egyszerre... Így könnyen lik maradhat.....
Igaz lassabb a fejlődés, de stabilabb az alap.... (csak tanács volt, tapasztalat alapján...)
Avatar
Marvinn
Tranzisztorgyógyász
Hozzászólások: 153
Csatlakozott: 2008. július 24. csütörtök, 6:00

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

Megépítettem, kiírja az adatokat :)
A motor tekercsi helyett ledeket villogtatok, igen. A belinkelt oldalon hex van.. azt vissza lehet fejteni bas-ba? mert hát ugye akkor fogom látni mi is a program..
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

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

Hexből bas-t nem lehet. De a megoldáshoz kezdesz közel lenni:)

Azaz enkóder megvan, és a visszaírás.
Most jön a motor.:P
Avatar
Marvinn
Tranzisztorgyógyász
Hozzászólások: 153
Csatlakozott: 2008. július 24. csütörtök, 6:00

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

igen.. motorvezérlő sok szóba jöhet :) pl uln 2003a :) csak éppen az avrt nem tudom programozni.. vagyis nem értek hozzá :) még.. kérnék egy két támpontot :)
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

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

Kezdj a LED villogtatóval.
Így 1-1 lábat alacsony és magas szintre tudsz állítani.
Motort ide írom:
(léptetőmotor)
http://avr.tavir.hu/modules.php?name=Fo ... r&start=60
Avatar
otto
DrótVégénSzéndarab
Hozzászólások: 40
Csatlakozott: 2007. július 27. péntek, 6:00

Egyszerű jelgenerátor

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

Sziasztok!
Egyszerű négyszög generátort szeretnék AVR-el "csinálni".
0...10kHz 10Hz-es lépésekben.
Úgy tűnik,hogy a TIMER felhasználásával ez "pontosan" nem megy.
Szívesen fogadnék jó ötletet a probléma megoldására!
Üdv. Ottó
Avatar
kefeur
Tranzisztorgyógyász
Hozzászólások: 187
Csatlakozott: 2008. február 17. vasárnap, 7:00

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

Szia Otto.

Pedig a Timer a legpontosabb az ilyen feladatok megoldására.
Van már ötleted , vagy kódod?
Ha látnánk segíteni tudnánk .
Kefeur
Avatar
otto
DrótVégénSzéndarab
Hozzászólások: 40
Csatlakozott: 2007. július 27. péntek, 6:00

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

kefeur írta:Szia Otto.

Pedig a Timer a legpontosabb az ilyen feladatok megoldására.
Van már ötleted , vagy kódod?
Ha látnánk segíteni tudnánk .
ebből a minta példából indultam ki:

$regfile = "2313def.dat"
$crystal = 4000000

Config Pind.6 = Output
Config Pinb.1 = Output
Config Timer1 = Timer , Prescale = 1
Const Timer1pre = 65100

Dim Wtime As Byte

Stop Timer1
Timer1 = Timer1pre

On Timer1 Pulse:
Start Timer1

Wtime = 100

Enable Interrupts
Enable Timer1

Do
Set Portd.6
Waitms Wtime
Reset Portd.6
Waitms Wtime
Loop

Pulse:
Stop Timer1
Timer1 = Timer1pre
Toggle Portb.1
Start Timer1
Return
----------------------------
1MHz-es kristályt alkalmazva Timer1pre=50000 esetén 20Hz (ha jól számoltam).
40Hz (25000)
60 Hz (16666,66667)
stb.
tehát van sok olyan érték a tartományban,amelyet pontosan nem tudok "bevinni",csak kerekíteni tudom.Az így keletkező hibát még nem számoltam ki,de jobban szeretem(-ném) a pontos értékeket.
Avatar
kefeur
Tranzisztorgyógyász
Hozzászólások: 187
Csatlakozott: 2008. február 17. vasárnap, 7:00

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

:)
1század HZ pontosság nem elég ?
Tudsz még játtcani a prescale értékével is.
Illetve segíthet még az AVRtimer nevű progi is.
Valahol itt megvan , nem emlékszem pontosan merre .
Több ötlet így estefelé nem igazán jutott eszembe.
Kefeur
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

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

Minél gyorsabb a kristályod annál finomabban be tudod lőni.
Próbáld a Timert mondjuk 100Khz-re beállítani.
És a megszakítás rutinban osztani.

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

 $regfile = "2313def.dat"
$crystal = 4000000

Config Pind.6 = Output
Config Pinb.1 = Output
Config Timer1 = Timer , Prescale = 1
Const Timer1pre = &HD8

Dim Wtime As Byte , Oszto As Word , T As Word 

Stop Timer1
Timer1 = Timer1pre

On Timer1 Pulse:
Start Timer1

Wtime = 100

Enable Interrupts
Enable Timer1

Do
Set Portd.6
Waitms Wtime
Oszto = 10
Reset Portd.6
Waitms Wtime
Oszto = 20

Loop

Pulse:
Stop Timer1
Timer1 = Timer1pre
Start Timer1
T = T + 1
If T = Oszto Then
   Toggle Portb.1
   T = 0
End If
Return
Ha nagyon pontos akarsz lenni, megszámolod hány órajel a megszakitás rutinod.
És minél kisebb a freki annál többel korrigálod az osztót lefele.
A hozzászólást 2 alkalommal szerkesztették, utoljára kapu48 2010. március 10. szerda, 23:04-kor.
Avatar
otto
DrótVégénSzéndarab
Hozzászólások: 40
Csatlakozott: 2007. július 27. péntek, 6:00

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

kefeur írta::)
1század HZ pontosság nem elég ?
10Hz-enként szeretném léptetni,de a 10kHz közelében már gyakorlatilag ezt nem tudom megtenni!
Azért holnap újra átgondolom az egészet!

Üdv. Ottó
Válasz küldése