Fórum témák
» Több friss téma |
Fórum » PIC - Miértek, hogyanok haladóknak
Idézet: „meg ott van header is (C:\PROGRAM FILES\MICROCHIP\THIRD PARTY\PICC\devices\16f726.h)” Ez elég érdekes, mert nekem meg nincs ott, pedig most telepítettem fel a CCS MPLAB plugint. Ha az MPLAB menüjében Project/Build Options/Project menüpontban az Include Directories-nek megadom, hogy C:\Program Files\PICC\Devices (ide van telepítve a különálló CCS), akkor viszont gond nélkül lefordult a program. Nálam ezek vannak: MPLAB 8.15a CCS PCWH 4.074 CCS MPLAB plugin 2.0.0.7 (ami most tölthető le)
MPLAB ban a pickit2 panaszkodik hogy kevés neki a feszkó. ( 3 volt alatt van ). Pedig müszerrel mérve és a pickit2 szoftverével ( 2.55verzió) 3,3 volt ilyenkor.
A pickit szoftverével próbáltam kalibrálni , de nincs változás , a pickit progiban jól mér , az MPLAB meg nem. Valaki találkozott már hasonló problémával ?
Én tapasztaltam érdekes, kommunikációs jellegű nyűgöket, amik okoztak is ilyesmi hibaüzeneteket akkor, amikor az MPLAB mellett el volt indítva a PK2 programja is. Ha kiléptem a pk2 progiból, akkor jól viselkedett az MPLAB.
Arra azért figyelek hogy csak az egyik legyen elinditva.
Ezért nem értem a problémát. Csak mostanában jelentkezett , korábban nem volt ilyen gondom nekem sem. A PK2 programját akkor szoktam elinditani amikor a MPLAB sehogy sem birja felvenni a kapcsolatot a PK2 vel. Ilyenkor a progiban nyomk egy READot és helyrejön. Persze erre az időre bezárom az MPLAB-ot. De a feszültségkülönbséggel más helyzet , ez nem akar megjavulni.
Köszönöm. A fájlrendszer FAT32. A CCS től pedig semmit nem tudok letölteni. Az example full list egyikére sem tudok kattintani, nem tudom hogy jön le a pedig ott van az EX_FAT amit ajánlottak.
Idézet: „A CCS től pedig semmit nem tudok letölteni.” A CCS Compiler demót kell letölteni és telepíteni. Ez egyúttal a példaprogramokat is felrakja. Azután jöhet csak a forrásfájlok turkálása.
A 8.15a alól simán lefordult az a progi a ccs-el ami a 8.10 alól azt a méretes hibaüzenetet adta, ráadásul a 16f726-al zöld lett ac icd 2 bár sárga maradt a pickit2 a debug alatt, de én általában úgyis az icd2-őt használom.
Idézet: A sárga csak annyit jelent, hogy használható, de béta verziós, azaz gyárilag keveset tesztelték.„zöld lett az icd 2 bár sárga maradt a pickit2 a debug alatt” Mellesleg nem tudom (legfeljebb sejtem...) hogy miért az elavult ICD2-őt nyomja a Microchip. Mit tud az, amit a PICkit2 nem?
Köszönöm, áttanulmányozom hátha értek belőle valamit..
![]()
Hááát.. ezzel 2 nagy bajom van. Hogy C ben van, és hogy nem tudok C ben programozni. ASM ben ne is keresgéljek ilyen példa programokat?
![]()
Dehogynem, keresgelj asm-ben es ha talalsz ilyet mi is kivancsiak lennenk ra
![]()
Dehogynem, pl az embedinc.com-on kell lennie ilyesminek, persze abban nem vagyok benne biztos ingyenes, meg ok sajat makro precocessort hasznalnak amit kulon meg kell tanulni kezelni. Sot ha USB interface-t is akarsz akkor a PC-s dolgok nagy valoszinuseggel a sajat Pascal compilerukkel van leforditva - bar az is letoltheto toluk ha jol emlekszem.
Na mindegy, az biztos, hogy C-ben nagyobb esely van hasznalhato konyvtarakat talalni, no meg ha bele gondolsz, hogy ma mar mindenki C es C++ -ozik akkor belathatod hogy elobb-utobb neked is meg kell tanulnod - ha ez csak a hobby-d es mellette mit tudom en, atomfizikat tanitasz az egyetemen, akkor nyilvan nem "kell" megtanulni, csak ajanlatos, ha ilyen nagyszabasu project terveid vannak. Nem a nyelv miatt, hanem a konyvtari tamogatottsag miatt. A masik ut pedig az, hogy magadnak letrehozod a konyvtarakat, es mivel hobby nem szamit mennyi idobe telik ez...
Sziasztok!
Ha a program elején elindítok a BPORT 3. bitjén egy hardveres PWM-et, majd miközben ezen a lábon egy LED villog ütemesen, kiküldök a BPORT-ra csupa '11111111' vagy csupa '00000000', akkor az bele zavar a PWM működésébe? Ha igen, hogy küszöbölhető ki a zavar?
Sziasztok!
Van két mikim; egy 16F628A és egy 12F683. Mindkettő 4 MHz kristályoszcival megy. Mivel a 16F628A-nak nincs AD átalaktója, de van USART soros kommunikációs lehetősége (a 12F683 pont fordítva), szeretném ezeket összekapcsolni. A 12F lenne a potmétert figyelő AD átalakító (adó), jelenleg a 16F-en egy LCD kijelző van, itt szeretném kijelezni a 12F ADC0 értékét. Később a 16F-ről egy vonalon (+gnd) szeretném az értéket továbbtani. Sajnos az MCP3002 IC 4 adatvezetéket igényel (2 db ADC), azonban összesen 2 áll rendelkezésre. Kizárólag egyirányú adatátvitel lenne. Kérlek segítsetek, milyen rutinokat alkalmazzak? fejesg ![]()
Már összedugtam egy próba áramkört. A 628A kezeli az LCD-t, van egy bemenete és egy kimenete direkt a kommunikációra. (RB4 bemenet, RB5 kimenet)
A 683 egyik csatija AD bemenet, másik a kimenet, harmadik a bemenet (GP0-1-2). Jelen felállás: RB4 GP1-gyel, RB5 GP2-vel van összekötve. Ha a 628A RB5 kimenetre adok egy impulzust (bcf-bsf-bcf), akkor a 683 INT(GP0 megszakítását tudom aktiválni. Amikor kipróbáltam (az impulzus kiadásakor jeleztem az LCD-n, illetve LED villogtatás GP1-en), igen nagy időzítési eltéréseket tapasztaltam.
Egyelőre nem látok hibát sem a kapcsolási rajzon, sem a forráskódban! Gondolom, sejted, hogy miért....
A kommunikációhoz használhatsz USART, SPI vagy I2C protokolt, valószínűleg az első a legkönnyebb, hiszen 1 dróton elmegy...
Üdv.
Még nincs kész 100% az áramkör, ezért még nincs kapcsi rajza. Az RB4 bemenet, RB5 kimenet, illetve GP2 bemenet GP1 kimenet. Mellékelem a program-részleteket: ADÓ 12F683 Idézet: „ ; ez a progamrészlet a megszakítás rutinban van banksel GPIO call adc0 ; elvégzi az AD átalakítást, az eredmény az "adfelso" regiszterben van bcf GPIO,1 bsf GPIO,1 bcf GPIO,1 ; most adja a jelet a vevőnek, hogy indul az adatátvitel btfsc adfelso,7 bsf GPIO,1 btfsc adfelso,6 bsf GPIO,1 btfsc adfelso,5 bsf GPIO,1 btfsc adfelso,4 bsf GPIO,1 btfsc adfelso,3 bsf GPIO,1 btfsc adfelso,2 bsf GPIO,1 btfsc adfelso,1 bsf GPIO,1 btfsc adfelso,0 bsf GPIO,1 ; bitenként nézi adfelso-t, ha 1 a bit, akkor bsf; előzőleg megpróbáltam btfsc-bsf után bcf-eket írni, de az eredmény mindig nulla volt return” VEVŐ Idézet: „ bcf PORTB,5 bsf PORTB,5 bcf PORTB,5 ; ez a jel a 12F683 INT/GP2 bemenetén megszakítást generál ; clrf atvitel ; btfss PORTB,4 ; goto $-1 ; most vár, hogy a 12F683 elvégezze az AD átalakítást, és jelezzen, hogy kész btfsc PORTB,4 bcf atvitel,7 btfsc PORTB,4 bcf atvitel,6 btfsc PORTB,4 bcf atvitel,5 btfsc PORTB,4 bcf atvitel,4 btfsc PORTB,4 bcf atvitel,3 btfsc PORTB,4 bcf atvitel,2 btfsc PORTB,4 bcf atvitel,1 btfsc PORTB,4 bcf atvitel,0 ; most egyesével vizsgálná RB4-et, és beállítaná "atvitel" regiszter bitjeit, amit ki lehet jelezni az LCD-n ” Folyamat: 628A RB5-ön ad egy felfutó impulzust 683 GP2/INT bemenetére, és vár a visszajelzésre. 683 megszakítást indít, amelyben elvégzi az AD átalakítást, és felfutó impulzussal jelez 628A-nak, hogy indulhat az olvasás. Bitenként adagolja az értéket, utána nem csinál semmit; vagyis vár a kövi megszakításra. 628A bitenként vizsgálja a beolvasott byte-ot, ez szerint jelzi az LCD-n, melyik bit 1 és melyik 0. Ezek a program-részletek. Az AD átalakító működik, az LCD kijelzése szintén, mindkét miki 4 MHz kristállyal megy, ezért (elvileg) azonos a műveleti idejük. fejesg
most így néz ki az áramkör...
Egy fénykép nem sokat mond...
A két chip közötti kommunikációra én az I2C protokollt javaslom. Nem nehéz szoftveresen megoldani, ha a neten szétnézel, találsz kész rutinokat hozzá. Az RS232 soros portot sokkal bonyolultabb szoftveresen megoldani, illetve aszinkron volta miatt kényes az időzítésre. A lényeg, hogy az I2C SCK lába megszakítást okozzon a slave egységnél, akkor biztosan nem lesz gubanc a kommunikációban. Az A/D konverzió indítása történhet megszakítási rutinban, de semmiképp se várj ott a befejezésére. A főprogram ráér várni erre. Arra sose alapozz, hogy két kontrollernek ugyanakkora az utasításvégrehajtási sebessége!
Szia Potyo!
Köszi a hozzászólásodat, az egyik kérdésemet megválaszoltad: nem lényeges mindkét mikin a kristályoszcillátor. I2C: olvastam tegnap dr.Madarász László írományát, illetve a Kandós "puskát" az I2C-ről; miszerint egy óravonal és egy adatvonal van. A Master lenyom az óravonallal szinkronban egy 7+1 bites "periféria-azonosító" adatsort (a 8.bit az adatforgalom iránya). Jól értelmezem? Esetemben: végülis ez az első 8 bit elhagyható, mert csak egy "periféria" lesz, egyetlen adatiránnyal. Kérlek írj valami rövid mintarutint (adónak-vevőnek), hogyan tudom az adatokat átküldeni? fejesg Idézet: „Kérlek írj valami rövid mintarutint” Jól értem? I2C szoftveres mintaprogram, mindezt röviden? ![]() Potyo, ha van időd, akkor nekem meg egy USB kezelő programot írj 16F-re, de rövid legyen! ![]()
Akkor neked egy SPI kellene inkabb - az is synchron-serial kommunikacio mint az I2C. De amugy nem egeszen ertem mire kell neked, es mi lesz a ket kontreoller feladata. Ha az egyik csupan AD-zik akkor jobban jarnal egy AD modullal amivel SPI-n keresztul tudsz kommunikalgatni.
A programmal van néhány probléma:
1. A megszakítás rutinban nem illik litániákat írni. Sok értelme nincs is annak, hogy megszakítást használj addig,amíg megszakítás nélkül (polling) is megoldható a feladat. 2. Csak bsf GPIO,1 utasítások sorjáznak, hosszú tömött sorban. Mitől is fog akkor lemenni nullába??? 3. Az egyes bitek kiküldését valami normális időskálán próbáld elhelyezni! Tehát iktass be bitenként késleltetést, mert különben a másik PIC-nek nem lesz ideje elkapkodni az adatokat. Pl.számold ki,hogy 9600 baud esetén mennyi késleltetés kell két bitváltás között! Nem néztem utána az adatlapon, de a fogadó oldalon ugye a hardveres UART modult RX lábát használod??? (könnyebb az élet, ha a fogadást a HW lekezeli) I2C-re ne hagyd magad rábeszélni! ![]() Idézet: „Nem néztem utána az adatlapon, de a fogadó oldalon ugye a hardveres UART modult RX lábát használod???” Utánanéztem: persze, hogy nem azt a lábat használod! Ennek így mi értelme van??? ![]()
SPI-szerű küldésre (adatbit és egy szinkron órajel billegtetése) használható az alábbi programrészlet, melyben a kiküldendő 16 bites adat a DataHi és DataLo memóriarekeszekben van. Egy Bitcount nevű memóriarekeszt pedig számlálásra használunk.
SCL az órajelnekhasznált láb sorszáma, SDA pedig az adaté...
Ha az adatokat egy hasonlóan lassú (4 MHz) PIC kapdossa, akkor a megjelölt helyekre késleltetést kell tenned. Fogadásnál az SCL lábon a felfutást kell kivárni, majd az SDA állapotát "berotálni". ![]()
Ezt írtad:
Idézet: „Kérlek írj valami rövid mintarutint (adónak-vevőnek), hogyan tudom az adatokat átküldeni?” Nem kell Potyót fölöslegesen dolgoztatni, itt található egy szoftveres I2C master implementáció. A szoftveresen kezelt slave valamivel bonyolultabb, nem is találtam még rá jó programot. Egyszer itt itt nézelődtem, a CCS-ben is turkáltam, de a CCS fordító szerintem hibás kódot generál. Aztán nekiláttam írni egyet, de elment tőle a kedvem, amikor kiderült (a szimulációs kísérletekből), hogy 4 MHz-es PIC-cel a minimális 100 kbites szabvány sebességet sem tudom realizálni, csak a kb. felét.
Szia Jcserny!
Nos, a rutin elején kinullázom az egész regisztert, és akkor írok 1-et, ha szükséges. Ezért nincs bcf. Egyébként nem USART-ot használtam, ezért került felhasználásra (véletlenül...) az RX-TX csati. Nagyon köszönöm a progrészletet, éppen ezt szerettem volna elérni a fórumban. Ha már látom, hogyan épül fel egy rutin, könnyebb a kísérletezés. Azért az I2C-t választottam, mert van ugyan egy MCP3002 típusú AD konverter IC, de annak 4 I/O kell, ennek meg 2 elegendő. Továbbio kísérleteimet (2 16F628A között) természetesen soros kommunikációval szeretném folytatni. Előbb azonban legyen AD adatom.............. fejesg ![]() |
Bejelentkezés
Hirdetés |