Fórum témák

» Több friss téma
Fórum » PIC - Miértek, hogyanok haladóknak
Lapozás: OK   345 / 1320
(#) icserny válasza gulasoft hozzászólására (») Nov 20, 2008 /
 
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)
(#) pepe33 hozzászólása Nov 20, 2008 /
 
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 ?
(#) szilva válasza pepe33 hozzászólására (») Nov 20, 2008 /
 
É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.
(#) pepe33 válasza szilva hozzászólására (») Nov 20, 2008 /
 
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.
(#) menyus válasza trudnai hozzászólására (») Nov 21, 2008 /
 
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.
(#) icserny válasza menyus hozzászólására (») Nov 21, 2008 /
 
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.
(#) menyus válasza icserny hozzászólására (») Nov 21, 2008 /
 
Aha...Köszönöm.
(#) gulasoft hozzászólása Nov 21, 2008 /
 
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.
(#) icserny válasza gulasoft hozzászólására (») Nov 21, 2008 /
 
Idézet:
„zöld lett az icd 2 bár sárga maradt a pickit2 a debug alatt”
A sárga csak annyit jelent, hogy használható, de béta verziós, azaz gyárilag keveset tesztelték.

Mellesleg nem tudom (legfeljebb sejtem...) hogy miért az elavult ICD2-őt nyomja a Microchip. Mit tud az, amit a PICkit2 nem?
(#) menyus válasza trudnai hozzászólására (») Nov 21, 2008 /
 
Köszönöm, áttanulmányozom hátha értek belőle valamit..
(#) menyus válasza trudnai hozzászólására (») Nov 21, 2008 /
 
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?
(#) trudnai válasza menyus hozzászólására (») Nov 21, 2008 /
 
Dehogynem, keresgelj asm-ben es ha talalsz ilyet mi is kivancsiak lennenk ra
(#) menyus válasza trudnai hozzászólására (») Nov 21, 2008 /
 
Szóval nincs, vettem... Köszi
(#) trudnai válasza menyus hozzászólására (») Nov 22, 2008 /
 
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...
(#) googa hozzászólása Nov 22, 2008 /
 
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?
(#) fejesg hozzászólása Nov 22, 2008 /
 
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
(#) fejesg válasza fejesg hozzászólására (») Nov 22, 2008 /
 
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.
(#) icserny válasza fejesg hozzászólására (») Nov 22, 2008 /
 
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...
(#) fejesg válasza icserny hozzászólására (») Nov 22, 2008 /
 
Ü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
(#) fejesg válasza icserny hozzászólására (») Nov 22, 2008 /
 
most így néz ki az áramkör...

IM000422.JPG
    
(#) potyo válasza fejesg hozzászólására (») Nov 22, 2008 /
 
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!
(#) fejesg válasza potyo hozzászólására (») Nov 22, 2008 /
 
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
(#) watt válasza fejesg hozzászólására (») Nov 22, 2008 /
 
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!
(#) trudnai válasza fejesg hozzászólására (») Nov 22, 2008 /
 
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.
(#) icserny válasza fejesg hozzászólására (») Nov 22, 2008 /
 
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!
(#) icserny válasza icserny hozzászólására (») Nov 22, 2008 /
 
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???
(#) icserny válasza icserny hozzászólására (») Nov 22, 2008 /
 
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é...

  1. SendHi:
  2. ; delay
  3.      bcf       GPIO,SCL       ; Clock set to Low
  4. ; delay
  5.      rlf       DataHi,f       ; Rotate next data bit into Carry
  6.      btfsc     STATUS,C       ; Set SDA according to Carry
  7.      bsf       GPIO,SDA
  8.      btfss     STATUS,C
  9.      bcf       GPIO,SDA
  10.      bsf       GPIO,SCL       ; Clock set to High
  11.      decfsz    Bitcount,f
  12.      goto      SendHi         ; Loops for all 8 bits of the high order byte
  13. ; Send low order byte
  14.      movlw     0x08           ; bit count
  15.      movwf     Bitcount
  16. SendLo:
  17. ; delay
  18.      bcf       GPIO,SCL       ; Clock set to Low
  19. ; delay
  20.      rlf       DataLo,f       ; Rotate next data bit into Carry
  21.      btfsc     STATUS,C       ; Set SDA according to Carry
  22.      bsf       GPIO,SDA
  23.      btfss     STATUS,C
  24.      bcf       GPIO,SDA
  25.      bsf       GPIO,SCL       ; Clock set to High
  26.      decfsz    Bitcount,f
  27.      goto      SendLo         ; Loops for all 8 bits of the low order byte
  28.          nop
  29.          nop
  30.      bcf       GPIO,SCL       ; Clock set to Low
  31.      bcf       GPIO,SDA       ; SDA off - just to save energy


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". Tehát a küldés fordítottja...

(#) icserny válasza fejesg hozzászólására (») Nov 22, 2008 /
 
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.
(#) fejesg válasza icserny hozzászólására (») Nov 23, 2008 /
 
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
Következő: »»   345 / 1320
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem