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   840 / 1210
(#) cross51 válasza pajti2 hozzászólására (») Aug 21, 2016 /
 
Az XC hibákat nem értem teljesen. Én amióta C-zek XC8/XC16/XC32 így szépen mindegyiken végigmentem és egyikben én nem igazán találkoztam hibával, bár én nem használok sose ilyen pherip libet meg az ofc-t nem tudom mit jelent, te milyen hibákra gondoltál?

Az X más tészta az tényleg ..., de hát Javás sokat nem kell tőle várni, mondjuk, ha van alatta szekér akkor azzal sincs gond.
(#) Lamprologus válasza Zsora hozzászólására (») Aug 21, 2016 /
 
A CCS-C parancsok között nem találtam olyant amivel a jelzőbíthez hozzáfénék, ebből (szerintem jogosan) én arra következtetnék, hogy azt automatikusan kezeli. De majd megpróbálom közvetlenül állítani ... talán sikerül!
(#) Lamprologus válasza kissi hozzászólására (») Aug 21, 2016 /
 
Hát én is pont ezt szeretném!

Beállítom a Timer2-t ...
Engedélyezem a globális megszakításokat ...

Bekövetkezik egy esemény, aminek hatására beállítom ( vagy épp nullázom) a számláló kezdő értékét, majd engedélyezem a Timert ...

A Timer megszakításban végrehajt pár dolgot, majd tiltja önmagát... és várja hogy egy újabb bekövetkező esemény hatására újból engedélyezzem és tegye a dolgát ...

azt várnám, hogy akkor hajtja végre a parancsokat amikor túlcsordul a számláló ... de sajnos nem ... már akkor lefut amikor engedélyezem.

Az én elgondolásom hibás? Nem így kéne működnie egy számláló interruptnak?
(#) don_peter válasza Kapagerenda hozzászólására (») Aug 21, 2016 /
 
Ne aggódj, mind így kezdtük..
Lenyúlni meg senki nem fogja, ezek alapok.

A regiszterek beállítása pedig nagyon fontos, nem hagyhatod ki vagy hibás instabil működést eredményez.
De te tudod..
(#) Hp41C válasza Lamprologus hozzászólására (») Aug 21, 2016 /
 
Nézd meg, milyen utasításokat tesz a kódba a fordítód! Szerepel benne a megszakítási ok (TMR2IF) törlése? Ha nem, írd bele a programba.
(#) Lamprologus válasza Hp41C hozzászólására (») Aug 21, 2016 /
 
Azt hiszem sikerült a dolog ... Néklületek és egy jó logikai analizárot nélkül biztos sokkal tovább tartott volna! Köszönöm!!!

Milyen szerencse, hogy pár hete már kitárgyaltuk a regiszterek közvetlen elérésének lehetőségét CCS-C alól ...

De azért ha kérhetném csekkolja le valaki hogy jól csináltam-e!

PIC24FJ256GB106 IFS0 regiszter T2IF bitet töröltem.

Headerbe:
#word MCU_IFS0 = 0x084
#bit MCU_T2IF = MCU_IFS0.7

main.c-be:
MCU_T2IF=0;

Sajnos nekem még az angol leírás is kinai, hát még az asm!
A hozzászólás módosítva: Aug 21, 2016
(#) Poostmaster válasza cross51 hozzászólására (») Aug 21, 2016 /
 
Hátha érdekel valakit.
Gondosabb tanulmányozás után rájöttem, miért van a két láb összekötve.
A 629-esnek csak a GP4-en van megszakítása ezért, ha váltani akarok a programok között, akkor marad a 12 LED-es megoldás. (
(#) Hp41C válasza Poostmaster hozzászólására (») Aug 21, 2016 /
 
Ha a MCLR funkciót letiltod, a MCLR láb bemenet lesz, amit a villogtatási rutinban lekérdezve (prell mentesítve) megoldhatod az üzemmód váltást.
(#) diablo válasza cross51 hozzászólására (») Aug 21, 2016 /
 
Találós kérdés XC8 1.32-hez (letesztelni vele nem ér). Milyen szöveget küldök az LCD-re? Hp41C ki van zárva a játékból.
(lcd címzést, delay-eket tessék odaképzelni)

  1. unsigned char function(unsigned char var)
  2. {
  3.  if(var == 1) return 1;
  4. }
  5.  
  6. unsigned char x = 1;
  7.  
  8. void main(void)
  9. {
  10.  while(1)
  11.  {
  12.    if(function(x))
  13.    {
  14.      printf("text1");
  15.      x = 0;
  16.    }
  17.    else printf("text2");
  18.  } // while
  19. } // main


Aztán lehet csak én nem értettem elsőre a miértjét.
A hozzászólás módosítva: Aug 21, 2016
(#) Hp41C válasza diablo hozzászólására (») Aug 21, 2016 /
 
Miért???
Egyszer Aignes Szilárddal volt egy beszálgetős műsor, amiben megkérték, jósolja meg milyen idő lesz akkor, amikor leadják a rögzitett felvételt. Egy kérdése volt: Hány órakor kezdődik majd. Este 8 -kor. Aigner válasza: Sötét lesz.

Az első 4 karakter: "text"

Egyébként warning -ot kellene kapnod:
4. sor: Van olyan ág a függvényben, aminél nincs megadva a visszatérési érték.
(#) sonajkniz válasza Poostmaster hozzászólására (») Aug 21, 2016 /
 
Én már elkészültem a saját verziómmal, és igazolódott az alapfeltevésem. Ha egyszerre csak egy ledet akarsz kapcsolni, gond nélkül megy a 20 led, és a program sem túl bonyolult. De ha (látszatra) többet, akkor már multiplexelni kell, és ott már túl sok a 20 led. A 12-vel megy szépen.Bővebben: Link
(#) pajti2 válasza Poostmaster hozzászólására (») Aug 21, 2016 /
 
Ha a főprogramod mSec nagyságrend környékén pörög, és csupán emberi reflex sebességű, amit vizsgálni akarsz, semmi szükséged a megszakításra. A 20 led maradhat.
(#) diablo válasza Hp41C hozzászólására (») Aug 21, 2016 /
 
Most erre reagálva jól be kellene másolnom a több ezer soros LCD könyvtáramat is, mert ugye fő a pontosság és anélkül nem lehet megérteni a feladatot. Úgyhogy troll off, please!!!

Kapok is, de attól még egy standard fordító nem így működik. Értelemszerűen 0-val kellene visszatérnie ha nem teljesül a return 1-hez szükséges feltétel. Márpedig itt nem teljesül, mivel a blokkból kilépve megszűnik a var változó, így a következő híváskor az x = 0 miatt nullát kellene felvennie és nullával visszatérnie. De nem ezt teszi.

Onnantól meg hogy leírtad a hibát, értelmetlenné vált a fejtörő másoknak.
(#) nagym6 hozzászólása Aug 21, 2016 /
 
Üdv. PIC18F46K22 belső eeprom írásakor mennyi időt kell várni írásra, nem találok adatlapon erre utalást. A régi pld. 16F648-nál 20ms volt, talán a 18F46K22-nél is annyi?
Köszönöm.
(#) Pali79 válasza nagym6 hozzászólására (») Aug 21, 2016 / 1
 
Adatlap 443. oldal. max. 4 ms/byte
(#) nagym6 válasza Pali79 hozzászólására (») Aug 21, 2016 /
 
Köszönöm, így már meg is találtam.
(#) proli007 válasza Hp41C hozzászólására (») Aug 21, 2016 /
 
Szegény Szilárd nem "Ágnes" volt, hanem Aigner. Ha már nincs az élők sorában, legalább a nevét írjuk le pontosan..
(#) Hp41C válasza proli007 hozzászólására (») Aug 21, 2016 /
 
Köszönöm az észrevételt... Másodszorra jól írtam.
(#) cross51 válasza diablo hozzászólására (») Aug 21, 2016 /
 
Idézet:
„standard fordító nem így működik”


Mit nevezünk standard-nak én mikor szóba jön a X vagy fordítók mindig a VS C#/C++, hozom elő ott nem warning-ot kapsz, ha csak if ágból return-ölsz hanem errort, persze egy gép nem egy PIC, de nekem a VS az etalon , de mibe tart odaírni, hogy else retrun 0; vagy, ha több érték van egy switch és a case-ek be return val;
és a switch után vagy default-ba return 0; Persze ezt lehet megteszik helyetted a szuper okos fordítok CCS/MikroC stb..., de ez ha tudod mit akarsz (nálam) azt szokta csinálni amit kell.
(#) cross51 hozzászólása Aug 21, 2016 /
 
Kadarist szólt, hogy inkább itt tegyem fel a kérdésem, ne a Elektronikában kezdők kérdései-ben.

Egy 3.3V-os PIC32-höz szeretnék illeszteni egy AD9850-est (ebay). Az ebay-es verzióban 125MHz-es kvarc van és a dds csak 5V-on tud működni 125MHz-en, de 5V-on 3.5V a logic low.
Én arra gondoltam, hogy egy I2C Level Shifter-ből kiindulva raknék három ilyen FET-es illesztés a D7, W_CLK, FQ_UD lábra de a low side-os 10k-ot kihagynám ez így működőképes?
(#) Tasznka válasza cross51 hozzászólására (») Aug 22, 2016 /
 
Szia!
Mindegyikre kell szintillesztés,mert 3,5V-tól garantálja a magas szintet 5V-nál.
Az FQ_UD-re kell majd felhúzó(kb. 10k,az 5v-os részen),bár lehet,hogy a panelen már van,így panel alapján nem tom. És a reset is ki van vezetve,arra figyelj!.
(#) ha1drp válasza cross51 hozzászólására (») Aug 22, 2016 /
 
Az említett modul oszcillátora 3.3v-os. Szinte egy-két hónap után tönkremegy, ha 5 voltról járatod, ahogy azt már többen leírták. Illetve én is ezt tapasztaltam. Az egész modul egyértelműen 3.3 voltos rendszerhez készült, csak hát úgy nem lehet eladni az arduinohoz...
Az AD9850 3.3 voltról pedig vígan elmegy akár 150MHz-en is tapasztalataim alapján.
(#) Lamprologus hozzászólása Aug 22, 2016 /
 
UART kommunikációval kapcsolatban kérdeznék ...

PIC24 hardweres port. Amíg adatokat küld a PIC , addig leáll a főprogram futása, mindaddig amíg az összes adatot ki nem küldi. Gondoltam azért mert nincs beállítva puffer ...
Viszont, ha beállítom, hogy legyen adási puffer, akkor meg nem küldi ki az adatokat a vonalra.

Mikor üríti a PIC a puffert? Ha megtelt?

Ha bejövő puffert is beállítok akkor mikor keletkezik megszakítás?
(#) cross51 válasza Lamprologus hozzászólására (») Aug 22, 2016 /
 
Mit értesz az alatt, hogy legyen adási puffer? pl.: az UART modulban van egy FIFO, vagy DMA.
(#) Lamprologus válasza cross51 hozzászólására (») Aug 22, 2016 /
 
CCS-C-ben valahogy így néz ki amire gondolok:

  1. #use rs232(UART2, baud=9600, stream=UART_PORT2)
  2.  
  3. #use rs232(UART1, baud=9600, RECEIVE_BUFFER=256, TRANSMIT_BUFFER=256, stream=UART_PORT1)
(#) cross51 válasza Lamprologus hozzászólására (») Aug 22, 2016 /
 
Ja akkor te ilyen okos fordítót használsz.
Az a baj, hogy én ezt a fordítót nem ismerem, de nagyon sokféleképpen meg leget oldani a dogot, hogy ne fogja a vegyen el időt a főprogramtól.
A legegyszerűbb, ha fogsz két tömböt és az rx és tx if-et nézed megszakításban mikor rx/rx if van akkor a bufferba ba beírod az adatot (persze a tömbön kívülre mutatást, main ne férjen hozzá ha adat mozog stb.. ezeket le kell kezelni).
A másik lehetőség nem tudom milyen PIC24-et használsz, de esélyes, hogy van benne DMA azzal a legegyszerűbb és apróbb időpillanatokon kívül nem is fogja a processzor időt. De, ha van is DMA a PIC-ben az nem tudom hogy néz ki kódilag CCS-ben.

Nem akarok beleszólni, de biztos, hogy ez a fordító a tuti, kicsit arduinos csengése van...
Ha csak hobbi nem szóltam, de ha valami komolyabb szerintem mindig az a legbiztosabb, ha te írogatod a függvényeket, mert az tuti, hogy azt csinálja amit kell.
Persze ez csak személyes vélemény, úgyhogy ha neked ez tetszik használd "egészséggel"
A hozzászólás módosítva: Aug 22, 2016
(#) usane válasza Lamprologus hozzászólására (») Aug 22, 2016 /
 
Hát az a 256 az igencsak szoftveres buffer, mert a pic24-esek hardveres FIFO-ja emlékeim szerint 9 bites és 4 szint mélységű( 5 a TSR regiszterrel együtt) és bájtonként mindend stop bit után küldi az adatot, illetve TX regiszterbe való töltés befejezéséig nem indul.A szoftvereset meg úgy tudod kihámozni ha átnézed az általad használt fordító könyvtárát és kimazsolázod belőle a működését. Ezt az "Amíg adatokat küld a PIC , addig leáll a főprogram futása" dolgot nem egészen értem, mert akár buffer nélkül is meg lehet oldani, hogy menjen addig a főprogram, ha figyeled megszakításban, hogy mikor lehet a következő adatot tölteni, persze nem tudom mennyi adatról van szó, és közben mit kell csinálni még a PIC-nek. Ehhez viszont meg kell írnod a saját UART kezelő rutinodat, és nem a ki tudja hogy működő beépítettet használni. Ha még mindig PIC24FJ256GB106-ról van szó sajnos abban nincs az UART-nak DMA elérése.
(#) Lamprologus válasza usane hozzászólására (») Aug 23, 2016 /
 
Kezdek rájönni nem is zavar annyira, hogy kommunikáció közben a PIC nem csinál mást!

Csupán kicsit érdekesnek találtam, hogy hardveres UART esetén is lefogja a PIC-et.
Ha ezt a CCS fejlesztői nem oldották meg, szerintem én sem fogom ... legalábbis egyelőre!
(#) Kari55 hozzászólása Aug 23, 2016 /
 
Sziasztok.

Megépítettem Ezt az órát , működik szépen, csak valami nem stimmel a programban, mert 19:59 után nem 20 órát mutat, hanem 00-át és akkor vált át AM-ről PM-re, de a perceket jól mutatja tovább. Aztán reggel 6 órakor már jól mutatja az időt, és a dátum is jó. (Nem tudom mikor vált vissza, talán éjfélkor)

Valaki segítene, hogy mit kellene átírni a kódban, hogy jó legyen és az " AM PM" sem kellene a 24 órás megjelenítéshez.

Köszönöm előre is.
(#) Saggitarius hozzászólása Aug 23, 2016 /
 
Lenne egy kerdesem LCD-vel kacsolatosan. El tudna magyarazni valaki, a microcontroller hogyan tudja kezelni az LCD-t? Az odaig vilagos, amikor definialjuk a vezerlo vonalakat, de az adatvonalakkal mi a helyzet? Ertem en ez alatt, megadjuk melyik port, de nincs semmi mast, pl azt sem, hogy 4 vagy 8 bites modban hasznalom az LCD-t.
Ha valaki nagyon specifikus akar lenni, XC8 forditot hasznalok, peldakent lehet emlegetni 18F vagy esetleg 16F controllereket, LCD alatt valami egyszeru 2*16 vagy hasonlo alfanumerikus kijelzot ertek.
Következő: »»   840 / 1210
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