Forum » Elektrotehnika in elektronika » programiranje procesorja
programiranje procesorja
korenje_ver2 ::
v velikoserijskih izdelkih je vedno treba paziti na ceno, zato tam podjetja vzamejo vedno take pice, da ponucajo vse pine. Ti pici so torej najmanjsi kot so lahko. V glavnem jih morajo izkoristiti do konca. V takih primerih se vedno programira v assemblerju po moje, ker ze 1$ ceneje na izdelek je ogromno.
TESKAn ::
Ja, misli si. C je preferiran pred assemblerjem, ker kot prvo traja manj časa, da razviješ zadevo (ko pišeš kratke programčiče, kjer meriš eno temperaturo in krmiliš LCD, že gre - ko pa delaš kaj zapletenejšega, ti pa .asm hitro rata nepregleden), kot drugo pa če ti razvijalec softwera pobegne, ima njegov naslednik manj problemov, da 'pogrunta' kodo.
Aja in zakaj misliš, da z C - jem ne moreš hardwera do konca izkoristit? Sej ti C ne nameče v kodo par NOPov sem pa tja.
Aja in zakaj misliš, da z C - jem ne moreš hardwera do konca izkoristit? Sej ti C ne nameče v kodo par NOPov sem pa tja.
Uf! Uf! Je rekel Vinetou in se skril za skalo,
ki jo je prav v ta namen nosil s seboj.
ki jo je prav v ta namen nosil s seboj.
korenje_ver2 ::
to glede nepreglednosti mas cis prov. jz sm veri zvecer cist znoru, ko nism najdu napake, pa sem pregledu vezje, primerju kodo s starim sejvom... sm pajstu del kode iz starih sejvov in je potem delalo normalno. sigurn sm nekje ponesreci pritisnu tipko in je malo zmedlo kodo
pri Cju mi je vsec ker lahko delas neke knjiznice... npr mas knjiznico za pisanje na lcd, ki ji podas neke parametre. kle v asm je sicer isto, vendar moras narediti posebne ram lokacije al pa dat parameter v wreg, vendar je bolj komplicirano. Res pa da take knjiznice pozirajo nepotreben procesorski cas in prostor na flashu....
pri Cju mi je vsec ker lahko delas neke knjiznice... npr mas knjiznico za pisanje na lcd, ki ji podas neke parametre. kle v asm je sicer isto, vendar moras narediti posebne ram lokacije al pa dat parameter v wreg, vendar je bolj komplicirano. Res pa da take knjiznice pozirajo nepotreben procesorski cas in prostor na flashu....
Zgodovina sprememb…
- spremenilo: korenje_ver2 ()
icek ::
v velikoserijskih izdelkih je vedno treba paziti na ceno, zato tam podjetja vzamejo vedno take pice, da ponucajo vse pine. Ti pici so torej najmanjsi kot so lahko. V glavnem jih morajo izkoristiti do konca. V takih primerih se vedno programira v assemblerju po moje, ker ze 1$ ceneje na izdelek je ogromno.
Ni ravno tako. Poznam kar nekaj firm (tudi nasa), katere se PICov izogibamo. Zakaj, ker so enostavno predragi. Obstaja mnogo drugih isto zmogljivih mikrokontrolerjev, kot so PICi, ki so obenem cenejsi.
Rider of Theli
www.air-tv.net
www.air-tv.net
korenje_ver2 ::
no ja... vazn je da je delovna sila motivirana in produktivna
v glavnem kar se tice moje kode, sem naredil tako tabelo za menije:
v glavnem kar se tice moje kode, sem naredil tako tabelo za menije:
; priorities: EXECUTE -> FORWARD -> BACK -> NO ACTION ; BACK UP DOWN FORWARD EXEC-OVER EXECUTE Rezerva menu1 da H'0000',H'0000',menu2,H'0000',_templcdwrite, H'0000',H'0000',H'0000' da " Temp.: " menu2 da H'0000',menu1,menu3,H'0000',_timelcdwrite, H'0000',H'0000',H'0000' da " Cas: " menu3 da H'0000',menu2,H'0000', menu4,H'0000',H'0000',H'0000',H'0000' da "Konfig.: " ;;;;;;;;;;;; menu3 LEVEL2 ;;;;;;;;;;;;;; menu4 da menu1,H'0000',menu5,H'0000',H'0000', H'0000',H'0000',H'0000' da " Krneki: " menu5 da menu1,menu4,H'0000',H'0000',H'0000', H'0000',H'0000',H'0000' da "BACK "
Zgodovina sprememb…
- spremenilo: korenje_ver2 ()
korenje_ver2 ::
Mene pa zanima kako MPLAB compiler naredi kodo v takem primeru...
MOVLW D'16'
MOVWF lcdcharcounter
MOVLW lcdcharcounter/2+1
MOVWF buffer1
A je isto kot:
MOVLW D'16'
MOVWF lcdcharcounter
MOVLW D'9'
MOVWF buffer1
ali pa naredi, da mora cip skalkulirat tisti ulomek oz +1?
MOVLW D'16'
MOVWF lcdcharcounter
MOVLW lcdcharcounter/2+1
MOVWF buffer1
A je isto kot:
MOVLW D'16'
MOVWF lcdcharcounter
MOVLW D'9'
MOVWF buffer1
ali pa naredi, da mora cip skalkulirat tisti ulomek oz +1?
TESKAn ::
Razmisli. MOVLW pomeni naloži dobesedno vrednost, ki jo ti podaš. Tako da v tem primeru ti tale ulomek izračuna compiler.
Uf! Uf! Je rekel Vinetou in se skril za skalo,
ki jo je prav v ta namen nosil s seboj.
ki jo je prav v ta namen nosil s seboj.
korenje_ver2 ::
Alo. jaz ne razumem kaj delam narobe.....
V tej kodi mi programcic ne zazna, da bi senzor vleku proti 0V.
Montiral sem 2x1.5khom upora zaporedno med vdd in data za senzor.
Je mogoce premocan pull-up za senzor al kaj?
(to je dogodek pri inicializaciji z ds18s20 temperaturnim senzorjem)
BCF TTERMO ; output - pull-down MOVLW D'50' ; 500 us CALL _delay_ms BSF TTERMO ; input - resistor pull-up MOVLW D'9' ; 90 us CALL _delay_ms BTFSC TERMO RETURN ; SENSOR NOT OK CALL _sensorok
V tej kodi mi programcic ne zazna, da bi senzor vleku proti 0V.
Montiral sem 2x1.5khom upora zaporedno med vdd in data za senzor.
Je mogoce premocan pull-up za senzor al kaj?
(to je dogodek pri inicializaciji z ds18s20 temperaturnim senzorjem)
Zgodovina sprememb…
- spremenilo: korenje_ver2 ()
TESKAn ::
Napiši zraven, kaj je ta tvoj TTERMO, če hočeš, da ti kdo kaj pomaga...drugače pa naj bo pull - up, če imaš zunanjega, tak, da ga bo senzor lahko spravil na 0 - poglej si datasheet od senzorja, koliko toka lahko spravi skozi sebe, potem pa naračunaj upor in dodaj še kak kOhm, da si zihr.
Uf! Uf! Je rekel Vinetou in se skril za skalo,
ki jo je prav v ta namen nosil s seboj.
ki jo je prav v ta namen nosil s seboj.
Tutankhamun ::
BTFSC, BSC, BCF rabijo 2 parametra, register in bit v tem registru.
AMD Phenom QUAD 9950 Black Edition, 8GB
korenje_ver2 ::
teska:
un T pred imenom ponavadi pomeni TRIS
tutank:
sem definiru bajt in bit v enem imenu
teska:
pise da ma active current 1mA pri 5V
Pa da naj bi rabil okrog 4.7kohm pullup.
5V/0.001A=5kohm. hmm.
un T pred imenom ponavadi pomeni TRIS
tutank:
sem definiru bajt in bit v enem imenu
teska:
pise da ma active current 1mA pri 5V
Pa da naj bi rabil okrog 4.7kohm pullup.
5V/0.001A=5kohm. hmm.
Zgodovina sprememb…
- spremenilo: korenje_ver2 ()
TESKAn ::
In za komunikacijo med različnimi napravami. Da imaš lahko za output samo en tranzistor, ki ti potegne linijo na 0.
Drugače si zihr, da so tvoje zakasnitve prave?
Drugače si zihr, da so tvoje zakasnitve prave?
Uf! Uf! Je rekel Vinetou in se skril za skalo,
ki jo je prav v ta namen nosil s seboj.
ki jo je prav v ta namen nosil s seboj.
korenje_ver2 ::
Zakasnitve nej bi ble prave... ceprov pr lcdju sm mogu dat ene 30% visje stevilke...
samo kljub temu ne dela za senzor. ko sem dal pull-down sem dal takoj loop da najde prvo pull-up, potem pa loop da najde pull-down od senzorja.... in ni nic.
mogoce moram dat vecji upor...
samo kljub temu ne dela za senzor. ko sem dal pull-down sem dal takoj loop da najde prvo pull-up, potem pa loop da najde pull-down od senzorja.... in ni nic.
mogoce moram dat vecji upor...
TESKAn ::
Preveri zakasnitve, najbolje v simulatorju v MPLABu. Greš lepo step - through in vidiš, koliko časa dejansko porabiš.
Kot drugo, tvoja koda. Ti kot prvo nastaviš TRISx register na 0, kar ti da port v output. Nič pa ne določiš, kaj naj bo na portu, moreš najmanj za tem dat še "BCF TERMO", da boš imel 0 na vodilu. Kot ti delaš, nimaš pojma, kaj se znajde na izhodnem pinu, ko ga ti daš v output način. Dodaj še en BCF, kot sem ga napisal zgoraj.
Kot drugo, tvoja koda. Ti kot prvo nastaviš TRISx register na 0, kar ti da port v output. Nič pa ne določiš, kaj naj bo na portu, moreš najmanj za tem dat še "BCF TERMO", da boš imel 0 na vodilu. Kot ti delaš, nimaš pojma, kaj se znajde na izhodnem pinu, ko ga ti daš v output način. Dodaj še en BCF, kot sem ga napisal zgoraj.
Uf! Uf! Je rekel Vinetou in se skril za skalo,
ki jo je prav v ta namen nosil s seboj.
ki jo je prav v ta namen nosil s seboj.
korenje_ver2 ::
sej sem z voltmetrom preveru. pic lepo naredi pull-down, za termometer sem pa s picom preveru.
BCF TTERMO naredi pull-down,
BSF TTERMO pa naredi da se dvigne nazaj gor. (branje način)
probal sem tudi pospesit pull-up z BSF TERMO. pa je isto sranje.
BCF TTERMO naredi pull-down,
BSF TTERMO pa naredi da se dvigne nazaj gor. (branje način)
probal sem tudi pospesit pull-up z BSF TERMO. pa je isto sranje.
Zgodovina sprememb…
- spremenilo: korenje_ver2 ()
TESKAn ::
Lej, pull - up ti dela upor. Pull - down ti dela ali pic ali senzor. Postopek komunikacije je pa sledeč:
- TRIS register daš na 0 (izhod)
- PORT register daš na želeno vrednost in jo pač spreminjaš v časovnih intervalih, kot je predvideno za komunikacijo
- TRIS register daš na 1 (input) in čakaš, da ti senzor odgovori
Torej ko govori PIC, daš TRIS na 0, ko govori senzor, daš TRIS na 1. Kaj bo PIC povedal, pa določaš z PORT registrom. Torej ti lepo popucaj še PORT register, potem ko enkrat nastaviš TRIS register na output.
Pa poglej si še enkrat, kaj je z tvojimi timingi. Ali imaš res 500 usec?Imaš simulator v MPLABU, uporabi ga. Nastaviš frekvenco, odpreš štoparco in gremo.
- TRIS register daš na 0 (izhod)
- PORT register daš na želeno vrednost in jo pač spreminjaš v časovnih intervalih, kot je predvideno za komunikacijo
- TRIS register daš na 1 (input) in čakaš, da ti senzor odgovori
Torej ko govori PIC, daš TRIS na 0, ko govori senzor, daš TRIS na 1. Kaj bo PIC povedal, pa določaš z PORT registrom. Torej ti lepo popucaj še PORT register, potem ko enkrat nastaviš TRIS register na output.
Pa poglej si še enkrat, kaj je z tvojimi timingi. Ali imaš res 500 usec?Imaš simulator v MPLABU, uporabi ga. Nastaviš frekvenco, odpreš štoparco in gremo.
Uf! Uf! Je rekel Vinetou in se skril za skalo,
ki jo je prav v ta namen nosil s seboj.
ki jo je prav v ta namen nosil s seboj.
korenje_ver2 ::
tudi to ne dela...
BCF TTERMO
MOVLW D'250' ; 500 us
CALL _delay_ms
MOVLW D'250' ; 500 us
CALL _delay_ms
BSF TTERMO
drek2:
BTFSS TERMO ; preveri ce je pull-up (upor)
GOTO drek2
drek:
BTFSS TERMO ; preveri, ce je pull-down (ds18s20)
CALL _sensorok
GOTO drek
BTW, kje se dobi ta simulator? a je zravn MPLAB IDE al moram posebi downloadat?
sem dal 10kohm upor vmes, pa se vedno nic. se je mogoce senzor skuru al kva?
BCF TTERMO
MOVLW D'250' ; 500 us
CALL _delay_ms
MOVLW D'250' ; 500 us
CALL _delay_ms
BSF TTERMO
drek2:
BTFSS TERMO ; preveri ce je pull-up (upor)
GOTO drek2
drek:
BTFSS TERMO ; preveri, ce je pull-down (ds18s20)
CALL _sensorok
GOTO drek
BTW, kje se dobi ta simulator? a je zravn MPLAB IDE al moram posebi downloadat?
sem dal 10kohm upor vmes, pa se vedno nic. se je mogoce senzor skuru al kva?
Zgodovina sprememb…
- spremenilo: korenje_ver2 ()
neoto ::
A ti sploh kaj bereš? Mimogrede, to je forum... Na forumu je več uporabnikov (torej nisi sam... ). Namen foruma je komunikacija med uporabniki...
Preberi kar ti pravi teskan!
Preberi kar ti pravi teskan!
Zgodovina sprememb…
- polepsal: BluPhenix ()
snow ::
Microchip PIC in 1-wire komunikacija: http://www.maxim-ic.com/appnotes.cfm/ap...
MPLAB: simulator nastaviš v meniju debugger.
MPLAB: simulator nastaviš v meniju debugger.
Random mutation plus nonrandom cumulative natural selection - Richard Dawkins
TESKAn ::
Darn no, ti morem napisat? Evo, ena vrstica:
BCF TTERMO ; output - pull-down //daš port na izhod, kar je OK
BCF TERMO ;TLE POPUCAŠ IZHOD, DA JE ZIHR NA 0
MOVLW D'50' ; 500 us
CALL _delay_ms
BSF TTERMO ; input - resistor pull-up //tle pa daš port na vhod,
;da ti lahko zunanje vezje spreminja vrednost, kar je tudi OK
MOVLW D'9' ; 90 us
CALL _delay_ms
BTFSC TERMO
RETURN ; SENSOR NOT OK
CALL _sensorok
Simulator je pa v MPLABU, izbereš Debugger -> Select tool -> Mplab SIM, potem pa še Debugger -> Settings in nastaviš frekvenco delovanja. Potem imaš pa ukaze step into, step over, step out, run, reset pa še kakšen, s katerimi kontroliraš pomikanje skozi program. Pod Debugger -> StopWatch imaš pa to štoparco, o kateri sem govoril.
BCF TTERMO ; output - pull-down //daš port na izhod, kar je OK
BCF TERMO ;TLE POPUCAŠ IZHOD, DA JE ZIHR NA 0
MOVLW D'50' ; 500 us
CALL _delay_ms
BSF TTERMO ; input - resistor pull-up //tle pa daš port na vhod,
;da ti lahko zunanje vezje spreminja vrednost, kar je tudi OK
MOVLW D'9' ; 90 us
CALL _delay_ms
BTFSC TERMO
RETURN ; SENSOR NOT OK
CALL _sensorok
Simulator je pa v MPLABU, izbereš Debugger -> Select tool -> Mplab SIM, potem pa še Debugger -> Settings in nastaviš frekvenco delovanja. Potem imaš pa ukaze step into, step over, step out, run, reset pa še kakšen, s katerimi kontroliraš pomikanje skozi program. Pod Debugger -> StopWatch imaš pa to štoparco, o kateri sem govoril.
Uf! Uf! Je rekel Vinetou in se skril za skalo,
ki jo je prav v ta namen nosil s seboj.
ki jo je prav v ta namen nosil s seboj.
TESKAn ::
Ah, pa še to, sem spregledal - tile PICi imajo paging, se pravi naslavljaš nekatere registre tako, da najprej nastaviš, na kateri strani je tvoj register, šele potem lahko ta register spreminjaš. In če me spomin ne vara, so TRISx registri na strani 1, PORT registri pa na strani 2. Poglej si v datasheet, kako je s tem za tvoj PIC.
Uf! Uf! Je rekel Vinetou in se skril za skalo,
ki jo je prav v ta namen nosil s seboj.
ki jo je prav v ta namen nosil s seboj.
zcetrt ::
Pri 16F seriji in 12F tudi so port registri v banki 0, tris pa v banki 1.
Kateri uC pa so načeloma cenejši in prikladnejši od PICov? Samo tako, za informacijo, ne da bi se šel kakšno vojno... Zame so še vedno vsaj enako zastonj kot najboljši konkurenti
Kateri uC pa so načeloma cenejši in prikladnejši od PICov? Samo tako, za informacijo, ne da bi se šel kakšno vojno... Zame so še vedno vsaj enako zastonj kot najboljši konkurenti
4.
Zgodovina sprememb…
- spremenil: zcetrt ()
TESKAn ::
ARMa od phillipsa dobiš za manj ko en evro (LPC 2103). Seveda v malce večjih količinah.
Uf! Uf! Je rekel Vinetou in se skril za skalo,
ki jo je prav v ta namen nosil s seboj.
ki jo je prav v ta namen nosil s seboj.
slawc ::
LOL. Let the flame war begin!
:)
Kateri so cenejsi in prikladnejsi? Odvisno od uporabe. Ko gledam spletno prodajalno z el. komponentami si PICi najcenejsi. Seveda tisti najmanjsi. Ko pa se odlocis, da bi rad malo vec, je pa zadeva precej drugacna. Postavi si zahteve kaj bi od mikrota rad (performanse, poraba, periferija,...). Potem pa isci kaj ti najbolj ustreza.
Ce pa nimas pojma kaj to je, potem pa AVR. Enostavno nimas izbire, IMHO je najbolj uravnotezen mikro (poceni, zmogljiv, majhna poraba, enostavna arhitektura, odlicna dokumentacija, dobavljiv,...)
No, da ne bom pristranski, ti bom nastel se nekaj druzin (vrstni red je nakljucen)
- ST7
- MSP430
- PIC
- derivati 8051 (LPC900, Silabs, Analog)
- ARM7 (razlicni proizvajalci)
- ostalo (verjetno ni tako popularno)
:)
Kateri so cenejsi in prikladnejsi? Odvisno od uporabe. Ko gledam spletno prodajalno z el. komponentami si PICi najcenejsi. Seveda tisti najmanjsi. Ko pa se odlocis, da bi rad malo vec, je pa zadeva precej drugacna. Postavi si zahteve kaj bi od mikrota rad (performanse, poraba, periferija,...). Potem pa isci kaj ti najbolj ustreza.
Ce pa nimas pojma kaj to je, potem pa AVR. Enostavno nimas izbire, IMHO je najbolj uravnotezen mikro (poceni, zmogljiv, majhna poraba, enostavna arhitektura, odlicna dokumentacija, dobavljiv,...)
No, da ne bom pristranski, ti bom nastel se nekaj druzin (vrstni red je nakljucen)
- ST7
- MSP430
- PIC
- derivati 8051 (LPC900, Silabs, Analog)
- ARM7 (razlicni proizvajalci)
- ostalo (verjetno ni tako popularno)
LP,
Slawc
Zgodovina sprememb…
- spremenil: slawc ()
icek ::
Zelo poceni so philips. Tako ARM kot 8051. Dokaj hitro se da dobit sample zastojn od Texasa - MSP430. Zelo dobri 16-bitni mikrokontrolerji, ki obenem porabijo zelo malo energije in so zelo primerni za napajanje preko baterije.
Ma saj PICi niso tako slabi, tudi dokumentacijo imajo napisano zelo pregledno in razumljivo. S kom bo kdo delal je pac odlocitev vsakega posameznika. Z vsemi se da resevat enake probleme.
Ma saj PICi niso tako slabi, tudi dokumentacijo imajo napisano zelo pregledno in razumljivo. S kom bo kdo delal je pac odlocitev vsakega posameznika. Z vsemi se da resevat enake probleme.
Rider of Theli
www.air-tv.net
www.air-tv.net
snow ::
> Ko gledam spletno prodajalno z el. komponentami si PICi najcenejsi.
Pri nas?
Recimo v HTE imaš 28 pinski at mega8 za 4€ v primerjavi s pic 16f876a za 7+ €. In at tiny2313 za 2,75€ in pic 16f628a za 3,75€.
Sicer pa sem privrženec picev, zdaj pa malo pomagam bratu pri avrjih. Najbolj bistvena razlika mi je zaenkrat cena teh mcu pri nas.
Pri nas?
Recimo v HTE imaš 28 pinski at mega8 za 4€ v primerjavi s pic 16f876a za 7+ €. In at tiny2313 za 2,75€ in pic 16f628a za 3,75€.
Sicer pa sem privrženec picev, zdaj pa malo pomagam bratu pri avrjih. Najbolj bistvena razlika mi je zaenkrat cena teh mcu pri nas.
Random mutation plus nonrandom cumulative natural selection - Richard Dawkins
TESKAn ::
Hm, noben tu ne dela nič z freescaleovimi mikrokontrolerji (prej je spadal pod motorolo)?
Uf! Uf! Je rekel Vinetou in se skril za skalo,
ki jo je prav v ta namen nosil s seboj.
ki jo je prav v ta namen nosil s seboj.
BluPhenix ::
Prosim, da se z debato o različnih mikrokontrolerjih preselite v drugo temo, ker bo verjetno marsikaj koristnega. Nima smisla da se tukaj nabirajo debate, ki v bistvu s to temo nimajo veze, lahko pa komu pomenijo lepo branje.
Hvala.
Hvala.
Podpisa ni več, ker so me poskušali asimilirati.
korenje_ver2 ::
Mene zanima kako vi naredite točen čas?
Jaz naredim tako, pa ne vem če je vredu...
720000000 ciklov je ena minuta.
moram dati prescaler na 2. To pomeni (256*256)*2=131072 ciklov
Če delim ciklov na minuto z cikli timerja dobim 5493,164063.
Torej 5493x moram preskočit, kar pomeni 5493*131072=719978496
Ostane mi še 21504 ciklov na voljo. 4*(5493) jih ponucam z cikli v interruptu in preskoki. To je 21972.
Presežek imam 468 ciklov, kar pomeni, da bo ura zaostajala za 468 ciklov na minuto.
To je 22 sekund na leto.
Problem je pa predvsem to, da mi tak način pokuri ful velik procesorskega časa. Interrupt se dogaja vskaih 0.0109 sekunde, v tem času pa naredim ~30 ciklov za to, da dosežem točno eno minuto in dodam spremenljivko za minuto. To pomeni 30*5493=164790ciklov oz 0.0137 sekunde zapravljenega časa na minuto, samo za generiranje ure, kar mi je veliko.
Taki so pa časi, pri različnih prescalerjih.
btw, to je samo za generiranje za eno minuto. Če bi generiral za eno sekundo, je odstopek zelo prevelik. cca 0.3 sekunde na minuto. Pri generiranju za 1 uro se ta odstopek bistveno zmanjša od odstopka za eno minuto. Tko da bi v bistvu lahko za eno uro generiral posebej čas in bi tako dosegel veliko manjšo napako na eno leto.
Kako vi naredite točen čas?
Jaz naredim tako, pa ne vem če je vredu...
720000000 ciklov je ena minuta.
moram dati prescaler na 2. To pomeni (256*256)*2=131072 ciklov
Če delim ciklov na minuto z cikli timerja dobim 5493,164063.
Torej 5493x moram preskočit, kar pomeni 5493*131072=719978496
Ostane mi še 21504 ciklov na voljo. 4*(5493) jih ponucam z cikli v interruptu in preskoki. To je 21972.
Presežek imam 468 ciklov, kar pomeni, da bo ura zaostajala za 468 ciklov na minuto.
To je 22 sekund na leto.
Problem je pa predvsem to, da mi tak način pokuri ful velik procesorskega časa. Interrupt se dogaja vskaih 0.0109 sekunde, v tem času pa naredim ~30 ciklov za to, da dosežem točno eno minuto in dodam spremenljivko za minuto. To pomeni 30*5493=164790ciklov oz 0.0137 sekunde zapravljenega časa na minuto, samo za generiranje ure, kar mi je veliko.
Taki so pa časi, pri različnih prescalerjih.
prescaler result time 16 bit cycles equivalent skips 60s 256 1,39810133333 16777216 42,91534424 128 0,69905066667 8388608 85,83068848 64 0,34952533333 4194304 171,661377 32 0,17476266667 2097152 343,3227539 16 0,08738133333 1048576 686,6455078 8 0,04369066667 524288 1373,291016 4 0,02184533333 262144 2746,582031 2 0,01092266667 131072 5493,164063
btw, to je samo za generiranje za eno minuto. Če bi generiral za eno sekundo, je odstopek zelo prevelik. cca 0.3 sekunde na minuto. Pri generiranju za 1 uro se ta odstopek bistveno zmanjša od odstopka za eno minuto. Tko da bi v bistvu lahko za eno uro generiral posebej čas in bi tako dosegel veliko manjšo napako na eno leto.
Kako vi naredite točen čas?
Zgodovina sprememb…
- spremenilo: korenje_ver2 ()
TESKAn ::
Tebi se zdi ena desetinka sekunde na minuto velika potrata za štet uro? Kaj pa delaš tako hudo časovno kritičnega, da bi hotel porabit manj? Sprijazni se, da za izvajat opravila potrebuješ čas.
Uf! Uf! Je rekel Vinetou in se skril za skalo,
ki jo je prav v ta namen nosil s seboj.
ki jo je prav v ta namen nosil s seboj.
korenje_ver2 ::
sam z 4 mhz clockom je ful lazje narest, ker timer0 ze zaokrozi na celo stevilo in ni potrebna ena tona ostalih funkcij...
pa še to... je kdo že probal povezat kamero iz mobitela na PIC?
pa....
zdej na veliko optimiziram mojo kodo...
bom naredil detekcijo pritiska na gumb brez interruptov, pa se mi porajajo misli....
Tile delayi, ki jih moram izvesti po posiljanju na lcd so dokaj dolgi... zato sem segmentiral kodo tako, da mece stvari v nek buffer. Ta buffer se pa prazni na glavnem loopu in poganja kodo v bufferju. gre torej za neko indirektno izvajanje kode.
To je predvsem dobro, ce zelim opraviti se kake druge stvari, medtem ko se ostalo nalaga v "buffer".
pa še to... je kdo že probal povezat kamero iz mobitela na PIC?
pa....
zdej na veliko optimiziram mojo kodo...
bom naredil detekcijo pritiska na gumb brez interruptov, pa se mi porajajo misli....
Tile delayi, ki jih moram izvesti po posiljanju na lcd so dokaj dolgi... zato sem segmentiral kodo tako, da mece stvari v nek buffer. Ta buffer se pa prazni na glavnem loopu in poganja kodo v bufferju. gre torej za neko indirektno izvajanje kode.
To je predvsem dobro, ce zelim opraviti se kake druge stvari, medtem ko se ostalo nalaga v "buffer".
Zgodovina sprememb…
- spremenilo: korenje_ver2 ()
zcetrt ::
Glej, multitaskinga tu ni. Vsaj ne takšnega, kot si ga ti želiš. Če pa meniš, da boš z nekimi softwerskimi bufferji pri mikrokontrolerju privarčeval s časom, mi pa javi, ko ti uspe.
Kar se tiče CCD pa poglej malo, koliko kaj pinov ima zadeva in ali ti uspe dobiti kakšno dokumentacijo. Načeloma bi lahko šlo. Načeloma bi lahko šlo vse. Skoraj vse.
Kar se tiče CCD pa poglej malo, koliko kaj pinov ima zadeva in ali ti uspe dobiti kakšno dokumentacijo. Načeloma bi lahko šlo. Načeloma bi lahko šlo vse. Skoraj vse.
4.
snow ::
> To je 22 sekund na leto.
Blablabla. 50 ppm je ponavadi natančnost kristala. 50 ppm v letu je 1576,8 sekunde. Bo treba malo kondenzatorje štelat, če boš hotel res točen čas.
Blablabla. 50 ppm je ponavadi natančnost kristala. 50 ppm v letu je 1576,8 sekunde. Bo treba malo kondenzatorje štelat, če boš hotel res točen čas.
Random mutation plus nonrandom cumulative natural selection - Richard Dawkins
korenje_ver2 ::
zcert, namen ni bil na pridobitvi casa, ampak v tem, da se pridobi dostopnost do procesorskega casa, medtem ko tisto v bufferju ostane v ozadju in se izvrsi kasneje.
recimo da chekiram za gumbe, ce so pritisnjeni na vsakih 0.05 sekunde. In ce imam neko initializacijo, ki ima toliko delayev da zavzame ene pol sekunde, potem pritiski na gumb ne bodo imeli efekta. Ce pa razdelim tisto initializacijo na kose in jih dam v buffer, ter da po vsakem drugem kosu preverim za gumb, potem je to ze bolje ne?
snow, imam oscillator, ne kristal.
recimo da chekiram za gumbe, ce so pritisnjeni na vsakih 0.05 sekunde. In ce imam neko initializacijo, ki ima toliko delayev da zavzame ene pol sekunde, potem pritiski na gumb ne bodo imeli efekta. Ce pa razdelim tisto initializacijo na kose in jih dam v buffer, ter da po vsakem drugem kosu preverim za gumb, potem je to ze bolje ne?
snow, imam oscillator, ne kristal.
Zgodovina sprememb…
- spremenilo: korenje_ver2 ()
TESKAn ::
Kaj bi pa delal z pol sekundnim delayem?
Drugače lahko take stvari narediš v stilu state machine. Ena rutina, ki rabi dolgo časa, da se izvede en določen del, jo kličeš periodično. Ko rabiš delay, daš v stanje, ki bo čakalo, da se ti sistemska ura spremeni za pol sekunde. Rabiš par vrstic Cja, da to preveriš vsakokrat.
Drugače lahko take stvari narediš v stilu state machine. Ena rutina, ki rabi dolgo časa, da se izvede en določen del, jo kličeš periodično. Ko rabiš delay, daš v stanje, ki bo čakalo, da se ti sistemska ura spremeni za pol sekunde. Rabiš par vrstic Cja, da to preveriš vsakokrat.
Uf! Uf! Je rekel Vinetou in se skril za skalo,
ki jo je prav v ta namen nosil s seboj.
ki jo je prav v ta namen nosil s seboj.
zcetrt ::
Zakaj pa ne bi spisal delayev tako, da čekirajo tipke vmes?
Ma, ti se nekoliko preučeno izražaš včasih, se mi zdi. Uporabljaj timerje.
Ma, ti se nekoliko preučeno izražaš včasih, se mi zdi. Uporabljaj timerje.
4.
korenje_ver2 ::
hja sej... najboljs bi blo v interruptu chekirat za tipko.
Me pa zanima, ce se timerx interrupti kej conflictajo med sabo, ce sta dva vklopljena. Npr da se na vsakih XYZ sekund vklopi eden, drugi pa na vsakih XYZ/2. Kako se potem to izvrsi? Takj ko zbrisem *IE, gre v naslednji interrupt?
Me pa zanima, ce se timerx interrupti kej conflictajo med sabo, ce sta dva vklopljena. Npr da se na vsakih XYZ sekund vklopi eden, drugi pa na vsakih XYZ/2. Kako se potem to izvrsi? Takj ko zbrisem *IE, gre v naslednji interrupt?
korenje_ver2 ::
A kdo ve zakaj mi delay loopi ne delajo?
delay_0 set .29 ; delay for _delay_ms delay_1 set .207 ; delay for _delay_s delay_2 set .192 ; delay for _delay_s CBLOCK #delay_0 #delay_1 #delay_2 ENDC #buffer res 6 MOVLW delay_0 MOVWF #delay_0 MOVLW delay_1 MOVWF #delay_1 MOVLW delay_2 MOVWF #delay_2 _delay_s MOVFF #delay_2, #buffer+2 __delay_sec_2 MOVFF #delay_1, #buffer+1 __delay_sec_1 DECFSZ #buffer+1 BRA __delay_sec_1 DECFSZ #buffer+2 BRA __delay_sec_2 DECFSZ WREG BRA _delay_s RETURN FAST
Zgodovina sprememb…
- spremenilo: korenje_ver2 ()
korenje_ver2 ::
ma jz bom znoru.... enkrat mi dela, drugic mi ne dela... in to pravilno napisana koda. mislm ej wtf..
sem dal brownout na 2V in pritiskanje na gumb vec ne dela zmede na lcdju....
sem dal brownout na 2V in pritiskanje na gumb vec ne dela zmede na lcdju....
Zgodovina sprememb…
- spremenilo: korenje_ver2 ()
TESKAn ::
Ne uporabljaj w registra za spremenljivko. In če tale koda ni del interrupta, potem zbriši return fast in daj retie.
Drugače en nasvet, je teško pomagat, če ne poveš ama nič, kako naj bi rutina delala.
Drugače en nasvet, je teško pomagat, če ne poveš ama nič, kako naj bi rutina delala.
Uf! Uf! Je rekel Vinetou in se skril za skalo,
ki jo je prav v ta namen nosil s seboj.
ki jo je prav v ta namen nosil s seboj.
korenje_ver2 ::
sej v interruptu imam tut retfie fast, da mi shrani W register in ostalo. v bistvu mam skor v vsakem callu fast.
sem dal v glavni loop:
.led1 MACRO
BSF LED1
MOVLW .6
CALL _delay_s, FAST
BCF LED1
MOVLW .6
CALL _delay_s, FAST
ENDM
pa se mi dogaja, da mi zacne ledica ful hitrej utripat, ce pozenem tole:
_over_time
.lcd_bufferwrite _lcd_ddram_a, 0000h
.lcd_bufferwrite _lcd_string8, str_time_
RETURN FAST
.lcd_bufferwrite MACRO addr_, string_
; executor + string(buffer+1 & buffer+2)
LFSR FSR0, #displaybuffer
MOVF #dispbuffc, W
ADDWF FSR0
MOVLW HIGH addr_
MOVWF POSTINC0
MOVLW LOW addr_
MOVWF POSTINC0
MOVLW HIGH string_
MOVWF POSTINC0
MOVLW LOW string_
MOVWF POSTINC0
MOVLW .4
ADDWF #dispbuffc, F
MOVLW displaybuffsize+.1
CPFSLT #dispbuffc
CALL _error_ramoverflow, FAST
ENDM
Ne razumem, kako ima lahko tole vpliv na #delay_1 in #delay_2, ki ga uporablja _delay_s
#delay_1 in #delay_2 se nalozita na zacetku programa in se nikjer vec ne spreminjata. Sam vseeno ima nek vpliv ta _over_time
aja pa led diodice normalno utripajo, ce dodam na zacetek _delay_s tole:
MOVWF #buffer+3
MOVLW delay_1
MOVWF #delay_1
MOVLW delay_2
MOVWF #delay_2
MOVF #buffer+3, W
V glavnem zmeden sem.
sem malo bolj lokaliziral problem... led zacne hitreje utripat, ko dodam .lcd_bufferwrite _lcd_string8, str_time_
Torej tisti str_time_. ce je 000h, led normalno dela.
sem dal v glavni loop:
.led1 MACRO
BSF LED1
MOVLW .6
CALL _delay_s, FAST
BCF LED1
MOVLW .6
CALL _delay_s, FAST
ENDM
pa se mi dogaja, da mi zacne ledica ful hitrej utripat, ce pozenem tole:
_over_time
.lcd_bufferwrite _lcd_ddram_a, 0000h
.lcd_bufferwrite _lcd_string8, str_time_
RETURN FAST
.lcd_bufferwrite MACRO addr_, string_
; executor + string(buffer+1 & buffer+2)
LFSR FSR0, #displaybuffer
MOVF #dispbuffc, W
ADDWF FSR0
MOVLW HIGH addr_
MOVWF POSTINC0
MOVLW LOW addr_
MOVWF POSTINC0
MOVLW HIGH string_
MOVWF POSTINC0
MOVLW LOW string_
MOVWF POSTINC0
MOVLW .4
ADDWF #dispbuffc, F
MOVLW displaybuffsize+.1
CPFSLT #dispbuffc
CALL _error_ramoverflow, FAST
ENDM
Ne razumem, kako ima lahko tole vpliv na #delay_1 in #delay_2, ki ga uporablja _delay_s
#delay_1 in #delay_2 se nalozita na zacetku programa in se nikjer vec ne spreminjata. Sam vseeno ima nek vpliv ta _over_time
aja pa led diodice normalno utripajo, ce dodam na zacetek _delay_s tole:
MOVWF #buffer+3
MOVLW delay_1
MOVWF #delay_1
MOVLW delay_2
MOVWF #delay_2
MOVF #buffer+3, W
V glavnem zmeden sem.
sem malo bolj lokaliziral problem... led zacne hitreje utripat, ko dodam .lcd_bufferwrite _lcd_string8, str_time_
Torej tisti str_time_. ce je 000h, led normalno dela.
Zgodovina sprememb…
- spremenilo: korenje_ver2 ()
korenje_ver2 ::
ma fak offfff...
ime-rama res vrednost so se konfliktal z večimi RES-i in cblockom, tko da so določil več imen za isti naslov rama.
v glavnem za znoret. jz pa cel dan iscem napako drugje.
ime-rama res vrednost so se konfliktal z večimi RES-i in cblockom, tko da so določil več imen za isti naslov rama.
v glavnem za znoret. jz pa cel dan iscem napako drugje.
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | Microchip MPLAB icd 2 (pic16f876a)Oddelek: Programiranje | 1197 (1074) | Highlag |
» | PIC18F4550 in ds18s20Oddelek: Elektrotehnika in elektronika | 2010 (1689) | snow |
» | Zelo pocasno utripanje LED diode (strani: 1 2 )Oddelek: Elektrotehnika in elektronika | 8798 (8003) | a13misko |
» | PIC 16f84A - utripanjeOddelek: Elektrotehnika in elektronika | 2268 (2068) | ql000 |
» | mikrokontrolerji, programatorji, c/asm ?Oddelek: Elektrotehnika in elektronika | 3036 (2655) | snow |