Fórum témák

» Több friss téma
Fórum » PIC - Miértek, hogyanok haladóknak
Lapozás: OK   1185 / 1320
(#) watt hozzászólása Okt 12, 2014 /
 
PIC18F87J94-el dolgozom. Az MPLAB v8.92 debugger módban hibásan ad vissza egy nagy halom funkció regisztert. Igaz, hogy nem teljesen támogatott a típus, de azért ez elég gáz!
(#) usane válasza watt hozzászólására (») Okt 13, 2014 /
 
Pedig a minap én is avalami hasonlót akartam venni a 14k50 helyett. Nincs benne elég RAM az MC-s könyvtárhoz Nem tudom mikor jött ki, de lehet, hogy már akkor sem foglalkoztak nagyon a sima ide hozzáfrissítésével, inkább az X-re feküdtek rá. Egyre jobban rá leszünk kényszerülve az X-re.
Nem vitás sok jó funkciója van, de a sima IDE-ből is átvehettek volna ezt-azt az X-be is.
(#) watt válasza usane hozzászólására (») Okt 13, 2014 /
 
Szerintem becsapós, hogy a debuggolás sárgával van jelezve. Ha egy regiszert nem ad vissza rendesen, az nem sárga, hanem piros. Sárga olyan lenne, hogy egy timert nem jól kezel, meg ilyesmi, de alapvető dolgokat így kezelni egyenlő a használhatatlansággal, főleg, ha nem tudod melyikeket adja vissza rosszul. amúgy az IC egész jól sikerült, kivéve a oszciját, ami nagy sebességen nem indul rendesen, de erre van valami az erratában. Néhány probléma van még az ADC-vel, de azzal is együtt lehet élni.
(#) nemgyuri hozzászólása Okt 27, 2014 /
 
Sziasztok!
Soros kommunikáció tesztelésével van problémám. ( PIC16F628A )MPLAB-ban stimulussal birizgálva az Rx lábat sem az RCIF bit nemváltozik, és az RCREG-ben sem jelenik meg semmi sem. A PIC pdf-e szerint állítottam be mindent - legalábbis azt hiszem. Az MPLAB nem kezeli rendesen, vagy a progimban keressem tovább a hibát?
(#) Hp41C válasza nemgyuri hozzászólására (») Okt 28, 2014 /
 
Készíteni kell egy adatállományt. Ld melléklet.
Debugger / Select tool / MpLab Sim.
Debugger / Settings / Uart1 IO lapon Enable Uart1 IO -be pipa, Output Window legyen kiválasztva.
Debugger / Settings / Osc / Trace lapon az órajel frekvencia beállítása.
Debugger / Stimulus / New Workbook lehívása.
A Register Injection fülön az első sorban a Reg / Var mezőben az RCREG kiválasztása, a Data Filename mezőben a létrehozott adatállomány kiválasztása.
Save, majd Apply.
A project újrafordítása, töréspont elhelyezése. Debugger / Run.

Input.txt
    
(#) nemgyuri válasza Hp41C hozzászólására (») Okt 28, 2014 /
 
Köszönöm szépen, így már működik!
Ha jól értem az RB1/Rx pin billegtetésével nem lehet tesztelni az USART-ot. (stimulus - Pin/Register Action fülön próbáltam)
(#) hg6dab hozzászólása Okt 28, 2014 /
 
Sziasztok! Szükségem lenne egy PIC-es kapcsolásra, ami egy USB-s szkenner adatait olvassa be és azt egy HD44xx alapú 4 soros LCD kijelzőn jeleníti meg. Milyen típust javasoltok? Előre is köszi.
Sanyi
(#) watt válasza hg6dab hozzászólására (») Okt 28, 2014 /
 
Szia! Az USB-s szkenner az micsoda (gondolom nem képet szkennel?)? Milyen adatok jönnek róla és milyen felülettel kellene a PIC-hez csatlakoznia?
A hozzászólás módosítva: Okt 28, 2014
(#) hg6dab válasza watt hozzászólására (») Okt 28, 2014 /
 
Jogos, nem fogalmaztam elég pontosan. Vonalkód olvasóról van szó. Betűket, számokat kell csak megjeleníteni.
(#) potyo válasza hg6dab hozzászólására (») Okt 28, 2014 /
 
Akkor valami olyan PIC kell, amiben van USB OTG. Ez 8 bitesben nincs, 16 bitesben talán, 32 bitesben biztosan van. Nézz szét a microchip példakódjai között, mert ezek a vonalkódolvasók sima HID billentyűzetként szoktak a rendszerben megjelenni, és mintha lenne billentyűzetet kezelő példakód.

Fejből a PIC32MX795F512L típust tudom, hogy van benne USB OTG, de itt kereshetsz más típust: Bővebben: Link
A hozzászólás módosítva: Okt 28, 2014
(#) icserny válasza hg6dab hozzászólására (») Okt 28, 2014 /
 
Le kell tölteni a Microchip Applications Library csomagot, és meg kell nézni, hogy az USB Host mintapéldák között milyen támogatott eszközök találhatók. Nálam PIC24FJ256GB110, PIC24FJ64GB004, PIC32MX460F512L, PIC32MX795F512L szerepel, de ez egy régi letöltés, azóta bizonyára vannak újabb típusok is.
(#) hg6dab válasza icserny hozzászólására (») Okt 29, 2014 /
 
Mindenkinek köszönöm a segítséget!
(#) Melphi hozzászólása Okt 29, 2014 / 1
 
Egy kis érdekesség.
(#) szutsgabor hozzászólása Okt 29, 2014 /
 
Lehet nem jó helyen teszem fel ezt a kérdést, ezért ne tépjétek majd le a fejem.
Maga a probléma is elég fura, számomra egyenlőre értelmezhetetlen, de lehet csak én nézek be valamit nagyon csúnyán.
Van egy projektem amiben egy részfeladat egy motor fordulatszám mérése. A motoron egy tárcsa forog, ezen van egy jelölés amit egy résoptó érzékel stb.. CCP capture módját használom a méréshez.
A kód a következő:
  1. int rpm_mes(void)
  2. {
  3.     unsigned long mes_time = 0;
  4.     unsigned int mes_cnt = 0;
  5.     unsigned int mes_cnt1 = 0;
  6.     unsigned int mes_cnt2 = 0;
  7.  
  8.     TMR1H = 0x00; //Timer1 fels? bájt nullázása
  9.     TMR1L = 0x00; //Timer1 alsó bájt nullázása
  10.  
  11.     T1CONbits.TMR1ON = 1; //Timer1 léptetésének indítása
  12.     while(!PIR1bits.CCP1IF) //CCP interrupt flag figyelés
  13.     {}
  14.     mes_cnt1 = (CCPR1H << 8) + CCPR1L;
  15.     PIR1bits.CCP1IF = 0; //IF nullázása
  16.  
  17.     while(!PIR1bits.CCP1IF) //CCP interrupt flag figyelés
  18.     {}
  19.     mes_cnt2 = (CCPR1H << 8) + CCPR1L; //Értékek összeadása
  20.     PIR1bits.CCP1IF = 0; //IF nullázása
  21.  
  22.     if(mes_cnt2 > mes_cnt1)
  23.     {
  24.         mes_cnt = mes_cnt2 - mes_cnt1;
  25.     }
  26.     else if(mes_cnt1 > mes_cnt2)
  27.     {
  28.         mes_cnt = (65535 - mes_cnt1) + mes_cnt2;
  29.     }
  30.  
  31.     mes_time = 37500000 / mes_cnt;
  32.  
  33.     return mes_time;
  34. }


Tudom, lehetne egyszerűbben is megírni és a pollingolás nem túl elegáns.
Amikor először próbáltam a programot teljesen hibás értékeket mért. USART modullal elküldtem PC-re az ebben a függvényben használt változók értékeit. Kiderült, hogy a mes_cnt1 és mes_cnt2 változókba néha negatív számok kerülnek, és ezek okoznak furcsa dolgokat a számolásban.
A nagy kérdés az, hogy mégis egy unsigned int változóba hogyan kerülhet negatív érték, pláne úgy, hogy a CCPR1L és H értékeit rakom bele, amik pedig a timer1 értékét tárolják ami 0-tól 65535-ig számol.
Próbálkoztam, olyannal is, hogy ha valamelyik változó értéke negatív vegye az abszolút értékét és USARTon küldjön egy karaktert. Ennek ellenére továbbra is jöttek negatív értékek és a feltétel teljsülését jelző karakter meg nem jött meg, tehát a program nem érzékelte ezeket az értékeket negatívnak. Azt nem hiszem, hogy usart küldés miatt válnának ezek a számok negatívvá, mert kiszámított fordulatszámot LCD-re is kirakom és ott is ugyan ez látszik.
Én már nagyon abszurdnak érzem ezt a szituációt és nemlátom, hogy min csúszik félre a dolog.
(#) proba válasza szutsgabor hozzászólására (») Okt 29, 2014 /
 
Negatív szám = legfelső bit magas. Ettől kezdve a többi értelmezés kérdése. Ha arra vagy kíváncsi milyen adat jött, lehet egy terminál ablakban hexa nézetben látod amit küldtél. A többi már átesik valamiféle értelmezésen.
(#) szutsgabor válasza proba hozzászólására (») Okt 29, 2014 /
 
De az USART karaktereket küld, ha hexa nézetben nézem akkor a karakterek ascii kódját látom hexadecimálisan, ami mondjuk a -1234 esetében 2D 31 23 33 34, de ez azt jelenti, hogy a pic ezt az 5 karaktert tolta ki az usarton keresztül. De azért nem gondolom, hogy ez az értelmezésen múlna, mert pl kijön az hogy:
mes_cnt1=-9785
mes_cnt2=23548
mes_cnt=33333
mes_time=1125
ez egy konkrét mért érték. a pic jól számolt a kód alapján ha valóban negatív szám van a mes_cnt1 változóban. És itt épp helyesen is mérte a fordulatszámot, a kapott érték valós. tehát ebből gondolom, hogy a pic is negatívnak látja ennek a változónak az értékét.
(#) watt válasza szutsgabor hozzászólására (») Okt 29, 2014 /
 
Nincs olyan, hogy a PIC negatívnak lát egy számot. Ugyanaz a bitminta lehet negatívnak értelmezett, vagy pozitívnak. Te döntöd el, hogy minek akarod értelmezni, és ennek megfelelően deklarálod a változót. De ez igencsak nem haladó kérdéskör...
(#) proba válasza szutsgabor hozzászólására (») Okt 29, 2014 /
 
Akkor már a soros portra küldő rutinod is rossz. Azokból a regiszterekből te csak két hexadecimális számot kaphatsz. És előjele az tuti nincs, max a legfelső bitje 1, amit valami negatív számnak tekint, és úgy küld el neked.
(#) szutsgabor válasza watt hozzászólására (») Okt 29, 2014 /
 
Lehet akkor tényleg én vagyok a debil és alapvető dolgokat nem látok vagy nem értek, de hogyan magyarázod azt hogy van két regiszter:
TMR1H és TMR1L amelyek értéke 0b00000000 0b00000000 tól 0b11111111 0b11111111 ig változhat. Ennek a két regiszternek a tartalmát egy RC2 lábra érkező felfutó él hatására átmásoljuk a CCPR1H és CCPR1L regiszterekbe. innentől kezdve ebben a két regiszterben 0b00000000 0b00000000 tól 0b11111111 0b11111111 ig fog valami adat tárolódni emelett van egy unsigned int típusú változóm aminek értéke 0b0000000000000000 és 0b1111111111111111 között változhat. Ebbe a változóba beleteszem a két regiszter értékét. Először a CCPR1H tartalmát teszem bele a 16 bit felső 8 bitjébe. majd a CCPR1L tartalmát a 16bit alsó 8 bitjébe. innentől kezdve az unsigned int változóm 16 bites memória területén van benne a két nyolc bites regiszter tartalma összeolvasztva binárisan. Az unsigned int változóban tárolt 16 bites adatot előjel nélküli számnak értelmezi a fordító vagyis a benne eltárolt bináris érték decimálisan kifejezve 0 és 65535 között vehet fel egy értéket.
Ezek után hogyan értelmezi ezt bármi is negatív számnak? ki értelmezi annak, hogyan és miért?
(#) potyo válasza szutsgabor hozzászólására (») Okt 29, 2014 /
 
A soros portra és az LCD-re kiíró rutinod értelmezi negatívnak. Ha pl. a printf("%d", mes_cnt1) formában írod ki. Használj %u-t, és nézd meg úgy.
(#) watt válasza szutsgabor hozzászólására (») Okt 30, 2014 /
 
Miután te írod a programot(feltételezem), te értelmezed, jeleníted meg előjelesen, vagy nem előjelesen. Ez a te választásod kellene legyen. Ha olyan rutint használsz, amit nem ismersz, és az előjeles típusként fogadja a számot, akkor az úgy fog megjelenni. Mint írtuk, a bitminta azonos, csak az értelmezési tartomány más. Ahogy potyo írta, az LCD rutinod előjeles típust fogad. Ezt bizonyára te állítottad be így, vagy ha nem te írtad, akkor az aki írta. Nézd meg a prototípusát a függvénynek, ott látni kell. Ha neked ez nem felel meg, át kell írnod a megjelenítést, vagy olyan függvényt kell hívnod (ha létezik), ami nem előjeles típust fogad. A PC-n való megjelenítés teljesen hasonló kérdés. Ha egy 16bites előjeles számot a PC-n 32bites integerbe teszel, akkor nem lesz már előjeles, csak akkor, ha 16bitesbe. viszont ha egy unsigned int PIC-es változót beteszel egy 16 bites integer PC változóba, akkor előjelessé konvertáltad, de ha 32bitesbe, akkor pozitív egészként fog megjelenni (hogy miért , azt gondolom meg tudod fejteni). A változók típusával döntöd el, hogy a számot milyen értelmezési tartományban akarod látni. Nézd meg, hogy melyik típusnak milyen az értelmezési tartománya!
(#) Hp41C hozzászólása Okt 30, 2014 /
 
Valami készül a PIC32 -esek körül: Bővebben: Link Csak az a kérdés, mennyit kell várni a programozási leírás megjelenésétől a forgalomba hozatalig...
(#) watt válasza Hp41C hozzászólására (») Okt 30, 2014 /
 
Szia!
A kérdésed jogos, bár ha azt vesszük ez a leírás megjelenhetett a már kapható hibás példányokhoz is.

Szerinted ki fogják javítani a belső osci hibáját, vagy marad a külső órajeles történet? A többi hibáról nem is beszélve. Kicsit kiábrándított, pedig nagyon vártam!
(#) aroxol hozzászólása Okt 30, 2014 /
 
Sziasztok!

Van egy asm programom amit rendszeresen 18-as pic-be programozok. Lehetséges e hogy valamilyen egyedi, minden fordítás után más azonosítót tegyek az epromba (nem a programba írva), beírni nehézkes lenne a nagy darabszám miatt. Cél az lenne hogy utólag azonosítható legyen mikor lett felprogramozva. Pl. időbélyegző, vagy valami más?
(#) bbalazs_ válasza aroxol hozzászólására (») Okt 30, 2014 /
 
Minden FORDITAS vagy minden PROGRAMOZAS?
Ha programozas es a progizo nem tudja, akkor nem fog menni.
Ha forditas, akkor a fordito batch-ba be tudsz illeszteni forditas ELOTT egy kis progit, ami megnyitja a forrasnyelvi assemblyt, egy (fix) helyre beirja a kivant ertekeket es ezutan EZEKKEL az ertekkekkel fordul le a progi, lesz belole hex, ami mar tartalmazza az egyedi azonositot es ezt lehet beprogramozni.
(#) aroxol válasza bbalazs_ hozzászólására (») Okt 30, 2014 /
 
Mplab-al fordítok, programozok. Minden programozás után visszaolvasok hogy le van e zárva, így újból fordítanom is kell. Ekkor kellene egy új azonosító bele.
(#) nedudgi válasza aroxol hozzászólására (») Okt 30, 2014 /
 
Én írtam két Autoit! alkalmazást, amit az Mplabbal minden fordítás előtt és után meghívatok (Custom build).
Az első alkalmazás létrehoz egy "buildtime.h" fájlt, aminek kötött formátuma van, az első sor kötelezően egy verziószám. Ezt a fájlt lehet "include"-dal meghívni a forrásban, ahol beépíthető a lefordított programba. Sikeres fordítás után megnöveli a verziószámot, és egy tömörített, archív fájlt hoz létre a projekt összes állományából.
A hozzászólás módosítva: Okt 30, 2014
(#) bbalazs_ válasza nedudgi hozzászólására (») Okt 30, 2014 /
 
Na, ez meg jobb. Szerintem ki lehet a datumot/ idot iratni file-ba, aztan beincludeolod a sajat progidba. Igy meg modosito sem kell.
(#) attika hozzászólása Nov 2, 2014 /
 
Sziasztok,egy olyan kérdésem lenne,hogy 3 voltról működhet a pic?
Ezt a hőmérőt szerettem volna megépíteni,de sajnos nem akar elindulni.
(#) potyo válasza attika hozzászólására (») Nov 2, 2014 /
 
Elvileg kellene mennie a belső oszcillátorról már 3V-ról is. Valami más lesz a gondja.
Következő: »»   1185 / 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