Fórum témák
» Több friss téma |
Üdv!
PGD (Adat ki) az a 16.os láb az ACK (Adat be) 15 láb a mellékelt PIC-nél? És a PGC (Órajel) az melyik láb lenne? a 3-as? előre is köszi
Kérlek, hogy pontosan tedd fel a kérdésedet, ne kelljen senkinek gondolatolvasással foglalkozni...
Ezt így illett volna kezdeni: Adott egy 16F84 típusú PIC... Ha már ezt a doc-ot nézed - volt már róla szó, hogy 16F842 típusú PIC nem létezik - akkor azt az eredeti adatlappal együtt tedd, mert bizonyos részek hiányoznak belőle. A PIC soros programozására szolgáló kivezetések általában PGD, PGC, néha ICSPDAT, ill. ICSPCLK. Ezeket az eredeti adatlap jelöli - jelen esetben a 16F84A adatlap "TABLE 1-1" leírás részében olvasható. Gyakran a PIC RB6-os kivezetése a PGC, az RB7-es pedig a PGD. Ennél a PIC-nél is így van, tehát PGC a DIP tokos változatnál a 12-es, a PGD a 13-as kiveztés. ACK nincs, azt máshonnan keverted ide... A soros programozáshoz, további kivezetésekre is szükség van, lásd (keresd): ICSP!
Rendben,köszi.
Csak azért kérdeztem,hogy tudjam,hogy melyik lábat hová kössem ezen az égetőn "lásd a mellékletet".Bővebben: Link
Sziasztok!
Az alábbi progi részletből az utolsó utasítást nem akarja valamiért megcsinálni. Már mindent megnéztem és nem értem hogy miért nem csinálja meg. CBLOCK 0X00 A1 ENDC MOVLW 01H MOVWF A1 <--ezt Valaki tudja esetleg?>
Ha biztos vagy abban, hogy van 0x00 című írható regisztered (ugyanis abba próbálsz írni), akkor talán bankváltási problémád van. Milyen kontroller, ez az első kérdés...
Gondolom én foglaltam le memóriát az A1-nek, így írható is. 18F452-esem van. Az elvileg automatikusan kezeli a bankváltást, kivétel, ha külön akarom kezelni, de abba még nem túrtam bele.
Mivel ez a regiszter ott létezik és írható is, nem módosítottad véletlenül a BSR értékét? Indulás után 0, ezzel az értékkel 0x00-t írná, de ha pl. 1 van benne, már az 0x100-at írná (azaz nem írja egyiket sem, és olvasáskor 0-t ad vissza).
Automatikusan akkor találja meg a megfelelő bankot, ha MOVWF A1, 0 alakot használsz (vagy 0 helyett az ACCESS deklarációt, kinek hogyan tetszik), ez felülbírálja a BSR bitjeinek jelentését. Szerk.: javítva, elírtam a regiszterek címeit...
Különben ha EQU-val definiálom, akkor működik az utasítás, csak ha máshol is beolvasom ezt a "konstanst", akkor ott az eredeti értéket fogja beolvasni. Így változónak ez a megoldás nem jó.
Ez a program szivat engem. Most máshol nem olvas.
Azt tudnod kell, hogy egyelőre az Mplab szimulátorban futtatom. Minden módosítás után lefordíttatom, meg nyomok egy reset-et a lépésenkénti végrehajtás előtt. MOVLW 01H MOVWF A1,0 ;ez volt a probléma előbb UJRA MOVLW A1 ;most meg ez, A1 nem íródik be W-be MOVWF PORTD CALL DELAY RLNCF A1,1 GOTO UJRA Valamit rosszul csinálok? Idézet: „Valamit rosszul csinálok?” Mit jelent a "MOVLW" utasítás? Idézet: -> ez 0xA1-et ír be az akkuba, nem az A1 nevű regiszter aktuális értékét!„MOVLW A1” Idézet: biztosan működik, lásd az adatlap erre vonatkozó részét. „MOVF A1, 0, 0”
MOVLW - MOVe Literal to Work register. Tehát a MOVLW konstanst ír a W regiszterbe, nem egy változó tartalmát! Változó tartalmának W-be másolásához a MOVF utasítást kell használni - MOVe File to: MOVF A1, W
Arról szokj le már most, hogy az operandusnak 0-t meg 1-et írsz, mert nagyon megnehezíti a hibakeresést, és hajlamosak vagyunk nem segíteni, ha valaki ilyeneket ír! RLNCF A1, F - ha önmagában akarod forgatni. RLNCF A1, W - ha W-ben akarod a forgatás eredményét. Ugyanez érvényes ADDWF, SUBWF, INCF, stb. utasításokra is.
Hali
Segítséget kérek. Ha valaki egy egyensúlyzó robot építéséhez akar elméleti információkat gyüjteni (Magyar nelven) akkor azt hol teheti meg? Sajnos a Googl-on nem túl bőven találtam ilyet. Érdekelne még egy elektronikus gyroscope leírása is.
Köszönöm, erre gondoltam, sokat segítettél. Ez 50 pont.
Bocsánat, az előző hozzászólásban elrontottam a linket (a végén maradt valami szemét).
A javított link: -Elmélet
Sziasztok!
Most kezdek foglalkozni PIC-ekkel. Már jó pár oldalt megnéztem a témával kapcsolatban, és úgy találtam a PIC16F877 lesz a számomra megfelelő darab. Persze mondanom sem kell, hogy ahány oldal, annyiféle égető áramkör. Az lenne a kérdésem, hogy ezek közül melyik az ami tényleg működik, illetve milyen égetőprogramot érdemes hozzá letölteni? Windows XP és Ubuntu Linux van a gépemen.
Vannak egyszerű kapcsolások (pl. a például a Watt-féle mini-LPT, de nem minden körülmények között megbízhatóak, mert a számítógép alaplapjától is függ, hogy működnek-e.
Vannak megbízható kapcsolások, de azok nem egyszerűek (PICkit2 klónok) és PIC égetés is kell hozzá... Van egyszerű és megbízható megoldás is (veszel egy PICkit2 programozót készen), de az meg drága. Melyik ujjadat akarod harapni? Mellesleg a PIC16F877 egy kissé elavult, ennek megfelelően drága mulatság. Miért is nem jó a PIC16F887 vagy valamelyik PIC18F példány?
Megnéztem a PIC16F887 adatlapját, tökéletesen megfelel nekem. Először megpróbálkozom valami egyszerűbb kapcsolással, ha nem műküdik, akkor személyesen felkeresek valakit, aki tud PIC-et programozni.
Remélem sejted, hogy nem véletlenül linkeltem be Watt mini-LPT programozóját...
A PIC16F887-hez itt találsz egy kitűnő könyvet. A magyar nyelvűek közül ezt feltétlenül nézd meg. Érdemes előbb az elvi alapokkal megismerkedni (adatlap, a fenti irodalom, MPLAB, fordítók), s a programozással és az MPLAB szimulátorral is megbarátkozni, mielőtt egy alkatrészt vagy forrasztópákát vennél a kezedbe!
Köszönöm a tippeket! Nézegettem mindkét linket, hasznos dolgok vannak benne.
Az MPLAB-ot letöltöttem, telepítettem és azóta is azt próbálgatom.
Hali!
Ez az angol nyelvű link nagyon jó! El is kezdem tanulmányozni. Köszi szépen!
Azt elfelejtettem mondani, hogy PIC16-hoz a Hi-Tech a hivatalosan támogatott C fordító, amióta a Microchip felvásárolta.
Az ajánlott angol nyelvű könyv példáihoz kipróbálhatod a MikroC demó változatát, de hosszú távon nem érdemes azon a vonalon haladni.
Tiszteletem mindenkinek.
Egy kis segitséget kérnék 18F4520 ügyében.Az elkészitett programomban a PORTE.0,PORTE.1 és a PORTE.2-es vezérlésekor bármelyiket aktivizálom a már elözöleg bekapcsolt lezár.Pontosabban mondjuk ha már a PORTE.0 már aktiv és mondjuk a PORTE.1 bekapcsolom a PORTE.0 lezár annélkül hogy erre hivatkozó parancsot kapott volna. A konfig.és a prg.kezdéskor definiált portok beállitása: MCU=P18F4520 _OSC_XT_1H = $00F1 _PWRT_OFF_2L = $00FF _WDT_OFF_2H = $00FE _MCLRE_ON_3H = $00FF _LVP_OFF_4L = $00FB _DEBUG_OFF_4L = $00FF _MCLRE_ON_3H = $00FF _LPT1OSC_OFF_3H = $00FB _STVREN_OFF_4L = $00FE _LVP_OFF_4L = $00FB _XINST_OFF_4L = $00BF _DEBUG_OFF_4L = $00FF _LVP_OFF_4L = $00FB _XINST_OFF_4L = $00BF _DEBUG_OFF_4L = $00FF _CPB_OFF_5H = $00FF _CPD_OFF_5H = $00FF _WRT0_ON_6L = $00FE _WRT1_ON_6L = $00FD _WRT2_OFF_6L = $00FF _WRT3_OFF_6L = $00FF _WRTB_OFF_6H = $00FF _WRTC_OFF_6H = $00FF _WRTD_OFF_6H = $00FF _EBTR0_OFF_7L = $00FF _EBTR1_OFF_7L = $00FF _EBTR2_OFF_7L = $00FF _EBTR3_OFF_7L = $00FF _EBTRB_OFF_7H = $00FF Start Program WREG:=$84; CMCON:=7; ADCON0:=0; ADCON1:=7; ADCON2:=7; T0CON:=$C4; TRISA:=$FF; TRISE:=0; LATE:=0; PORTE:=0; TRISB:=0; PORTB:=0; TMR0L:=48; INTCON:=$A0; Elöre is köszönöm a segitséget.
Szia! Én nem sokat konyítok a picek programozásához, de ez alapján szerintem nem tud senki segíteni. Ha nem szupertitkos a projekt, esetleg tedd fel az egész forrást, de azt a részt mindenképpen, ahol a port bitjeit kapcsolgatod! Mindenesetre a leírtak alapján én RMW ( Read-Modify-Write ) hibára gondolok. Használod a LATE regisztert?
Azt hiszem egyből Assembly-vel fogok kezdeni. A C-nyelv valahogy sosem nyerte el a tetszésem.
1. Ha a PORTE biteket digitális kimenetként akarod használni, akkor le kellene tiltani az AN5, AN6, AN7 analóg bemeneteket. Ehhez az ADCON1:=7 nem jó választás (lásd az adatlap REGISTER 19-2 szekcióját).
2. Ne a PORTE, hanem a LATE bitjeit írd! PORTE bitenkénti írása ún. read-modify-write (olvasás-módosítás-visszaírás) művelet, s a PORTE lábakról nem feltétlenül azt olvassa vissza, amit te szeretnél. A LATE használatakor viszont a kimenőregiszter bitjeit olvassa vissza, ez így korrekt eljárás.
Kár lenne egy nyelvre korlátozni magadat!
|
Bejelentkezés
Hirdetés |