Jelgenerátor AVR-el

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

HozzászólásSzerző: joda » 2011. március 27. vasárnap, 18:07

kapu48:
igazad van, amit írtam az csak papírról írtam át és érdekelt, hogy megértettem-e a számolási módot...

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 » 2011. március 27. vasárnap, 18:17

Timer0-n nincs COUNTER! Ez a külső órajelet/impulzust számlálna.

Órajel: Clock (quartz)
Prescale: 4-16-256 stb.

A Timer számlálja a Clock/Prescale-t. Azaz 16 MHz Clock és Prescale=4 esetén 4 MHz órajelet.

Timer0 számol startérték(0)-tól 256-ig. Ekkor van INT/túlcsordulás!

A túlcsordulási rutinban a kezdőérték beállítható. Innen számol (a háttérben!) a Timer... és ha eléri a 256 értéket, akkor újra Interruptot okoz....

Timer 1 esetén 0...65536-ig van a számolás...

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

HozzászólásSzerző: joda » 2011. március 27. vasárnap, 18:34

Robert:
Mostmár kezdem érteni, hogy halvány lila gőzöm mi történik. :lol:

Megkérhetlek, hogy leírd hogyan számolom ki a prescale meg a timer értékét egy példán keresztül, hogy ne magam húzzam ki a képleteket mert úgy gondolom jól úton járom de mégse müködik...

Mondjuk rá:
ATtiny2313 Timer1 ha jól értettem neki van counter-e Timer0 meg Time1-en is.
Crystal 8Mhz
és a portb.1 lábon szeretném villogtatni a LED-em minden 1s-be.

Előre is köszi.

itt a kódom amivel játszmm de nemigen haladok előre és a ledem villog de nem tudom sehogy se előre meghatározni, hogy olyan időközökbe villogjon ahogy én akarom.

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

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


Config Portb.2 = Output


Config Timer1 = Timer , Prescale = 256

On Timer1 Letelt

Enable Timer1
Enable Interrupts
Timer1 = 49911
Start  TIMER1
Do
!NOP
Loop

Letelt:
Toggle Portb.2
Stop Timer1
Return

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 » 2011. március 27. vasárnap, 18:58

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

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

Config Portb.2 = Output

Config Timer1 = Timer , Prescale = 256

On Timer1 Letelt

Enable Timer1
Enable Interrupts

'Timer1 = 49911
Start  TIMER1
Do
  '!NOP <ilyen utasitan NINCS
  Nop
Loop

Letelt:
  Timer1 = 49911
  'tulcsordulas utan adsz erteket neki. Igy 49911->65536-ig szamol
  Toggle Portb.2
  'Stop Timer1
  'ha megallitod a timert, akkor mitol menne tovabb????
Return

Igy a menete:
1 MHz / 256 / (65536-49911) / 2 = ~0.1 Hz 'lassu!
A 49911 helyett 54000 körülit adj.

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 » 2011. március 27. vasárnap, 18:59

ATtiny2313 Timer1 ha jól értettem neki van counter-e Timer0 meg Time1-en is.

?????


Timer0, Timer1, timer2 - belső különálló HW-ek
A Counter: ha a Timer/számláló külső órajelforrást/impulzust számol. Ilyen bemenete (T1) a Timer1-nek van....

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 » 2011. március 27. vasárnap, 20:14

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

'Timer Idözités számitás
'Szimulátorban futatható

$regfile = "ATtiny2313.DAT"
'$regfile = "m8def.dat"
$crystal = 8000000
$hwstack = 24
$swstack = 24
$framesize = 24
$sim


'(
Igy a menete:
1 MHz / 256 / (65536-49911) / 2 = ~0.1
')

'Er_sec = Qvarc / Prescales /(tword - Kivon) / Togle
'Változók:
Const Qvarc = 8000000
Const Prescales = 256                                       '   Prescale = 1|8|64|256|1024
Const Kivon = 54000
'Állandók:
Const Togle = 2
Const Tword = 65536
'Számítás:
Const T = Qvarc / Prescales
Const Tt = Tword - Kivon

Dim Er_sec As Word



Er_sec = T / Tt
Er_sec = Er_sec / Togle

Print " Timer1 = " ; Tt
Print "Eredmeny Sec= " ; Er_sec

End                                                         'end program

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

HozzászólásSzerző: joda » 2011. március 28. hétfő, 1:12

Robert:

Igy a menete:
1 MHz / 256 / (65536-49911) / 2 = ~0.1 Hz 'lassu!
A 49911 helyett 54000 körülit adj.


hogyan számoltad ki, hogy kb. 54000 kell, hogy legyen a Timer kezdő értéke?

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 » 2011. március 28. hétfő, 4:44

Beírod a képletbe, és így lász valami normális LEDvillogási sebeséget....

Amúgy AVRCalc, és kiadja a TCNTH és TCNTL értéket....

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 » 2011. március 28. hétfő, 7:58

AVRCalc : Timer1 = TCNTH *256 + TCNTL

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

HozzászólásSzerző: joda » 2011. március 28. hétfő, 9:37

Itt a kép az AVRcalc-ról és nem tudom mit nem allítottam jól be de nem kapom a ti értekeketeket:

Kép

TCNT1L = 0xee
TCNT1H = 0x85
Crystal = 8MHz
Prescale = 256

Képlet kapu48 alapján:
Timer1 = TCNTH *256 + TCNTL
---------------------------------------
Needed timer = 1000ms = 1s
Units = ms
Timer1 = 133*256+238
Timer1 = 34286

Na mmost, 65536 - 34286 = 31250

Tehat a Timer1 = 31250 és innen számol 65536-ig.
Ez a számláló minden kb. 9s kapcsolja ki és be a ledet... :(
Bocsi de nem értem miért... :cry: :cry: :cry:

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 » 2011. március 28. hétfő, 10:26

A háttérben levő képlet összetettebb. Az adatlapban van benne pontosan.

Na hülye kérdés: a Tiny2313-ban a DivClk8 igaz ki van kapcsolva? Csak hogy a valós órajele van-e...
Azaz a

do
toggle LED
waitms 100
loop

program igaz 5x villan 1 mp alatt?

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 » 2011. március 28. hétfő, 11:09

OCx Toggled-nél hiányzik a pipa!

Avatar
etwg
Pákabűvész
Hozzászólások: 213
Csatlakozott: 2011. február 7. hétfő, 7:00
Tartózkodási hely: Ausztria
Kapcsolat:

HozzászólásSzerző: etwg » 2011. március 28. hétfő, 14:01

Sziasztok

egy kezdö vagyok, és a BASCOM-t nem ismerem. Inkább ASM-ben szoktam programozni.
Mit jelent a BASCOMban a $ jel?

Kösz

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 » 2011. március 28. hétfő, 14:11

Ezzel kezdődnek a fordítónak szánt utasítások!
Help: http://avrhelp.mcselec.com/index.html
A hozzászólást 1 alkalommal szerkesztették, utoljára kapu48 2011. március 28. hétfő, 14:24-kor.

Avatar
etwg
Pákabűvész
Hozzászólások: 213
Csatlakozott: 2011. február 7. hétfő, 7:00
Tartózkodási hely: Ausztria
Kapcsolat:

HozzászólásSzerző: etwg » 2011. március 28. hétfő, 14:20

Kösz


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