Fórum témák
» Több friss téma |
Fórum » PIC - Miértek, hogyanok haladóknak
A bekotes jonak tunik, de az IO bovito regisztereinek a cimzese 8 bites mint ahog azt watt, Topi es szilva mar emlitette. A Te write es read rutinjaidban azinban 16 bites cimet kuldesz el... nyilvan eeprom-ra lett ez tervezve.
Irdd at 8 bitesre es valoszinuleg jo lesz.
Úgy programoztad, hogy a Vpp ráment a bővítő IC reset lábára?
![]() No látod ilyen dolgokra nem gondol a magunkfajta egyszerű ember! ![]() Akkor lehet, hogy annak annyi.... Szüntesd meg ezt a megoldást a belinkelt példa szerint(szilva által volt az imént) és próbáld meg utána 8bites címmel! Talán szerencséd lesz... Még annyit, hogy a rajzon, amit csatoltál, nem szerepelt ICSP csatlakozó, így fel sem merült bennem, hogy a helyén progizod az IC-t, holott ez a gyakorlat...
Adatlap abszolút maximum értékek szekcióból:
Voltage on VDD with respect to VSS .......................................................................................................... -0.3V to +5.5V Voltage on all other pins with respect to VSS (except VDD)............................................................. -0.6V to (VDD + 0.6V) Hát, ez alapján maximum 6.1V lehet bármelyik lábon. Ez pedig a 4520 adatlapjából: D110 VPP Voltage on MCLR/VPP/RE3 pin 9.00 — 13.25 V Azaz programozáskor ott minimum 9V fog megjelenni a programozó felől, hacsak nem használsz low voltage programming-ot. Szóval ha az áramkörben, a helyén programoztad programozóval a 4520-at, akkor nézd végig, mik vannak rákötve a PIC Vpp lábára közvetlenül, mert azok nem biztos, hogy túlélték (ha bootloadert vagy low voltage programming-ot használsz, akkor nincs ilyen veszély).
Talán, ha az égető Vpp terhelhetősége véges, és a bővítő lábain van dióda a Vdd felé, akkor esetleg megúszta a cucc...
Hat valoban nem, teljesen elsiklottem efelett
![]() Csaplar, van egy demo board MCP23x17 -re (I2C es SPI valtozat is rajta van a panelen). Annak a User's Guide-jaban ott egy kapcsolas, hogy az MCLR-t hogy kotottek be, ott egy diodaval vedik a reset agat a Vpp-tol, nezd meg es aszerint modositsd az aramkorod. Ettol fuggetlenul azt a cimzest irdd at, es hatha van akkora makod, hogy az IC meguszta, ha nem akkor ahogy szilva mondta nekem 250Ft, ugyhogy ne sokat sirankozz felette, hantold el es tedd be a masikat.
ICD2-vel programoztam fel! Akkor lehet, hogy meghalt?
![]() Módosítottam a mellékelt forrás szerint, szerintem most minden jónak kell, hogy legyen, de így sem csinál semmit... De az úgy jó ugye, hogy a LATA címre küldök egy 1-et?
Ne az írással szenvedj, olvass róla és nézd meg szkóppal az adat vonalat.
Ha bármi adatot is küld vissza azt látni fogod. Ha küld, nem halott.
Nincsen sajnos semmi ketyerém hozzá... vagyis van egy öreg multimeterem. Azzal tudok valamit kezdeni?
Kicsi keveredést vélek felfedezni...
Először is konfigolni kell a bővítőt: S, (OP+W), ADDR, adat , P 'ezt annyiszor, ahány reget be kell állítani Ha már egyszer beállítottál egy port(ill. regiszter) címet, és folyamatosan arról olvasol, vagy arra írsz, akkor nem kell az ADDR-t kivinni újra. S, (OP+W/R),ADDR, adat, SR, (OP+W/R), (Dout/Din), SR, (OP+W/R), (Dout/Din), ....., P
Meg mindig nem jo! Te hol latod azt az adatlapban, hogy az iras elott olvasni kellene? EEPROM-nal lehet,hogy igy van, de ez NEM ugyanaz az eszkoz. Az I2C csak egy adatkommunikacios protokoll a hardware absztrakcios layerrel egyutt, de nem azt irja le az eszkoz milyen parancsokat ert meg. Azt minden eszkoznel ki kell nezni az adatlapbol. Mellekeltem a kommunikacios abrat, szerintem eleg vilagos, a reszletek pedig az adatlapban...
Bevallom a második ábracsoportot nem értem. Hogy olvashat, ha nincs az elején beállítva a cím, valamint miért kellene először írni az olvasáshoz?
Az ezeket megelőző ábrákon(adatlap 7. oldal), egyértelműbb a folyamat. (csatoltam)
Ha írni akarok akkor a felső ábrát kell néznem. Abban mi az az olvasós rész? Ott milyen adatot vár a bővítő IC-től?
Az NACK-k is feleslegesek? (az ábrán azok sem szerepelnek...)
Én azt úgy értelmezem, hogy a nyilakon lehet "közlekedni", azaz az indulás és a cím megadása után megteheted azt, hogy kiolvasol valahány regisztert (a második sor szerint), majd írsz valahány regisztert (a harmadik sor szerint).
Azt hiszem, lényeges, hogy az "ADDR" hol szerepel, mert valószínűleg csak ott szerepelhet. Ezért kell egy "irási" utasításkóddal indítani az olvasási műveletet is, ha meg akarjuk adni, hogy az olvasás honnan történjen. Az olvasási műveletek előtt ugyanis sehol nem látok "ADDR" blokkot.
Az embernek elveszi a kedvét a segítéstől, ha a segítségkérő nem hajlandó önállóan utánaolvasni valaminek.
Nézd meg már kérlek az adatlapot. Olvasd el, hogy kell kommunikálni vele. Első ábra. Kevered a blokk diagramot a tényleges byte struktúra diagramokkal.
Egy teljesen üres progiban az inicializálás után kiadok egy I2C_start()-ot, majd azt vettem észre, hogy amikor ki akarnám írni a címet, akkor a while(!PIR1bits.SSPIF) continue; soron megáll és nem megy soha tovább...
Ez jelentheti azt, hogy rossz az IC? Köszi
Nincs olvasas a felso abraban csak iras. Az is le van irva a doksiban, hogy a "Din" az MCP23017 szempontjabol "in" azaz bemenet... mivel ez annak a doksija. Igy a "Dout" ennek megfeleloen az IO bovito kimenete - azaz a PIC szamara ez lesz a bemenet.
Cimzes is le van irva, mellekeltem, most jol ossze szabdaltuk a doksit, de hatha igy elolvasod ![]() ![]() Nem szekvencialis modban (tehat byte modban) nem kell minden olvasaskor kulon cimezgetni, eleg egyszer beallitani a cimet es utana ugyanazt a cimet olvashatod - pl ahogy az adatlap is irja ha pollozni akarod az egyik input bitet vagy ha folyamatosan ugyanazon a porton kell biteket billegtetni. Lenyeg, hogy elobb probald meg, hogy en szerintem a write muvelet egyszerubb - es most itt ellen kell erveljek Topinak - pont emiatt, mert akkor a cimzest nem kell kulon megejteni. Ha az IO labat sikerul billegtetni akkor mar helyben vagyunk, persze ehhez at kell kapcsolnod outputra, es pl be kellene kapcsolni a pull-up-okat hogy lehessen merni kivulrol pl egy multimeterrel - ha mar nincs scope-od. Megjegyzem ha lenne Proteusod azzal lehetne ezt az aramkort szimulalni es melle a firmware-edet szimulalva debuggolgatni, es akkor nem kellene scope, elfustolt alkatresz stb, viszont a firmware-t be lehetne szepen loni mire aramkorileg is fel vagy keszulve kiprobalni a valosaban is.
Oksi! Köszi a sok észrevételt...
Ma már nem tudok vele foglalkozni idő hiányában, de hamarosan újra nekilátok! Mégegyszer köszi! Üdv
Eh, hulyeseget irtam
![]() ![]()
Sziasztok!
Van egy programom, amit 16F84-re írtam, de át szeretném írni 628-ra, de nem tudom, hogy hogyan kell megírni az inicialicálást, hogy az A port 0,1,2-es lábai bemenetek, a B-port 0,1,2,3,4 lábai pedig kimenetek legyenek. A gondom az, hogy nem tudom, hogy hogyan kell beállítani, hogy az RA6 és RA7 lábakon a kvarc legyen A 84 inicializálása az alábbi: INIT BSF STATUS,RP0 MOVLW B'00000111' MOVWF TRISA MOVLW B'00000000' MOVWF TRISB BCF STATUS,RP0 CLRF PORTB
Ezt a részt nem kell változtatni ugyanaz.
Az oszcit pedig a config biteknél kell beállítani(adatlap 14.1 bekezdés... 4MHz-től HS mód jó.) Egyébként nem is ez a rész az érdekes, hanem ahol az AD-t kikapcsolod(komparátorokat) Ezt az adatlap 9. bekezdésénél találod a 9-1 ábrában. (CM2:CM0=111)
Köszi, valahogy már megyeget, de valahogy nem akarja definiálni a változóimat. Ezek így vannak 84-re:
CBLOCK 0x0C T1 T2 SZAML TEMP ENDC
Köszi, valahogy már megyeget, de valahogy nem akarja definiálni a változóimat, vagy nem tudom mi van vele, de nem azt csinálja, amit akarok.
A mostani eleje: LIST P=16F628 #INCLUDE "P16F628.INC" __CONFIG _XT_OSC&_CP_OFF&_WDT_OFF CBLOCK 0x0C T1 T2 SZAML TEMP ENDC ORG 0 nop INIT CLRF PORTA MOVLW 0x07 MOVWF CMCON BCF STATUS, RP1 BSF STATUS, RP0 MOVLW 0x1F MOVWF TRISA MOVLW 0x00 MOVWF TRISB BCF STATUS,RP0 CLRF PORTB
628-nal hol kezdodik a RAM? (Adatlapbol nezd ki)
Sziasztok !
Csináltam egy egyszerű kis ADSL ujainditó kütyüt 16F628A val, amit mobiltelefonnal inditok. Sajnos a programot nem sikerült rendesen elkészitenem bele. Elsőször CCS C ben próbáltam megírni, de a sorosport vétel sehogy nem jött össze. Most MIKROELEKTRONIKA MIKROC ben írtam meg , így jó a sorosport vétel, viszont sorosporton nem tudok küldeni adatot. A kapcsolás tuti jó mert másik forditóval müködik a sorosport küldés ( csak ott a foagadás nem megfelelő) Van esetleg valaki aki a tuda segiteni ezel kapcsolatosan ?
Sziasztok!
Kellene nekem egy kis segítség ugyanis most ismerkedek az interrupt-tal. Van egy PIC16F871-em és 32.768KHz es kvarc oszcit kötöttem a T1OSI / T1OSO (15,16-os lábra). Naszóval elsősorban azokat kérdezném akik a mikroBasic-ben tudnak segíteni, ugyanis ezzel progizok. Nagyjából sejtem miről van szó a TMR0-val, a T0SE, T0CS, PS2...0 (prescaler) TMR0IF. szóval ezek tudom mire jók és hogy kell csinálni az előosztást, csak egyvalami esik nehezemre megérteni, hogyan kell konfigurálni az INTCON és az OPTION_REG regisztert. :no: És mégegy, mivel az adatlapon az RA4/T0CKI-hoz nincsen másik láb amihez hozzá tudom kötni az óra kvarcot? Vagy tökéletesen megfelel nekem a T1CKI, és akkor a TMR1-et kell választanom? Kicsit össze vagyok zavarodva.. Ha tudnátok segíteni azt nagyon megköszönném, hisz túlteng bennem a tudásvágy a PIC felé ![]() üdv: Zsuscsinyo
Szia ammateur,
En szerintem ezt nem igy kellene csinalni. Addig kellene olvasni a soros portrol ameddig van adat - nyilvan nem csak egy R betut kuld hanem a RINGING teljes szoveget esetleg a hivoazonositoval is bar ebben mar nem vagyok biztos, nagyon regen foglalkoztam modemekkel. Amikor az osszes adatot levetted, akkor inditsd az ATH-t. Be kell valljam nem ismerem a MicroC-t, de a \r es \n ertelmezese erosen implementacio fuggo. Van olyan C ahol a \n az CR+LF karakterekbol all (tehat ket karakterbol). Mindenesetre sokszor a \r az a CR es a \n az LF. Macintoshoknal a \r a divat mig unixoknal a \n (es igy az ujabb Mac-eknel van egy kis kavarodas ebbol fakadoan ![]() Es megegyszer, a teljes stringet olvasd be, kozben ellenorizd, hogy valoban RINGING-e, es ha kuld hivoszam azonositot akkor meg azt is meg tudod tenni, hogy csak a sajat szamodra reagal. Ja, amugy engem zavar, hogy a kommentben 19200-at irsz, az initnel meg 9600 szerepel - nem tudni melyik a szendekos...
Szia,
Szep ez az abra, csak ez a TMR0-rol szol. A TMR1-et nezd, az egy 16 bites timer, es igy ezzel a kvartzcal scaler nelkul 2s timeout erheto el. Csak azert mondom mert sokan azt varjak az oraictol, hogy 1s megszakitasuk legyen - ahhoz 15-tel kellene shiftelni nem 16-tal... Ha megnezed az adatlapot, akkor konnyen kinezheted mely regiszterek erintettek a TMR1-nel. Ha megnezed az abran (bar jobb ha inkabb az adatlapon nezed) a PIR1 ill PIE1 regiszterek tartalmazzal a TMR1IF ill TMR1IE flageket. Nyilvan az IF es IE kozotti osszefuggest kikovetkeztetted mar ha TMR0-t ismered. Az is nyilvan feltunt, hogy az INTCON-ban a GIE mellett a PEIE is feher, tehat szerepet jatszik a TMR1-nel. Ez a periferia interrupt engedelyezo, tehat minden ami a PIE1-ben engedelyezve van az ott egyszerre tilthato vagy engedelyezheto. Osszesitve 3 bit jatszik szerepet, a globalis interrupt engedelyezo (GIE), a periferia interrupt (PEIE) valamint a timer1 int engedelyezo (TMR1IE). Erdemes lenne az adatlapot bongeszni, mindig el szoktuk itt mondani, hogy ez a PIC-ek szentirasa. Szerencsere a Microchipesek ezekre nagyon odafigyeltek, jol vannak dokumentalva - neha at kell olvasni 2x 3x de ha megtanulja az ember a terminologiakat es az adatlapok felepiteset utana mar pillanatok alatt meg lehet talalni a kivant informaciot. Sok sikert! Tamas
Nekem már az is nagy öröm a sok sorosport vétel kudarc után ha 1 karaktert rendesen megfog.
Az eredeti mintaprogiban 19200 volt, elflejtettem átirni de a 9600 a jó. A gondom csak annyi hogy az ATH-t nem tudom visszaküldeni, úgy jelezné hogy vette a hivást, hogy leteszi foglaltra. De ha nem ismered a mikorC-t akkor nem biztos hogy tudsz segiteni. Hacsak valaki nem tud segiteni CCS C ben megirni, mert ott a fogadás sem sikerültnekem. Idézet: „De ha nem ismered a mikorC-t akkor nem biztos hogy tudsz segiteni.” 1. Nem biztos, hogy a fuggvenyhivasok korul van a kavarodas 2. Ebbol fakadoan lehet megis tudok segiteni, hisz C-hez kozel 15 ev utan talan ertek - igaz nem PIC mikro kornyezetben mert itt Assemblyben faragom a biteket, de azt hiszem tobb Unix/Linux, Win, Dos, NetWare stb kornyezetben mint PIC-et valaha is lattal eletedben 3. Anno, regesreg, a messzi messzi galaxysban BBS temabol irtam a diploma munkam (kooperativ multitaszkot valositottam meg DOS alatt es igy 4 modemet, 4 bejovo kerelmet kezeltem le). Regen volt de talan meg emlekszem AT parancsokra es mizeriakra. 4. Ha nem olvasod ki a bejovo dolgokat bizony annak az altalam nem ismert microC-nek, annak is az RS232 kezelojenek a belso taroloja lehet betelik, es mivel nem ismerem arra is tippelnek a hiba lekezeleseig nem hajlando mukodni (ilyen megoldasokat is lattam mar, ld pl az oreg Borland fele CRT rutinok bizony igy mukodnek). EZERT javasoltam, hogy olvasd ki az osszes karaktert MIELOTT elkuldened az ATH-t, igy elkerulendo ez a hibalehetoseg. 5. Honnan a raknyavajabol tudod, hogy nem kuldi el az ATH-? Racsatlakoztal egy terminallal? Probaltad azon keresztul szimulalni a modem telefonhivast egy RING uzenet elkuldesevel? Lattad, hogy az ATH-t a PIC-ed szepen vissza kuldi? Vagy egy LED-et betettel oda ahol az R osszehasonlitasanal belep az IF lokkba? Szimulatoron probalgatod a programod amugy? Javasolnam tovabba, hogy nyiss meg egy CMD ablakot Windows alatt, vagy egy Bash-t Linux alatt, gepeld be, hogy DIR, de ne nyomd meg az entert, es turelmesen varj.... vard meg mikor fogja a parancsodat vegre hajtani... Ha masnapra sem tortenik semmi akkor olvasd el megint mit irtam a sorveg karakterekrol es gondolkozz el rajta... 6. Bocsanat, hogy segiteni probaltam!
Köszi a tippeket , és minden segitséget, és a félreértés elekrülése végett, elmondanám hogy semmiképp nem akartalak megbántani vagy lebecsmérelni, ha ezt mégis igy tünt akkor elnézést kérek tőled.
Este megpróbálom amiket javasoltál. |
Bejelentkezés
Hirdetés |