Fórum témák
» Több friss téma |
Fórum » PIC - Miértek, hogyanok haladóknak
Már mértem: stabil 13V az MCLR (4) lábon.
Nem túl hosszú a kábeled a fej és gép között? Nekem 60cm-nél hosszabb kábelnál döcögött. Egyébként UTP-t használok.
Az enyén 8 eres alarm cable azaz riasztó kábel, és pár centivel hosszabb, mint 2méter.
Teszteld le amit írtam. Vagy első lépésben kösd be a kábelodon az árnyékolást is GND-re. Bár a 2 méter szörnyen hosszú...
Nos! Ezt fogom tenni: kicserélem a kábelt kb. 30centis UTP-re. Aztán megkeresem itt az oldalon a feszültségekre vonatkozó részt, végigbogarászom a hardverem. Ha minden stimmel, és mégsem működik, akkor jelentkezek. Persze, ha működik akkor is.
Addig is köszönöm a segítséget!
iraskor milyen feszultsegeket mersz a labakon? Bulk erase van abban az icprogrban? Az sikeres?
Köszi a választ ,most már világos.
üdv Máté
Szerintem a memórialapok kezelésében volt valami, mert most makróként hívom meg az egyes I2C műveleteket. Itt találtam a példát a fórumon. Akadt ismét egy kis érdekesség. Az óra IC írása csak akkor akar rendesen menni, ha a direkt értéket mozgatom W-be, és úgy küldöm el neki. Ha változóból másolom W-be az értéket, akkor egy tök más értéket ír be.
tehát az alábbi működik csak: ... movlw h'12' I2C_send ... ha viszont ... movlw Hour I2C_send ... a felállás, akkor elcseszi Ehhez azért lenne szükség, mert ugye be kellene állítani az időt gombokkal, így viszont elég nehéz Van tippetek mitől lehet? Akkor sem akar menni, ha közvetlenül előtte írom a változóba az értéket (próbaképpen kipróbáltam), tehát elé írtam egy movlw h'12' movwf Hour parancsot. Itt az I2C_send is: I2C_send: MACRO movwf SSPBUF btfss PIR1, SSPIF goto $-1 ; var mig vege a kuldesnek bcf PIR1, SSPIF bank1 bsf STATUS,Z btfss SSPCON2, ACKSTAT ; ACK detektalasa bcf STATUS,Z bank0 ENDM Idézet: „movlw Hour I2C_send” ...nem cseszi el csak el kellene olvasni a datasheetben vagy mas doksikban, hogy a MOVLW mit csinal... az egy konstanst tolt be a W-be, ha valtozo nevet irod oda akkor gyakorlatilag a valtozo cimet teszi be a W-be es NEM az erteket! Hasznald a MOVF Hour,W -t helyette es mindjart jo lesz.
Affene, próbáltam is, de nem értettem miért nem megy. Igaz én movf Hour,0 -val próbálkoztam és úgy nem akart menni. Köszönöm a segítséget. Még esetleg valaki tud segíteni, hogy decimális számból hexadecimálisat hogyan konvertáljak?
Szerk, most próbáltam movf Hour,W-vel ugyanez a helyzet
Késő van már movwf helyett movfw volt :-S Köszi mégegyszer a segítséget. Most azon töprengek, hogy lehetne hexa formába áttenni a decimális értéket.
Idézet: „Most azon töprengek, hogy lehetne hexa formába áttenni a decimális értéket.” Alapkérdés: milyen célból? Mert a kontroller belül így is úgy is bináris számokkal dolgozik.
MOVFW nem letezo utasitas, az egy makro lesz amit valamiert itt szeretnek hasznalni az emberek. Magam reszerol kerulom mert a meglevo dyslexiam melle nem hianyzik egy ilyen hiba amibe te is bele utkoztel
Idézet: „Most azon töprengek, hogy lehetne hexa formába áttenni a decimális értéket.” Decimalis BCD-ben van vagy ASCII-ban? (Remelem nem az a kerdes hogy lehet a forrasba hexa szamot leirni, mert azt nyilvan tudod a forraskododbol itelve )
Az ora IC hexa formatumban dolgozik. Tehát a 12:23 az neki 0x12 és 0x23 formátumban jelenik meg. Az idő beállításánál 0-ról növelem a hexa értékeket , akkor a 12 nem 12 lesz hanem 1B. Ezért kellene 'konvertálnom a karaktereket'.
Az nem hexa formátum, hanem binárisan kódolt decimális szám!
Ha az alsó négy bit elért 1010-ra, akkor nullázod az alsó négy bitet, és hozzáadsz a változóhoz 0x10-t. Ez azután mehet direktben az órába.
Potyo hozzaszolasat csak annyiban egeszitenem ki, hogy BCD-nek szoktak roviditeni, ha ra szeretnel keresni a neten algoritmusokra.
Amugy a decimalis 12 hogy jott neked ki hexa 1B-re? Remelem csak eliras, mert az siman csak B
ja, kozben rajottem mekkora marhasagot irtam en is: 12 az ugye hexa C Epp csak felkeltem, bar lehdt jobb, ha nem magyarazkodom inkabb
Most így pihentebben, én is láttam mit írtam este A lényeg az, hogy a számjegyekben az A-F is megjelenik jelenleg. Amit én szeretnék az az, hogy a d'12'-ből h'12' legyen. Ne pedig h'0C'.
Nem. A BCD az Binarisan Kodolt Decimalis szam (Binary Coded Decimal - BCD). Nezz utana, csak diohejban: Van pakolt es pakolatlan formaja ennek az abrazolasnak. Pakolatlanul minden decimalis szamjegy egy byte-on van tarolva, azaz a d'12' az 0x01 0x02 lenne. A pakoltnal meg ugye 0x12 lesz.
Ha azt mondod, hogy van egy szamod, amit a forrasban ugye d'12' -nek irsz, az ugye mindenkepp 0x0C -nek tarolodik el, mivel a gep binarisan 'gondolkodik'. A feladat annyi, hogy ebbol a 0x0C-bol kapj '0x12'-t. Irj egy rutint, ami ezt megcsinalja - potyo mar irt valamit hogy hogyan indulj el, azonkivul biztosan rengeteg peldat is talalni a neten ilyen kovertalasokra es BCD aritmetikara. Velemenyem szerint jobban rogzulne benned ez ha magad probalkoznal a konvertalas megirasaval.
Bocsi a minden bizonyal kezdő kérdésért ,de nem tudok rájönni hogy a __config utáni konfigurációs biteket honnan lehet összegyűjteni. /tehát honnan tudom meg mit kell oda írni ha nincs előttem egy megírt példa/
Az MPLAB programkönyvtárában keresd meg a használt PIC include file-ját. Annak a végén szoktak lenni a konfigurációs lehetőségek definiálva. Ezeket a megnevezéseket az adatlappal összevetve kiderül, hogy melyik megnevezés milyen beállítást takar.
Köszönom ! lehet még egy kérdésem ?
Mit jelent a ;----- Configuration Word1 --- ;----- Configuration Word2 --- ? És amit nem állítok be az beáll valamilyen értékre vagy hibát fog jelezni ? -Bocs a bugyuta kérdésekért de még csak ismerkedek a témával- Idézet: „Mit jelent a ;----- Configuration Word1 --- ;----- Configuration Word2 --- ?” Hol találtad? Idézet: „És amit nem állítok be az beáll valamilyen értékre vagy hibát fog jelezni ?” Amit nem állítasz be, azt általában úgy veszi mintha egyre lennének azok a bitek állítva. Ez érvényes a konfig bitekre is, és pl. ha az INCF utasításnak elhagyod a második paraméterét, akkor úgy veszi mintha ott is egy állna (ez utóbbiért azért egy üzenetet megjelenít, hogy inkább írd oda).
A konfigurációs biteket tagolja ezzel a két komenttel a(z) Mplab-ban található fájl
Meg csak annyit ehhez a temahoz, hogy az MPLAB-ban a projectedben is be tudod allitani a config ertekeket, tehat nem biztos, hogy a forras file tukrozni fogja az aktualis konfigurtaciot, DE! Es ez egy csupa nagybetus DE: Nem ajanlatos igy konfiguralgatni a chipet mert akkor a forrasbol nem derul ki a forditas eredmenye es igy kesobb nehezebb vissza emlekezni hogy is kell bekonfiguralni stb - es mivel legtobbszor az ember csak a forrasokat menti ill. kuldi el kollegaknak vagy eppen ide a forumra, hogy mi is a problema a koddal, ezert ez az informacio igencsak hianyozni fog az elemzeshez.
Mivel egy inkrementáló folyamatban van alkalmazva az eljárás, ezért azt hiszem ez volt a legegyszerűbb megoldás:
... INCFSZ ertek,f ; 1-el növelem az értéket MOVF ertek,W ; elmentem az értéket "mentes"-be MOVWF mentes BCF ertek,7 ; felső 4 bitet nullázom BCF ertek,6 BCF ertek,5 BCF ertek,4 MOVLW 0x0A ; d'10'-et kivonok az értékből SUBWF ertek BTFSC STATUS,2 ; (zerus bit figyelese) call ADD06 MOVF mentes,W ; a kimeneti érték W-ben MOVWF ertek ; kovertált érték bekerült a régi helyére ... ADD06 MOVLW 0x06 ADDWF mentes,1 RETURN Kezdőként ez jutott eszembe, mit mondotok rá? Működik, de van-e szebb / jobb módszer?
Úgy nézem, jó. Én így csinálnám:
|
Bejelentkezés
Hirdetés |