Fórum témák

» Több friss téma
Fórum » PIC kezdőknek
 
Témaindító: Placi84, idő: Okt 3, 2005
Témakörök:
- A PIC ÖSSZES Vdd és Vss (AVdd és AVss) (tápfeszültség) lábát be kell kötni!
- A táplábak mellé a lehető legközelebb 100nF-os KERÁMIA kondenzátorokat kell elhelyezni.
- Az MCLR lábat, 10kohm-mal fel kell húzni a Vdd tápfeszültségre.
- Külső kvarc használatakor 4MHz-ig XT, a fölött pedig HS konfigurációt kell beállítani.
- Stabilizált tápegységet kell használni, a kapcsoló üzemű "telefon töltő" adapterek okozhatnak hibákat.
- Programozáshoz, használj lehetőleg PICKIT2 vagy 3 programozót. Kerülendő a JDM (soros porti) programozó.
- A PIC adatlapja (PDF), tartalmazza a lábak kiosztását és a PIC minden paraméterét. Az adatlap ingyen letölthető!
- Egyes PIC típusoknál az RA4 nyitott nyelőelektródás (Csak lefelé húz L szintre, H szintet nem ad ki!)
- Ha a PGM lábat digitális ki-/bemenetnek használod, az alacsony feszültségű programozási lehetőséget le kell tiltani.
Lapozás: OK   1079 / 1203
(#) Bakman válasza usane hozzászólására (») Márc 23, 2019 /
 
Pontosan nem tudom de egyéb időkből az látszik, hogy a BCD szétbontás tized annyi idő alatt lezajlik, mint a modulo és osztás függvények egymás utáni használata.

y1=x MOD 10
x=x/10
y2=x MOD 10
x=x/10
y3=x MOD 10
stb.
(#) Hp41C válasza usane hozzászólására (») Márc 23, 2019 /
 
A futási idő nagyban függ az osztás megvalósításától:
- 16 bit / 8 bit osztás: számjegyenként kb 16 -szot fut le egy 16 bites kivonás és esetleg egy összeadás valamint 1 léptetés.
- Sorozatos kivonás: max 6535 -ször fut le a 16 bites kivonás és az esetleges 16 bites összeadás. Szerencsésebb előbb 10000 -et, majd 1000 -et, majd 100 -at és végül 10 -et levonogatni. Ekkor 59999 esetén kb. 40 kivonás kell, de ekkor a kód hosszú.
- A belinkelt BCD -re alakítás egyszerre csinálja meg a 10 helyiértékre és csak 32 szer fut le egy 5 -ös ciklust. Ráadásul "skálázható", azaz átírható rövidebb szó hosszúságra (8, 16, 24 bitre), de nagyobbra is.

Más:
A C -ben megírt y1=x % 10; x = x / 10; műveletsor kétszer végzi el az osztást, pedig a hányados és a maradék is előáll már az első végrehajtása után.
(#) rolandgw válasza Hp41C hozzászólására (») Márc 23, 2019 /
 
Idézet:
„A C -ben megírt y1=x % 10; x = x / 10; műveletsor kétszer végzi el az osztást,”

Ha ez a sorrend, akkor igen, viszont a stdlib-ben ott vannak a div(), udiv() függvények. Egy struktúrában visszaadják mindkét értéket.
(#) glaci hozzászólása Márc 23, 2019 /
 
Sziasztok!
Programoznék egy PIC12F683-t és a mikroc a fordításkor hibát jelez a rele =1; sornál.
" Assigning to non-lvalue 'GP0' ". Mi a probléma?

  1. #define alsoszint GP5
  2. #define felsoszint GP4
  3. #define rele GP0
  4.  
  5.  
  6.  
  7.  
  8. void main()
  9. {
  10.  TRISIO=0b0011000;
  11.  CMCON0=0x07;
  12.  ANSEL=0;
  13.  GPIO=0;
  14.    while(1)
  15.    {
  16.        if((alsoszint) && (felsoszint))
  17.        {
  18.           rele =1;
  19.        }
  20.    }
  21. }
(#) glaci válasza glaci hozzászólására (») Márc 25, 2019 /
 
Sziasztok!
Bár a kérdésre nem jött válasz, megoldódott a probléma.
Meg kellett a regisztert is nevezni és úgy már lefordult és működik is az áramkör. Vagyis a portra való hivatkozás a következő: GPIO.GP5 és így tovább.
(#) Pali79 hozzászólása Márc 29, 2019 /
 
Sziasztok!
Két PIC között szeretnék hardveres SPI kommunikációt összehozni, de valahogy nem sikerül a lényegét felfognom. Csináltam már hasonlót korábban, de ott digitális potmétert kezeltem SPI-vel és nem számított, hogy mit küld a szolga, csak a küldött adat volt a fontos, a szolga végrehajtotta a feladatot és kész.
Most viszont az egyik PIC által mért 2db ADC értéket kellene fogadni és kijelezni. Az ADC érték 10 bites, tehát összesen 4 bájtot kellene fogadni és azonosítani valahogy a fogadott adatot, hogy az tulajdonképpen melyik.
Az sem teljesen világos, hogy a master küld egy bájtot és a szolgának is kötelezőn kell küldeni valamit és a masternek fogadni azt, ha kell, ha nem?
(#) superuser válasza Pali79 hozzászólására (») Márc 29, 2019 /
 
Használhatsz UART-ot is ha nem ragaszkodsz a szinkron kommunikációhoz (és van szabad UART).
Egyébként nem kell válaszoljon a SLAVE.
(#) Pali79 válasza superuser hozzászólására (») Márc 29, 2019 /
 
Csak azért lenne érdekes ez most, mert később szeretnék RF modult használni ami szintén SPI-n kommunikál és jó lenne megérteni.
(#) superuser válasza Pali79 hozzászólására (») Márc 29, 2019 /
 
Ha konkrét kérdés van, válaszolok én is ha tudok.
Egyébként meg érdemes megnézni bármelyik SPI-n kommunikáló IC, szenzor, egyéb eszköz adatlapját, szinte minden kiderül belőle.
(#) Hp41C válasza Pali79 hozzászólására (») Márc 29, 2019 /
 
Idézet:
„Az ADC érték 10 bites, tehát összesen 4 bájtot kellene fogadni és azonosítani valahogy a fogadott adatot, hogy az tulajdonképpen melyik.”

Legyen a két 10 bites adat bitjei ABCDEFGHIJ ill. LMNOPQRSTU
4 byte -ba csomagolnám az alábbi módszerrel:
100ABCDE 101FGHIJ 010LMNOP 011QRSTU
A vett adat 7..5 bitjeiből tudhatod, melyik adat melyik helyiértékű darabja.
Idézet:
„Az sem teljesen világos, hogy a master küld egy bájtot és a szolgának is kötelezőn kell küldeni valamit és a masternek fogadni azt, ha kell, ha nem?”

Igen, küldenie kell valamit. A masternek el kell vennie (de eldobhatja) mielőtt új adat vételét indítaná. Próbálj előbb egy SPI EEProm -ot kezelni.
(#) eSDi hozzászólása Márc 30, 2019 /
 
Sziasztok!

Ez szerintetek mitől lehet:
Ha ki szeretném számoltatni a PIC-el az SSP1ADD értékét, akkor az hibásan kerül beállításra (0xFF kerül bele). Ha elé beszúrok egy töréspontot és végig léptetem, akkor jó érték kerül kiszámításra és jól is kerül bele az SSP1ADD-be.

  1. SSP1CON1bits.SSPM = 0b1010; //SPI Master mode, clock = FOSC/(4 * (SSPxADD+1))
  2. SSP1ADD = ((_XTAL_FREQ / 4) / ((unsigned long) Device_Speed * 1000)) - 1;


Próbáltam már minden féle sorrendben, változóba bele írni és onnan az SSP1ADD-be, de mindnél ugyan ez a helyzet. Nem értem hol téved el a dolog.
Tudom a számolásra így figyelmeztetést dob ( implicit signed to unsigned conversion), de ha megszűntetem akkor is ugyan így viselkedik.

PIC16F18857 - MPLABX v5.15 és XC8 v2.05
(#) superuser válasza eSDi hozzászólására (») Márc 30, 2019 /
 
Nem tudom minden C fordítónál így van-e, de amiket eddig PIC-re használtam azok katasztrofálisan kezelik a különböző méretű változókkal végzett műveleteket.
Néha typecast segít, néha az sem.
Szóval
  1. unsigned long dw;
  2. unsigned char  b;
  3. dw = ((_XTAL_FREQ / 4) / ((unsigned long) Device_Speed * 1000)) - 1;
  4. //ha ezen a ponton a dw értéke 0..255 közé esik, akkor jöhet a következő sor
  5. b = dw; //ez a sor valószínűleg elhagyható
  6. SSP1ADD = b;

Egyébként tré megoldás, de annyiszor volt már problémám 32 biten végzett számításoknál, hogy még tovább szoktam bontani:
  1. dw = (XTAL_FREQ / 4);
  2. dw /= (unsigned long) Device_Speed;
  3. dw /= 1000;
  4. dw--;
A hozzászólás módosítva: Márc 30, 2019
(#) eSDi válasza superuser hozzászólására (») Márc 30, 2019 /
 
Valami ilyesmi lehetett. Épp most sikerült megoldanom. Átraktam a számolást az UART adatfogadáshoz és jó lett. Igaz amíg nem nulláztam a változót, itt sem volt jó. Talán még a NOP sem kell, csak benne maradt.

  1. ...
  2. unsigned long Speed = 0;
  3. Speed = (Speed | EUSART_InBuffer[4]) << 8;
  4. Speed = Speed | EUSART_InBuffer[3];
  5. Device_Speed = (unsigned char)(((_XTAL_FREQ / 4) / (Speed * 1000)) - 1);
  6. ...


  1. ...
  2. SSP1CON1bits.SSPM = 0b1010; //SPI Master mode, clock = FOSC/(4 * (SSPxADD+1))
  3. SSP1ADD = Device_Speed;
  4. NOP();
  5. SSP1CON1bits.SSPEN = 1; //Enables the serial port and configures the SDA and SCL pins as the source of the serial port pins
(#) kiszebra hozzászólása Márc 31, 2019 /
 
Sziasztok!

Mitől lehet az, hogy a PIC egyszerűen nem akarja vezérelni az I2C perifériáját? Többek által kipróbált kóddal nem tudom beüzemelni. Egy PIC18F25Q10-ről van szó és hiába állítom a SEN bitet 1-re, nem húzza le az SDA lábat, semmit nem csinál. Próbáltam többféle felhúzóval, többféle SLAVE eszközzel, és a netről egy csomó példaprogrammal, és másik PIC-kel is.
(#) eSDi válasza kiszebra hozzászólására (») Márc 31, 2019 / 1
 
Hali!

Ha már ezt sem hajlandó megcsinálni, akkor a port beállítások körül lesz a gond.
Bemenetnek állítottad az SCL, SDA lábakat? PPS-t beállítottad?
(#) Hp41C válasza kiszebra hozzászólására (») Márc 31, 2019 / 1
 
A 18F25Q10 esetében a SCL1 és az SDA1 "remappable" azaz konfigurálható lábakon van. A lábkiosztásnál van egy apró megjegyzés:
Idézet:
„This is a bidirectional signal. For normal module operation, the firmware should map this signal to the same pin in both the PPS input and PPS output registers.”

Azaz kimenetnek és bemenetnek is be kell állítani ugyan azt a lábat a modul működéséhez. Meg kell csinálni mind a SCL1 mind a SDA1 kivezetésre.
(#) kiszebra hozzászólása Márc 31, 2019 /
 
Köszönöm mindkettőtöknek! Belőttem a PPS biteket és látszik szkópon, ahogy rángatja lefelé a vonalat a master. Több hónapja szenvedek vele. Nagyon hálás vagyok! Tudtam én a megvételkor, hogy túl komoly eszköz lesz ez kezdésnek!
(#) benjami válasza superuser hozzászólására (») Márc 31, 2019 /
 
Konstans számoknál az UL végződés szokott segíteni abban, hogy a fordító ne 16 bites számokkal számolja az általa számolandó értékeket. Pl:
  1. #define _XTAL_FREQ 32768UL

vagy
  1. dw = ((1UL * _XTAL_FREQ / 4)...
(#) eSDi válasza kiszebra hozzászólására (») Márc 31, 2019 /
 
Ha van a PIC-ben PPS, akkor számítani kell rá, hogy megszivat. Sokszor át kell olvasni, az App Note-okat is érdemes megnézni. Nekem utoljára új nyákot kellett gyártatni, mert teljesen abban voltam, mint az előzőleg használt PIC-nél, hogy oda konfigurálom a perifériát, ahová akarom a PPS-el. Aztán kiderült, hogy ennél az MSSP-t csak a PORTB-re vagy C-re lehet.
(#) rolandgw hozzászólása Ápr 1, 2019 /
 
Üdv!
Egy rövid kérdés: telepítettem az MPLAB IPE-t, IDE-t nem. Egy pillanatra felugrik a fekete keretes ablak, de belépni nem tudok és eszközt kiválasztani sem. Így pont az nem derül ki, amiért telepítettem, hogy áll a Snap ez ügyben. Csatlakoztatva kell lennie a programozónak, hogy elárulja az IPE?
Köszönöm!

crop.png
    
(#) eSDi válasza rolandgw hozzászólására (») Ápr 2, 2019 /
 
Windows alatt ki lehet ügyeskedni. Ha nem mozdítod tovább az egeret, akkor ott marad és ha gyorsan legörgeted, akkor már látszani fog.

Egyébként támogatva van, igaz sárgával.
(#) rolandgw válasza eSDi hozzászólására (») Ápr 2, 2019 /
 
Köszi! Feltelepítettem win-re is, de azonnal le is szedtem. 4GB helyet foglal egy mezei programozó szoftver ?!
(#) eSDi válasza rolandgw hozzászólására (») Ápr 2, 2019 /
 
A Java miatt Cross-Platform, így nem hiszem, hogy Linux alatt kevesebb lenne. Másrészt pedig a 4GB nem adatmennyiség manapság. Azért elég sok eszközt kezel ahhoz, hogy meglegyen a mérete. De a Java miatt is akkora, amekkora.
(#) rolandgw válasza eSDi hozzászólására (») Ápr 2, 2019 /
 
Értem én, hogy java, de telepítve van mindkét rendszer alatt. Nem kell minden java-s program telepítésekor hozzászámolni a méretét.
(#) Kera_Will válasza rolandgw hozzászólására (») Ápr 2, 2019 /
 
A Java az már ilyen ... a LIN/WIN meg nem is tud és egymás szoftver készletéről és nem foglalkozik egymással , természetes hogy feltelepül a hiányzó komponens mindkét OS alá
(#) Hp41C válasza rolandgw hozzászólására (») Ápr 2, 2019 /
 
A Java már csak ilyen...
Tegyél fel a Win -re még egy Eclipse -t, valami másik fejlesztőt.. Annyi Java -d lesz, ahány fejlesztőt felteszel. Miért is kellene ugyan az a verzió a programoknak...
Talán részvényük van a háttértér gyártóknál.

A PICkit2 elviszi a Atmel SAM, AtXMega családok kívül az egészet 8 megabyte helyfoglalással. 1 : 500
A hozzászólás módosítva: Ápr 2, 2019
(#) rolandgw válasza Hp41C hozzászólására (») Ápr 2, 2019 /
 
Ebben igazad van, bár a Linux-on nem láttam, hogy másik java-t rakott volna fel. Valójában ezért dühöngök, mert az új avrmega 0-ás sorozatot szeretném programozni, de nem akarok újra drága ICE programozót venni. Ezeknél a friss programozóknál pedig egy év alatt sem sikerült egy nyamvadt UPDI protokolt összehozni.
(#) rolandgw válasza rolandgw hozzászólására (») Ápr 2, 2019 /
 
Most win-es gép előtt vagyok. Revo Uninstaller: Atollic Truestudio (eclipse): 2 GB, MCUXpesso IDE (eclipse): 1.28 GB, STCubeProgrammer(java): 5.98 MB, MPLAB IPE: 4.56 GB....
(#) usane hozzászólása Ápr 5, 2019 /
 
Invalid device ID jelenthet halott PIC-et is?
(#) Bakman válasza usane hozzászólására (») Ápr 5, 2019 /
 
Akárt azt is jelenthet. Vagy azt, hogy nem jó család van kiválasztva menüből.
Következő: »»   1079 / 1203
Bejelentkezés

Belépés

Hirdetés
Lapoda.hu     XDT.hu     HEStore.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