Jelgenerátor AVR-el

Hogyan programozzak AVR chipet? Programozók beállításai...
Bascom nyelvű programok...
Válasz küldése
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 »

kapu48 írta: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öszi!
Holnap kipróbálom!
Üdv. Ottó
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

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

Az én javaslatom az alacsony frekvenciák állítására jó.
Magasabb frekin már inkább az:
Do
Oszto = 1
Timer1pre = ???
Loop

Jobban variálható!
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 »

Sziasztok!
engem is érdelkel ez a jelgenerátor AVR-el.
Meddig jutottatok?

És nagyon szeretném megtanulni ezt a valami számítást amit használtok a Timer beallítására vagy akármi is legyen. :lol:
Kezdő vagyok az AVR világban és nem értem a Timer alapját... :(

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

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

A Timer fejezetet átolvastad?

Mi a mintaprogramod, mire jutottál és mi az elvárás/terv?
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 »

Valójában itt a témám:
http://avr.tavir.hu/modules.php?name=Fo ... 6256#16256

de itt is belekérdeztem mert érdekel, meg szeretném tanulni pontossan hogyan is van ez a timeres dolog.

Nos, találtam az éjjel valami érdekesset ahonnan valamit tán megtanultam, itt a link:
http://www.avrfreaks.net/index.php?name ... ic&t=50106

Ha jól értettem a dolgokat a fenti link alapján akkor:
A timernek az alap frekije az valójában a cpu kristaly frekije vagy a belső freki amit megadunk a programunkal pl. BAScom programnyelven:

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

$crystal = 1000000
A cpu-ban futó programnak van bizonyos program ciklus száma ami a cpu alap freki sebességével fut.
Ha a Timer funkciot használyuk akkor az valójában a program ciklusokat számolya és ha megfelelően számítjuk ki, hogy melyik ciklus számnál allítsuk le a Timert akkor valójában megkapjuk a keresett frekvenciját és változtathatjuk a kiválasztott kimenet-bemenet állapotát.

A számításhoz ezt a képletet találtam, hogy jó-e nem tudom még:
TPSZ - Timer Periódus szám
KF - Keresett frekvencia
TCF - Timer clock frekvencia

TPSZ = (1/KF)/(1/TCF)-1

Pelda:

TPSZ = ?
TCF = 1MHz (a cpu frekveniája)
KF = 20MHz (frekit amit szeretnénk előállítani)

TPSZ = (1/20)/(1/1000000) - 1
TPSZ = 49999

Tehát a Timer program ciklusszáma 49999 lenne és minden alkalommal amikor eléri ezt a számot indul nulláról és megváltoztatja pl. a PORTB.1-en a jelet aminek a frekvenciája valójában 20Hz. Tehat kapunk a pl. PORTB.1 pin-en egy 20Hz-s jelet.

Ha valamit nem jól értettem akkor szeretném ha valaki kijavítana.

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

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

A puding próbája az evés.
Indíts el a Timert ezzel az értékkel és meglátod, hogy jó e az eredmény!?

Bár nekem egészen más érték jött ki, én AVR Calct. Használtam.

Egészen érthetően leirja Itt:
http://www.hobbielektronika.hu/forum/to ... 2_ASC.html
(#701812) hpmaster válasza elektromos hozzászólására (#701429) Válasz • Máj 4, 2010

hpmaster hozzászólásában.

:arrow:
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
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 »

Hűűűű ezek a linkek amit adtatok nagyon profi!!
nagyon szépen köszönöm.

Ezt már kezdem érteni.
Ha leakadok szóllok.

Ok,
na most ami engem érdekel:
ha ezt a kódot elindítom:

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

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


Do
waitms 1
toggle portb.1
Loop
Ez azt jelenti, hogy minden 1 ms a port B 1-es laba változtatni fogja állapotát 0 ás 5v között.
A freki pedig akkor 1KHz kellene, hogy legyen?

Vagy hogy van ez az egész most?
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

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

Mértékegységek átszámítási táblázata:
http://sry.atw.hu/mertek.htm

1 min (Perc) = 60 sec (másodperc)
1 sec (másodperc) = 10a 3.kon = 1000 (MilliSec)
Mivel 2 (MilliSec) Alatt van teljes 0-1-0 Periódusod ezért:
1000 (MilliSec) / 2 (MilliSec) = 500Hz
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

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

kapu48 írta:Mértékegységek átszámítási táblázata:
http://sry.atw.hu/mertek.htm
Vagy: http://tankonyv.ham.hu/A_vizsga-DJ4UF/?cid=a03

1 min (Perc) = 60 sec (másodperc)
1 sec (másodperc) = 10a 3.kon = 1000 (MilliSec)
Mivel 2 (MilliSec) Alatt van teljes 0-1-0 Periódusod ezért:
1000 (MilliSec) / 2 (MilliSec) = 500Hz
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:
Köszi, mostmár kezdem érteni...

Nos, most van ilyen dolog:
Hogyan és miért kapcsol be a PA5 láb az AVR ATTiny2313 mikroval amikor nincs is neki PA PORTJA???

Itt a kód amivel sikerül bekapcsolni a PA portot :-)

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

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

Config Portb = Output
Portb.1 = 0

Do
Toggle Portb.1
Wait 10
Loop
képek:
Bekapcsolt PB1 és PA5:

Kép

AVR ATtiny2313 cpu a fejlesztő lapban:
Kép

Maga a fejlesztő lap:
Kép
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 SH6-dip-en kapcsoldki a PORTA-t
Mondjuk 1 adatlap a fejlesztő panelröl többet segítetvola!
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 »

Sikerült kikapcsolni a port A-t.
A sw7-en az utolsó kapcsolót kikapcsoltam és most ok.
De, próbáltam mondjuk rá ezzel a kóddal:

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

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

Config Portd.2 = Input
Config Portd.3 = Input
Config Portb.2 = Output
Config Portb.0 = Output

Dim A As Integer
A = 1

Portb.2 = 0
Portb.0 = 0

Print "Nesto:" , Portb.2

Do
If A < 10 Then
Portb.0 = 1
Else
Portb.0 = 0
End If

If Pind.2 = 1 Then
A = A + 10
End If


If Pind.3 = 1 Then

If A < 1 Then
A = 1
Else
A = A - 1
End If

End If


Portb.2 = 0
Waitms A
Portb.2 = 1
Waitms A

Loop
és ugyanazzal a kapcsolóval amit ki kapcsoltam az első esetbe nem kapcsolodik be a PA5 led....

érdekes...

itt a link ahol meg lehet nézni a kapcsolat rajzot:
http://www.mikroe.com/eng/downloads/get ... c_v100.pdf
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 »

Lenne egy kérdésem a számításokkal kapcsoltatossan, csak, hogy letisztázzam magammal a tanultakat:

Ha pl. 1KHz jelet akarok kapni pl. a portb.1 lábon akkor a Timer0 számítása így menne:

Crystal = 1MHz
Prescale = 4

(prescale/crystal)*256
(4/1000000)*256= 0,001024s a Timer0 lépésideje ami kicsivel több az 1Mhz de nem kell az apszolult pontosság tehat elenyészhető a különbség.

De ha pontos akarok lenni akkor:
prescale/crystal
4/1000000 = 0,000004s
0,001/0,000004 = 250 lépés ami a 8bit-es regiszter lépésszámába belefér
és a kód akkor így nézne ki:

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

Timer0 = 6 'mivel 256-250 = 6
Start Timer0
On Timer0 Letelt

Letelt:
Toggle portb.1
Ez pontossan minden 0,001s kapcsolna a portb.1 lábat 0 és 5v ?
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

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

Csak van 1 bibi!
Prescale csak ezek lehetnek:
PRESCALE
The TIMER is connected to the system clock in this case. You can select the division of the system clock with this parameter.

Valid values are 1 , 8, 64, 256 or 1024
PRESCALE can't be used in COUNTER mode.

:)
Válasz küldése