Fórum témák
» Több friss téma |
Fórum » PIC - Miértek, hogyanok haladóknak
bocs, azt hittem, hogy egyszerű ez a program, csip-csap meglenne, de nembaj
Hogyne lehetne! Az van a PICkit2 Starter Kit-ben (a Low Pin Count demókártyán). Lásd itt is...
Ebben a cikkben és a hasonló nevű topikban használnak infra távirányítót, esetleg érdemes megnézni/érdeklődni. Azt is tisztázni kell, hogy a távirányítód (gondolom, az már megvan) milyen kódolást/időzítést használ.
Sziasztok!
Először is a tapasztaltabb programozó kollégák segítségét szeretném kérni. Amit el szeretnék érni: 24 poti állásának beolvasása és ezek értékeinek továbbítása. Ehhez 3 db Analóg Multipexert(CD4051) akarok használni melyek kimenetét AN0, AN1, AN2 portokon olvasnék be, a vezérlést pedig RE0, RE1, RE2 portokon küldeném. Tudomásom szerint a PIC18F4550 A/D konvertere 10bit-es azaz 0 és 1023 között ad értéket a poti állásáról. Viszont nekem csak 0 és 127 közötti értékekre lenne szükségem, amit csak akkor küld el ha az érték változott. Írtam is rá egy programot, melynek egy részletét lentebb beilleszem. A kapcsolási rajzot is cstolom. Az lenne a kérdésem, hogy ez így működőképes-e? Milyen javaslatotok van hogyan működne ez jobban? A programrészlet:
Üdv. fillx
Sziasztok!
Írtam egy LED váltogató programot és egy késleltető ciklust hozzá és az lenne a kérdésem, hogy alábbi program részlet működne-e így, 10MHz-es kristállyal és PIC16F877-tel: MOVLW b'00010000' MOVWF PORTB ;RB4 CALL DELAY GOTO MAIN DELAY ;1s-os késleltetés MOVLW 0X0D ;W=13 MOVWF DELAY1 ;DELAY1=13 MOVLW 0XBB ;W=187 MOVWF DELAY2 ;DELAY2=187 MOVLW 0XAA ;W=170 MOVWF DELAY3 ;DELAY3=170 DELAY_1 DECFSZ DELAY1,F GOTO DELAY_1 DELAY_2 DECFSZ DELAY2,F GOTO DELAY_2 DELAY_3 DECFSZ DELAY3,F GOTO DELAY_3 RETURN smrtln
Szia!
A ciklusokat egymásba kell ágyazni, mert így nagyon messze leszel az 1s-tól ( szimuláld le!!) ! Steve
Az MPLAB-ban van MPLAB SIM ( Debugger menüpont) !
Steve
View menüpont Watch-ban kiválasztod, hogy melyik regisztereket akarod vizsgálni, Debugger Stopwatch és az F7, F8 billentyűk!
Próbálgass! Steve
Szia!
Egy két észrevétel a programmal kapcsolatban: - Az A/D modult elég egyszer bekapcsolni - tedd át az initADC -be. Be kell állítani a formátumot is ADCON2 regiszterben az ADFM bittel, és az időzítését is a ACQT1.0 bitekkel. Ezen bitek értéke a csatorna kiválasztásnál maradjon meg. - A stabil érték beállásához a csatorna kiválsztás után várni kell: ld. adatlap 21.1 . - Az 54. sor szerintem: result = (ADRESH << 8) | ADRESL; - 55.sor: Mivel a result int, a result/1024 mindig 0. - Ha csak 7 bites eredmény kell, akkor az 54. - 55. sor helyett : result = (ADRESL >> 1); Szia
Szia!
Hát nem a kellő 1s-ot kaptam de most már tudom hogy működik a SIM, majd átírom a programom késleltető ciklusát. Köszi szépen a segítséget! smrtln
OK!
A válaszoknál használd a "Válasz" lehetőséget, hogy aki nézi a fórumot, tudja, hogy mi mihez tartozik! Jó munkát! Steve
Valamint ilyen hosszú kódot ne másolj be, azárt van a csatolás lehetősége...
Szia!
Mikor csatornát váltok ADCON2 bitjeit is újra be kell állítani? Meg még egy kérdés az igaz hogy 7 bites eredmény kell, de ha az a/d konverter 10 bites akkor nem lép fel az a hiba hogy egy bizonyos fok után a poti állását nem érzékeli vagy hibásan állítja? fillx
Szia!
- Az A/D csatorna váltásánál csak az ADON bit maradjon meg: ADCON0 = (ADCON0 & 1) | (chan); - Az ADFM bit jelentése nincs nagyon megmegyarázva ezen az adatlapon, de a 18F242 adatlapjában benne van az ábra, amit csatoltam. Állítd az ADFM-et 0- ra, ekkor a 8 legmagasabb bit a ADRESH regiszterbe kerül. A számítás ekkor: result = (ADRESH >> 1); Szia
Helló !
Csak 1 ötlet, az 55. programsorodra :
Mivel az 1024/128 = 8. Például a potméter feles állásánál az AD eredményed 512 a result értéke így 64,míg teljesen feltekert potinál pedig 127. Remélem érthető amit írtam, szerintem így rövidebb és gyorsabb lesz a kód.
Tisztelt Urak, és első sorban watt mester
Adott a watt-féle WPB_RS_v2 programozó általam eagle-be "átemelt" és megépített áramkör. A programozó leírása alapján a WPB_F18_4.25b programmal letesztelve a vonalakat és feszültségeket, minden klappol, és sehol nem mértem (és láttam) zárlatot, szakadást az összeépítés során sem. Ennek ellenére mégsem gömbölyű valami, mert az említett program a 18F4550-est felismeri, a 16F877A-t pedig nem nagyon akarja. Van ötletetek, hogy ez miért lehet? Szeretném előkészíteni az IC-ket az ICD2 ill. PICkit2-höz, és jó lenne, ha sikerülne a dolog. Különben csatoltam egy képet, ilyen lett.
Szia!
Ha a 18F4550 -et felismeri a program, akkor a 18F2550 -et is fel fogja ismerni. A 18F2550-nel elindítható a PicKit2. Így már a többi típust a PicKit2-vel lehet programozni. Szia
igen az jó is lenne, de a PICkit2 még nincs kész.
Igen... Ismét bebizonyosodott, hogy nem figyeltem eléggé. Hiába, már este van. Benne van a program nevében: WPB_F18!!! Tehát csak 18-as szériát kezeli. Én marhameg próbálkozok
Szia!
Igen de ez műnyomós. A vinnyettás valahogy nem akar olyan lenni, amit elvárok. Különben én is ráállok a laminálós dologra, már megvan a szerkezet
Kicsit elakadtam, ha tudna valaki megoldást, a 16F690-nél melyik láb megy a PGD - re és a PGC - re ?
A pickiten megvannak ezek a lábak, a a PIC-adatlapján ez nem egyértelmű nekem. Előre is köszi.
Megtalaltad az adatlapot?
[OFF]Mar annyiszor elhangzott, de ez orok tema: A PIC-ezeshez es egyaltalan az elektronikahoz elengedhetetlen az adatlapok tanulmanyozasa...
Persze, megtaláltam az adatlapot elsőre is, azzal nem volt semmi baj, de az adatlapban a lábkiosztásnál nem találtam sehol hogy PGD illetve PGC, annyira nem vagyok pró, legtöbbször ez nem okoz gondot, a 628-asnál és többnyire a legtöbb pic adatlapjába oda van biggyesztve hogy PGD PGC, más jelölést nem ismerek, ennél meg nem találtam meg.
Idézet: „PIC-ezeshez es egyaltalan az elektronikahoz elengedhetetlen az adatlapok tanulmanyozasa...” Tudom én ezt nagyon jól, de ha nem használod nap mint nap, nem ismered a jelöléseket, segítséget csak lehet kérni nem? Egyébként írtam hogy : a PIC-adatlapján ez nem egyértelmű nekem.
OK, bocsanat, en hibam, valoban irtad.
PGD-t es PGC-t nagyon sokszor ICSPDAT ill ICSPCLK neven emlegetik -- Ugyanaz, csak ez utobbi elnevezes (szamomra legalabbis) egyertelmubb, ICSP-rol leven szo (In-Circuit-Serial-Programming).
Na szóval:
Továbbra is problémát okoz a watt-féle COM portos égetővel a 16F877A. Eddig két programmal is próbáltam, nem akar sikerülni. Érdekes módon a 18F4550-es simán programozza, többször visszaellenőrizve is minden oké. Úgy is, hogy egyik programmal feltolom a tartalmat, a másikkal meg visszaellenőrzöm, így sincs hiba. Az adatlapok szerint a 40 lábú DIP tokok esetén mindkettőnek ugyanott vannak az ICSP lábak, tehát elkötés is kizárt. Mit csinálok rosszul? |
Bejelentkezés
Hirdetés |