Stránka 2 z 2
Napsal: 04 led 2014, 15:49
od PIClover
Pawalo. V první řadě děkuju za nemalou pomoc.
A k těm dotazům. Jestli dobře vidím. Tak zápis se liší jen o zapis_cekat. Takže to chápu. Akorát trochu tápu v tom čtení, ale ještě jsem se na to nestihnul pořádně podívat. Večer na to kouknu a kdyžtak bych dal vědět.
Napsal: 04 led 2014, 19:49
od PIClover
Naopak, mě by to bavilo, kdybych v tom pořádně uměl. Jenže když řešim takovou úlohu o které vím, že je jednoduchá a nevím si rady, tak k PICíku cítim odpor a celá práce pak stojí za prd, ale ted k věci.
Pro jistotu popíšu i to co si myslím, že chápu. Takže zapis_cekat
zapis_cekat btfsc eecon1,1
goto zapis_cekat
bcf eecon1,2
return
Takže já tam testuju bit 1 eeconu1 (předtím jsem tam zapisoval). Furt to tam jede dokola do te doby, než bude ten bit mít 0 hodnotu. Pak to přeskočí ten řádek s goto. A pak to bcf mi vynuluje v eeconu1 ten druhej bit.
Takhle to chápu myslím dobře. Z datasheetu vím, že druhý bit povoluje nebo zakazuje zápis. Záleží jestli tam dám 1 nebo 0 .
Ty dotazy napíšu na vícekrát. U mého počítače nikdy nevím, kdy přijde blue death nebo neco podobného a nechtěl bych to celé psát znova.
Napsal: 04 led 2014, 20:06
od Pawalo
bit 2 povoluje nebo zakazuje zápis, to víš dobře,,, to čekání je tam proto že zápis nějakej čas trvá, dal sem to tam kvůli simulaci. v tvym případě by to tam ani být nemuselo. používá se to když zapisuješ více dat hnedka po sobě. a jak je uvedeno v datašítu, může to bejt i na začátku rutiny zápisu. jinak tim bitem 1 zahajuješ zápis. a jak píšou v datašítu tak ten bit se sám nuluje když se zápis dokončí.
Napsal: 04 led 2014, 20:24
od PIClover
A ještě v samotném zápisu jsem našel jednu změnu. Celý podprogram zápisu zůstal stejný, jen tam přibylo:
bcf eecon1,7 ;volba pamět EEPROM
Zase, vím, že instrukce bcf mi nuluje ten bit. V datasheetu vidím, že nulováním jsem si zvolil EEPROMku.
Já to takhle chápu, jen nevím, jak člověk musí přemýšlet aby se kouknul na program co mu nefunguje a řekl si "Hmm, tak támdle tomu chybí zvolení EEPROMky" . Mě by todle nikdy nenapadlo.
Napsal: 04 led 2014, 21:44
od PIClover
Pak co tak studuju ten podprogram čtení, tak tam jsem to měl úplně proházené oproti tobě.
BANK2
movlw h'10'
movwf eeadr ;
BANK3
bcf eecon1,7 ;volba pamět EEPROM
bsf eecon1,0 ;zahájit čtení
BANK2
movf eedata,w
return
U tohodle si tak úplně jistej nejsem, ale popíšu jak to chápu.
movlw h10-mám to ve střadači
movwf eeadr-přesunu to do eeadru
pak jak píšeš v poznámkách vybereš eepromku, zahájíš čtení... Ale pak nechápu k čemu je tam ta BANK2? Dál tam je movf eedata,w čim zase přesunu z eedata do W což je pracovní registr. Takže ta BANK2 je tam kvůli W ?
Napsal: 05 led 2014, 06:51
od Pawalo
ano, u zápisu je jen navíc volba paměti, pač když se podivám na stav registru eecon1 po zapnutí, tak zjistíš je tam neni určenej stav, a může se i stát že se v programu jaksi udělá chybka a omylem se bit přepíše, tak je dobrý dycky tu pamět při rutině zápisu i čtení zvolit. v první řadě je dobrý přečíst si datašít. u eeprom, jako i u ostatních periferií, máš napsanej postup práce s periferií. a u eeprom máš i vzorovej příklad. takže přečíst, napsat hrubej kus kodu a pustit si simulaci. při krokování zjistíš co ti co kde jak dělá nebo naopak nedělá.
a čtení. tady to platí stejně, přečíst datašít, zjistíš postup práce s periferií. takže postup je jasně danej. bank2 před movf eedata,w musí bejt proto že registr eedata se nachází v bank2. kvuli střadači se banka nepřepíná, střadač pracuje ve všech bankách, banky přepínáš kvůli registrum s kerejma pracuješ.
Napsal: 05 led 2014, 20:53
od PIClover
Jo takhle, už to chápu. I vidim v datašítu, že eedata je v BANK2. Jasnýýý...
Pak tam jsou ty zpoždění. Na ty ani nekoukám... Jen ty zákmity tlačítek si ještě pořádně vychytám až na samotný desce. Takže se zpožděníma žádnej problém rozhodně nemám. Už nemám... Pamatuju si, že minulej rok to pro mě docela problém byl. Nevěděl jsem, že se to v assembleru dělá tím způsobem, že budu přeskakovat instrukci furt dokola. Byl jsem zvyklej z Bioloida (robo stavebnice), že napíšu jednoduše Timer = 1sec
Wait while (Timer > 0sec)
ale to jen tak na okraj.
Potom tabulka mi je taky jasná. Jen se zeptám, kdybych vícekrát dekrementoval tu proměnou pocet, dostal bych se na 0 nebo by mi to hodilo nějakej error?
K hlavnímu programu toho moc nemám. Jen u testu2 vidim
movlw b'11111111'
movwf porta
bcf portb,4
Toho samého bych dosáhl kdybych dal call init? Nebo jsi call init smazal z původního programu záměrně?
Napsal: 05 led 2014, 21:32
od Pawalo
Kdyby si dekrementoval vicekrat tak by ses vratil na nejaky cislo a od toho by to pokracovalo. Ale pak uz to nebude plnit cistou funkci pocitani zapnuti.
Kdyby si v prubehu programu znova volal init tak bys znova prenastvil procesor, coz by mohlo prepsat nastaveni kery si udelal v prubehu programu , moch by se ti zhroutit program a delat nepredvidatelny efekty. Coz nechces. Takze celkovou inicializaci jen po zapnuti a pak uz ne. Pak uz jen prenastavovat periferie.