Fórum témák

» Több friss téma
Fórum » PIC - Miértek, hogyanok haladóknak
Lapozás: OK   1003 / 1319
(#) vicsys válasza mekkmesterke hozzászólására (») Júl 20, 2011 /
 
(#) mekkmesterke hozzászólása Júl 20, 2011 /
 
Köszi mindenkinek. Ezzel elleszek sztem
(#) erdoszoli válasza trudnai hozzászólására (») Júl 21, 2011 /
 
Szia!
Köszi a tippet. Úgy néz ki a tesztelgetés hogy 2 gép működik, mindkettőből egy USB->RS485 átalakító és ezek csatlakoznak az eszközömhöz. Egyik gépről vezérlem az eszközt valamilyen adatcsomagokkal a másik gépről pedig ha ugy akarom akkor csak terminálon keresztül ellenőrizni tudom a kiküldött adatcsomagokat és hogy arra mit reagál az eszköz. Ha csak 1 adatcsomagot küldök ki pl ( 0x00 0x05 0x02 0x83 0x00... ) ezt értelmezi ugy hogy 0ás cím 5 bájt hosszú csomag , 2es parancs 0x83 az adat , 0x00 lezárás.. és ha az adatban a legfelső bit 1es akkor villogjon. Namost ha egyik gépről ezt kiküldöm és a másikon csak ellenőrzöm az adatmozgást a 485ös vonalon akkor csak ezt látom semmilyen más adatcsomagot. Ekkor van az Néha hogy a timer nem indul el egyből hanem késik egy kicsit... mintha a kontroller sokáig gondolkozna.Majd továbbra is nulla adatmozgás és egyszercsak el kezd villogni(ez már ugye a timer miatt) Fura vagy fura?
(#) watt válasza erdoszoli hozzászólására (») Júl 21, 2011 /
 
Nincs valahol a programodban olyan feltétel, amiből nem szabadul ki programszál csak a feltétel teljesülésekor, de a feltétel nem mindig áll elő időben? Ha van akkor az ilyen ellenőrzéseket szüntesd meg és kezeld másképpen a folyamatot.
(#) trudnai válasza erdoszoli hozzászólására (») Júl 21, 2011 /
 
Szia!
Tehat az adat megerkezik a PIC-hez? A PIC ertesul is rola? Az adatot ki is tudta olvasni hiba nelkul a 485-os buszarol?

A PIC pollozassal vizsgalja azt az adat bitet, tehat ellenorizni kell, hogy:

1. Adat valoban megerkezett -- pl tedd ki a 8 bitet az egyik portra es LED-eken keresztul diagnosztiizaldd, vagy tegyel ra egy kijelzot, LCD vagy LED kijelzo amire a beerkezett adatot kiiratod

2. A pollozas nem akad-e el mashol, tehat az, hogy ellenorzod az adat 7. bitje magas-e azt a kivant ido intervallumokban lekerdezed

3. Miutan engedelyezted a megszakitast mashol nem tiltod-e le valami masik logika szerint (velemenyem szerint amugy sem szerencses megszakitasokat engedelyezni / tiltani, hanem helyette vezerlo flageket kell hasznalni amit a megszakitaskezelo ellenoriz)
(#) erdoszoli válasza trudnai hozzászólására (») Júl 21, 2011 /
 
Annyi még kimaradt az előbb a tesztleírásból hogy adatértelmezés után valamilyen választ is küld, és másik gépen ahol az adatmozgást figyelem csak ott azt látom hogy a gép elküldte az eszköznek és az eszköz azt a választ adta ami erre is vonatkozik. Program szerint csak végrehajtás után válaszol vissza az eszköz tehát ha nincs a picből kifelé jövő adat akkor megállt a program valahol, de ez nem történik meg mert az a válasz jön aminek kell, következő adatot is tudná fogadni stb.
Tehát a pontokra a válasz :
1 : adat megérkezik , plusz most ráhekkeltem egy ledet egyik kimenetre és a TMR1ON=1 parancs után a ledet felvillantom , ez is megtörténik , TMR1ON=0 parancs után a led elalszik , ez is megtörténik. Ennek ellenére néha ismétlen nagyon néha a timer mégse indul el.
2 : nincs időhöz kötve , 485ről ha jön adat az interruptosan van kezelve.
3: a magas szintű interruptot csak ez a timer használja, alacsony szinten van az usart kezelő. Sehol máshol nincs programban tiltva az interrupt, illetve csak az initben van engedélyezve és ennyi.
Már ilyen POR BOR WDT dolgokban gondolkozom hogy hátha ezek valamelyike késleltetné néha a timer indulását de nem jutottam előrébb. Ma pl csak egyszer volt ilyen hogy később indult el, általában azonnal villog ha azt akarom, de jobb lenne a 0hiba%.
(#) watt válasza erdoszoli hozzászólására (») Júl 21, 2011 /
 
Hol állítod be a TMR1ON-t és hogy döntöd el, hogy be kell állítódjon, majd hol ellenőrzöd a feltételt a LED bekapcsolásához, és hol törlöd a TMR1ON bitet?
(#) kissi válasza trudnai hozzászólására (») Júl 21, 2011 /
 
Idézet:
„3. Miutan engedelyezted a megszakitast mashol nem tiltod-e le valami masik logika szerint (velemenyem szerint amugy sem szerencses megszakitasokat engedelyezni / tiltani, hanem helyette vezerlo flageket kell hasznalni amit a megszakitaskezelo ellenoriz)”


Ezt miért tartod jobbnak ?

Steve
(#) watt válasza kissi hozzászólására (») Júl 21, 2011 /
 
Szerintem úgy értette, hogy megszakítás közben nem szabad a megszakítást engedélyező biteket állítgatni, mert az zavart okoz!
(#) kissi válasza watt hozzászólására (») Júl 21, 2011 /
 
Én használtam már megszakítás közben megszakítás tiltást/engedélyezést ( egy adott időponttól kezdve fogadhatott v. nem bizonyos típusú megszakításokat ), de nem okozott hibát és ilyenről nem olvastam még. Láttatok valahol ilyet publikálva?

Steve
(#) erdoszoli válasza watt hozzászólására (») Júl 21, 2011 /
 
Nézzétek el hogy nem másolom be az egész kódot, szavakkal leírom a választ :
Tehát jön egy adatcsomag aminek egyik bájtját megvizsgálva kiválasztódik egy funkció, a következő bájt pedig hordozza az infót ehhez a funkcióhoz. Egy switch utasítással válogatok a funkció választáskor , kb így :
switch(temp[1])
{
...
case 0x02 : ize(temp[2]);break;
...
default:break;
}

void ize(char x)
{
.....
if ( ( x & 0x80 ) == 0x80)
{
INTCONbits.GIEH=1;
T1CONbits.TMR1ON=1;
TMR1H=0x0F;
TMR1L=0xFF;
LATxbits.LATx1=1; //LED be
}
else
{
INTCONbits.GIEH=0;
T1CONbits.TMR1ON=0;
LATxbits.LATx1=0; //Led ki
disp_on();
}

az interrupt meg igy néz ki :
void hi_int_kezelo(void)
{
if (PIR1bits.TMR1IF)
{
PIR1bits.TMR1IF=0;
TMR1H=0x0F;
TMR1L=0xFF;
timer1++;
if(timer1>9)
{
if(LATCbits.LATC0==1)
{
disp_off();
}
else {disp_on();}
timer1=0;
}
}
}
Előosztások ugy vannak belőve hogy 100ms -ként van interrupt, szóval nekem mp-es villogás kell , ezért számol egy timer változó.
Led felgyúlladását és kialvását szépen megcsinálja első pillanatban szóval mindent jól megcsinál csak nagyon ritkán késik a villogás elindulása. Ha egyszer elindul akkor minden jó és szkóppal nézve is 1mpes a villogás, de az a késés kicsit zavaró. Persze ha olyan adatbájtot küldök amiben nincs legfelső bitben 1es akkor abbahagyja a villogást és ég, szal ez is jó, csak nagy ritkán nem indul el azonnal a villogás... Utána ha türelmes vagyok elindul, de nem kéne türelmesnek lenni..
(#) HöTö hozzászólása Júl 21, 2011 /
 
Üdvözlet srácok!
Nem tud valaki egy olyan szimulátorról mi képes TFT-t és érintőpanelt is szimulálni?

A segítséget előre is köszönöm.
(#) watt válasza erdoszoli hozzászólására (») Júl 21, 2011 /
 
Én nem szoktam a megszakítás engedélyeket ki-be kapcsolni, elég, ha leállítod a timert. Nem hiszem, hogy ez a baj, de egy sorral kevesebb.
Akkor késhet, ha a Timer megszakításakor egy másik megszakítás kezelődik le éppen, pl. az USART-é. Ezt ki lehet küszöbölni, ha az USART-ot alsó prioritásba teszed. A Timeré úgy is olyan övid, hogy nem okoz gondot, ha megszakítja az USART lekezelését.
(#) erdoszoli válasza watt hozzászólására (») Júl 22, 2011 /
 
Igen így gondoltam én is, az usart low priorityben van , a timer meg High-ban. Persze lehet egy sorral kevesebb ez már azért van benne mert hátha emiatt késik néha az indulás
Viszont megpróbáltam most timer0 ával (pic18f14k22) és mostmeg abszolút nem megy :S Mit írtam el ? Kicsit éjszakáztam benne van a fáradtság is :
init() részlet:
T0CONbits.PSA=1;
T0CONbits.T08BIT=1;
T0CONbits.T0CS=0;
T0CONbits.T0PS0=1;
T0CONbits.T0PS1=1;
T0CONbits.T0PS2=1;
T0CONbits.T0SE=0;
T0CONbits.TMR0ON=0;
TMR0L=0x00;
INTCONbits.TMR0IE=0;
INTCON2bits.TMR0IP=1;

progi elején interrupt hívások
#pragma interrupt hi_isr
void hi_isr()
{
hi_int_kezelo();
}

függvény:
void hi_int_kezelo(void)
{
if (INTCONbits.TMR0IF)
{
INTCONbits.TMR0IF=0;
TMR0L=0x00;
LATCbits.LATC0=!LATCbits.LATC0;
}
}

A timer indítása ugyanaz mint korábban írtam, parancsértelmezésre elindul a timer , vagy leáll. Eközben egy lábat ki/be kapcsolgatok ellenőrizve azt hogy tényleg jól értelmezi-e a parancsot. Ezen a lábon jó a működés, szkóppal nézve a C0 lábat semmi reakció. Ötlet?
(#) cwerke hozzászólása Júl 22, 2011 /
 
Sziasztok!

PIC program "erős" levédést szeretném véghezvinni.
Nagyjából annyit szeretnék, hogy miután felprogramoztam a PIC-et ne lehessen kiolvasni belőle a programot, és áttölteni egy másik Mikrokontrollerbe.
Az Mplab 8,46-os verzióját használom, és ott van egy olyan opció a "Configuration Bits" alatt, ahol be lehet állítani a Code Protect opciót a 300008-as, és a 300009-es cím alatt. Ez azonban szerintem nem nyújt megfelelő védelmet (könnyen eltávolítható).
Ha van valakinek erre bomba biztos módszere, akkor nagyon jó lenne. (habár ilyen nem létezik.)
a Programozóm: Pickit3

Mplab.png
    
(#) bbalazs_ válasza cwerke hozzászólására (») Júl 22, 2011 /
 
Pont erre talaltak ki, amire neked kell. Eltavolitasaval torlodik az egesz memoria. Az ujabb picekben mar finomabb vedelmeket is csinalhatsz, levedhetsz egyes memoriablokkokat kulon-kulon is.
(#) bylcd hozzászólása Júl 22, 2011 /
 
Sziasztok !

Olvastam már erről a problémárol de választ nem találtam rá.
Hiba: MPLAB nem látja a PicKit2-őt az beállított procinál
(PIC16LF1824) de a Pickit2 programmer igen.

Próbáltam a boltilag hozzáadott 8.60-a nem látja, 8.73a-is de annál se.

Esetleg valaki tudja rá a megoldást ?

ui.: a pickit2 eredetileg nem látta a procit, de egy PK2DeviceFile-1.62.09.dat felrakása után tökéletesen megy.

Help me !
(#) Hp41C válasza bylcd hozzászólására (») Júl 22, 2011 /
 
Szia!

A PICKit2 fejlesztését a Microchip abbahagyta, az újabb típusokkal nem egészíti ki a rendszert mindenütt. Annak csak örülhetünk, hogy a saját programjába belekerült... A PICKit2 -nél megjelent "Please consider the PICkit 3." még nem olyan erős mint az ICD2 -nél olvasható "Please consider the MPLAB ICD 3 (DV164035). The MPLAB ICD 2 is not recommended for new designs and will not support new MCU or dsPIC devices released after September 2010."...
(#) nedudgi válasza bylcd hozzászólására (») Júl 22, 2011 /
 
1. Elindítod az MPLAB-ot, és a programozó "none"-ra állítod.
2. Lefordítod a programot.
3. Elintítod a PICkit2 programját, ás Auto Import funkcióval beégeted.
Ezután - amíg mindkét program fut- a programozó minden fordítás után beégeti az új programot.
(#) Hp41C válasza nedudgi hozzászólására (») Júl 22, 2011 /
 
Ay MpLab alól való működtetésnek jelentősebb része a nyomkövetés - a debuggolás. Az újabb fejlesztésű kontrollerek többségének nyomonkövetéséhez már a PICKit3 vagy ICD3 szükséges...
(#) nedudgi válasza Hp41C hozzászólására (») Júl 22, 2011 /
 
Sajnos.
(#) bylcd hozzászólása Júl 22, 2011 /
 
Hát elszomorodtam, de nagyon köszönöm a válaszotokat.
(#) watt válasza Hp41C hozzászólására (») Júl 22, 2011 /
 
Szia!
18F4523, TMR0, Hi INT, MPLAB 8.6 MPLAB SIM.
A TMR0L beírásakor az előtte értékkel feltöltött TMR0H törtlődik a szimulátorban és nem megfelelő időben szakít meg a Timer. A PIC-ben jól működik. _asm betétben is ezt csinálja, tehát nem a C a hibás elvileg. Láttál már ilyet?
(#) watt válasza watt hozzászólására (») Júl 22, 2011 /
 
Korrigálok, mert ha nem _asm betétbe írom, akkor a PIC-ben sem módosul a megszakítási ütem!

Bonyolódik:
Ha ezt írom:
  1. TMR0H=0xD0;
  2.         TMR0L=TMR0L + 0x10;

nem megy a PIC-ben sem.
Ha ezt:
  1. TMR0H=0xD0;
  2.         TMR0L=0x10;

akkor igen, de így nem kompenzálódik a TMR0...
ASM betétben működik ez a PIC-ben:
  1. _asm
  2.         MOVlW   0xD0
  3.         MOVWF   TMR0H, ACCESS
  4.         MOVlW   0x10   
  5.         ADDWF TMR0L,1, ACCESS
  6. _endasm

De a SIM nem eszi meg egyiket sem. Kicsit morcos vagyok...
(#) potyo válasza watt hozzászólására (») Júl 22, 2011 /
 
Esetleg próbáld meg úgy, hogy TMR0L+=0x10; hátha úgy mást fordít a fordító.
(#) watt válasza potyo hozzászólására (») Júl 22, 2011 /
 
Ez jó ötlet volt, a PIC-ben ez működik, de a SIM-el valami nagy gubanc van! Nem emlékszem, hogy régebben lett volna ilyen! Lehet, hogy ezzel a PIC-el csinálja, megnézem!
Egyébként feltettem azóta a 8.73a-t, aztán a 8.36-ot is, ugyanez van. Talán a C18 lenne a hunyó?
(#) potyo válasza watt hozzászólására (») Júl 22, 2011 /
 
Ha a PIC-ben jól fut a kód, szimulátorban nem, akkor szerintem a szimulátor a hunyó, mert végülis a fordító jó kódot állít elő.
(#) watt válasza potyo hozzászólására (») Júl 22, 2011 /
 
Igen, de a SIM az a fordítóra támaszkodik, vagy az az MPLAB része? PIC specifikus, vagy minden PIC-re ugyan az? Itt inkább a Timer0-ra értem ezt, mert az mindegyikben azonos működésű, nem hinném hogy PIC-enként megírnák külön...
(#) watt válasza potyo hozzászólására (») Júl 22, 2011 /
 
Feltettem egy projectet, amiben a hiba adott.
Egy képet is arról, hogy a TMR0H lenullázódik, hiába töltök bele értéket. Ha valaki tudna rá mondani valamit, annak örülnék! Köszi!
(#) potyo válasza watt hozzászólására (») Júl 22, 2011 /
 
Én úgy gondolom, hogy a szimulátor az a fordító által előállított hex alapján dolgozik, maga a forráskódszintű nyomkövetés pedig az asm listán alapul. De ezt csak én feltételezem így, nem biztos, hogy valóban így is van.
Következő: »»   1003 / 1319
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