DCF rutin

Hogyan programozzak AVR chipet? Programozók beállításai...
Bascom nyelvű programok...
Válasz küldése
Avatar
kovacsna
Pákabűvész
Hozzászólások: 208
Csatlakozott: 2008. június 3. kedd, 6:00

DCF rutin

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

Sziasztok.

Némi felhomályosítást szeretnék kapni a BASCOM DCF rutinjával kapcsolatban.
Kb most úgy vagyok vele, hogy "Ércsük mi az a gőzgép, csak mi hajti?" :)
Abból indultam ki, hogy vettem egy MEGA16-ot. Szépen rátettem egy óra kvarcot és ment is róla az asszinkron oszcillátora, mitán a config clockot beállítottam. Gondoltam, hogy amint beteszem a DCF rutint, meg a vevőt persze, az majd szépen felülírja az óra beállításokat és hurrá. Na nem. Panaszkodott, hogy a timer$ változó már használatban van. Valóban hiszen ezt a CONFIG CLOCK beállította. Na akkor ezt kigyilkoltam. Nincs panasz tovább, program ok. Tehát a DCF rutin ezt megcsinálja gondoltam én. Akkor gondoltam, mi van ha menet közben kiveszem az óra kvarcot. Meglepi. Az óra ketyeg tovább. Tovább bonyolítottam a dolgot. Levettem a DCF vevőt is. Az óra meg ment tovább. Na inettől kezd homály lenni, hogy a DCF rutin a TIMER1-et használaja, de hogy? Magának leosztja rendszer órajelet? Arról nem is beszélek, hogy a HELP-ben leírt paramétereket nem is lehet, mind használni! Szóval ha valaki érti, hogy mi hajti a dógot, írja le, legyen szíves!
Előre is köszönöm!
Amúgy 1.11.9.3 Bascomot használok.
KN
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

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

Ha ide tennél valami program részletet vagy kapcsolási rajzót!
Mert így nem igazán értjük miről is van szó?
:?:
Nem elég a kristályt berakni az áramkörbe! Be is kel állítani a Fusebit DCBA: Externál Crystal-t! Különben alapból belső oscilátorról megy a procid. :!:
Avatar
kovacsna
Pákabűvész
Hozzászólások: 208
Csatlakozott: 2008. június 3. kedd, 6:00

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

Bocsánat, kicsit nem voltam teljesen világos.
A proci 16MHz-ről ketyeg és az alap, hogy a FUSE biteket jól állítom be!
Viszont ha megkukkantod az Atmeg16 leírását akkor ott láthatod a lábkiosztásnál az TOSC1 és TOSC2 lábakat! Na ide kell a hétzenés orából a kvarc, mert ez hajta a TIMER2-t asszinkron módban, amennyiben a CONFIG CLOCK = SOFT dolgot beállítod!
Na én ezt a kristályt vettem ki és nem a rendszerórajel kristályát!
Ezért gondoltam, hogy a DCF rutin nem a TIMER2-t használja!

Ami nekem most kérdés, hogy a DCF rutin hogyan használja a TIMER1 számlálót!

Kapcs rajz nincs egyelőre!
Progi van:

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

$regfile = "m16def.dat"
$crystal = 16000000
$hwstack = 128
$swstack = 128
$framesize = 128

Enable Interrupts


Config Lcd = 20 * 2 , Chipset = Ks077
Config Lcdpin = Pin , Db4 = Porta.3 , Db5 = Porta.2 , Db6 = Porta.1 , Db7 = Porta.0 , E = Porta.4 , Rs = Porta.5
Cursor Off Noblink
Cls

Config Dcf77 = Pind.7 , Timer = 1 , Timer1sec = 0 , Inverted = 0 , Update = 0 , Check = 2


Config Date = Ymd , Separator = .

'Config Clock = Soft

Date$ = "00.01.01"

Time$ = "00:00:00"


Dim Bweekday As Byte , Strweekday As String * 10


Bweekday = Dayofweek()

Strweekday = Lookupstr(bweekday , Weekdays)



Do
   Bweekday = Dayofweek()

   Strweekday = Lookupstr(bweekday , Weekdays)

   Home

   Lcd Date$ ; "  " ; Time$

   Locate 2 , 1

   Lcd Strweekday ; "  " ; Dcf_status.0

Loop


Weekdays:

Data "Hetfo    " , "Kedd     " , "Szerda   " , "Csutortok" , "Pentek   " , "Szombat  " , "Vasarnap "
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

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

:oops:
:idea:
A hozzászólást 1 alkalommal szerkesztették, utoljára kapu48 2009. május 14. csütörtök, 13:01-kor.
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

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

Nyersfordítás :
Mikor használod a CONFIG CLOCK útmutatást a szerkesztő DIM a következő változók automatikus : _sec , _min , _hour, _day , _month , _year
A változók TIME$ és DATE$ szintén dimenzionáltak lesznek. Ezek különleges változók, mióta őket kezelik különböző. Lásd TIME$ és DATE$.

Az _sec, _mint és másik belső változókat változtathatja meg a felhasználó szintén.
De természetesen megváltoztatni az értékeiket meg fogja változtatni a DATE$/TIME$ változókat.

A szerkesztő szintén létrehoz egy ISRt az egy másodperc alatt egyszer frissítéseket kap. Ez csak működik az 8535, M163 és M103 és M603, vagy másik AVR chipek, amiknek van egy olyan időzítőjük, aki asynchronymódban tud dolgozni.

A 90S8535, timer2 használják. Azt nem használhatják enyém a felhasználó már! Ez szintén igaz, mivel a másik asyncet vág apróra időzítő.

Használd SOFTOT arra, hogy használja a szoftver alapú óragyakorlatokat. Arra használja USERT, hogy írjon/például egy I2C órachippel keverve használja a saját kódodat.

Értesítés, amire neked szükséged van hogy csatlakoztass egy 32768 Hz kristályt azért hogy asyncmódban használd az időzítőt, a mód azt az óraidőzítőre használják.

Amikor csak választod az USER opciót, a belső változókat létrehozzák. Azzal az USER opcióval, amire neked szükséged van hogy írd az órát, kódold magadat.
:?: :roll:
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

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

„Akkor gondoltam, mi van ha menet közben kiveszem az óra kvarcot. Meglepi. Az óra ketyeg tovább. Tovább bonyolítottam a dolgot. Levettem a DCF vevőt is. Az óra meg ment tovább.”

És pontosan járt? Vagy csak úgy ment valahogy?
Avatar
kovacsna
Pákabűvész
Hozzászólások: 208
Csatlakozott: 2008. június 3. kedd, 6:00

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

Ment rendesen. Mivel pár percre vettem le a DCF vevőt így nem láttam az eltérést!

A config clock amúgy már nem fontos, de lehet én néztem be ott valamit, hogy a SOFT beállítás esetén nem kell az óra kvarc!

A lényeg az , hogy s DCF rutin, mit is csinál pontosan a TIMER1-el és hogyan! Illetve honan jon a TIME$ változó értéke.

ÜDV

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

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

Ott van a szövegben: „A szerkesztő szintén létrehoz egy ISRt az egy másodperc alatt egyszer frissítéseket kap.”
Vagyis a timer 1mp-ként megszakítást kér, a meghívott rutin gondoskodik a fenti változók beállításáról.

Hogyan? Ha belenézel a fordító Lib könyvtárában valamelyik *.lib-be. Láthatod azok nagy részben Asamblerben íródnak. Ez pedig már egy másik tanfolyam.
:D
Avatar
kovacsna
Pákabűvész
Hozzászólások: 208
Csatlakozott: 2008. június 3. kedd, 6:00

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

Hidd el nem az angol szövegértéssel van a bajom:)

Valahol pont erre voltam kíváncsi. Hátha van olyan fehérember aki ezt már kivesézte és érti a logikáját teljesen!
No mindegy.

Beteszek ide egy kódot ha valakit érdekel.
DCF óra + hőmérő DS18S20+ -al! A kijelzó egy PLED-es 2*20 karakteres LCD.

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

$regfile = "m16def.dat"
$crystal = 16000000
$hwstack = 128
$swstack = 128
$framesize = 128

Config 1wire = Portc.1

Config Lcd = 20 * 2 , Chipset = Ks077
Config Lcdpin = Pin , Db4 = Porta.3 , Db5 = Porta.2 , Db6 = Porta.1 , Db7 = Porta.0 , E = Porta.4 , Rs = Porta.5
Cursor Off Noblink
Cls

Config Dcf77 = Pind.7 , Timer = 1 , Timer1sec = 0 , Inverted = 0 , Update = 0 , Check = 2

Config Date = Ymd , Separator = .

Enable Interrupts

Dim Ds_data(8) As Byte
Dim Cnt_rem As Byte
Dim Cnt_perc As Byte
Dim Cnt_tmp As Single

Dim Temp As Single

Dim Bweekday As Byte , Strweekday As String * 10

Date$ = "00.01.01"
Time$ = "00:00:00"

Bweekday = Dayofweek()

Strweekday = Lookupstr(bweekday , Weekdays)

1wreset

If Err <> 0 Then

   Locate 2 , 11
   Lcd "Sens Err"

End If

Do

   If _sec = 0 Or _sec = 30 Then                            'A homerseklet kijelzese minden 30. mp-ben

      Gosub Homeres

   End If

   Bweekday = Dayofweek()

   Strweekday = Lookupstr(bweekday , Weekdays)

   Home

   Lcd Date$ ; "  " ; Time$

   Locate 2 , 1

   Lcd Strweekday ; " " ; Fusing(temp , "#.&") ; " °C"


Loop

Homeres:
   1wwrite &HCC                                             ' Read ROM command
   1wwrite &H44                                             ' Measure Temperature

   Waitus 200

   1wreset

   1wwrite &HCC                                             ' Skip ROM command
   1wwrite &HBE                                             ' Read Scratch command

   Ds_data(1) = 1wread()                                    'Adatok beolvasasa
   Ds_data(2) = 1wread()
   Ds_data(3) = 1wread()
   Ds_data(4) = 1wread()
   Ds_data(5) = 1wread()
   Ds_data(6) = 1wread()
   Ds_data(7) = 1wread()
   Ds_data(8) = 1wread()

   1wreset

   Shift Ds_data(1) , Right , 1                             'A 0.5 fok eltuntetese

   Temp = Ds_data(1) - 0.25                                 'a tizedes fok kiszámítása.
                                                            'A képlet a homeroszonda leirasaban benne van
   Cnt_tmp = Ds_data(8) - Ds_data(7)
   Cnt_tmp = Cnt_tmp / Ds_data(8)

   Temp = Temp + Cnt_tmp

Return

Weekdays:

   Data "Hetfo    " , "Kedd     " , "Szerda   " , "Csutortok" , "Pentek   " , "Szombat  " , "Vasarnap "
By

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

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

Most mi a hiba?
1.: Hogy nem veséztük ki, csak használtuk úgy ahogy már más megírta?
2.: Vagy, hogy érdeklődtem a problémád iránt, inkább hagytalak volna magadra?
3.: Vagy …?
:?
Különben köszi a program részletet, biztos hasznos lesz valamikor, valakinek. :D
Avatar
kovacsna
Pákabűvész
Hozzászólások: 208
Csatlakozott: 2008. június 3. kedd, 6:00

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

Igazából nincs hiba hiszen működik! Ja és semmi rossz szájízű megjegyzés, mielőtt félreérted!:) Csupán szerettem volna tudni, hogy Apu (KAPU) , hogy megy be, az elefánt.....:)
Nem ASM szinten, de kicsit bővebben, mint a HELP-ben van!

A programot szívesen. Amúgy nem részlet, hanem az egész. Csupán egy hibája van. Nincs meg benne a negatív hőmérséklet kiszámolása:) Télen ne használja senki:)))) Majd megírom. Bár egy kettes komplemens képzés nem nagy ügy:)

BY
KN
Válasz küldése