Jelgenerátor AVR-el

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

HozzászólásSzerző: Marvinn » 2008. július 24. csütörtök, 14:51

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ásSzerző: nobody_hun » 2008. július 24. csütörtök, 15:10

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: 9993
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

HozzászólásSzerző: Robert » 2008. július 24. csütörtök, 16:49

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
Tartózkodási hely: Budapest

HozzászólásSzerző: Marvinn » 2008. július 24. csütörtök, 16:55

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: 9993
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

HozzászólásSzerző: Robert » 2008. július 24. csütörtök, 17:45

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
Tartózkodási hely: Budapest

HozzászólásSzerző: Marvinn » 2008. július 24. csütörtök, 17:49

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: 9993
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

HozzászólásSzerző: Robert » 2008. július 24. csütörtök, 17:52

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
Tartózkodási hely: Budapest

HozzászólásSzerző: Marvinn » 2008. július 24. csütörtök, 17:57

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: 9993
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

HozzászólásSzerző: Robert » 2008. július 24. csütörtök, 18:03

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
Tartózkodási hely: Budapest,XVIII.ker.
Kapcsolat:

Egyszerű jelgenerátor

HozzászólásSzerző: otto » 2010. március 10. szerda, 20:53

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: 186
Csatlakozott: 2008. február 17. vasárnap, 7:00
Tartózkodási hely: Szuhakálló

HozzászólásSzerző: kefeur » 2010. március 10. szerda, 21:06

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
Tartózkodási hely: Budapest,XVIII.ker.
Kapcsolat:

HozzászólásSzerző: otto » 2010. március 10. szerda, 21:18

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: 186
Csatlakozott: 2008. február 17. vasárnap, 7:00
Tartózkodási hely: Szuhakálló

HozzászólásSzerző: kefeur » 2010. március 10. szerda, 22:21

:)
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: 3344
Csatlakozott: 2008. augusztus 29. péntek, 6:00
Tartózkodási hely: Újkígyós

HozzászólásSzerző: kapu48 » 2010. március 10. szerda, 22:47

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
Tartózkodási hely: Budapest,XVIII.ker.
Kapcsolat:

HozzászólásSzerző: otto » 2010. március 10. szerda, 22:50

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ó


Vissza: “Bascom-AVR nyelvű programozás (AVR programozásának lehetőségei)”

Ki van itt

Jelenlévő fórumozók: nincs regisztrált felhasználó valamint 1 vendég