Fórum témák

» Több friss téma
Fórum » PIC - Miértek, hogyanok haladóknak
Lapozás: OK   747 / 1320
(#) szilva válasza mrbini hozzászólására (») Máj 21, 2010 /
 
Ha 16F876A-ról van szó, akkor azt miért is nem támogatja a PICkit2?

Bővebben: Link
(#) mrbini válasza szilva hozzászólására (») Máj 21, 2010 /
 
Bocsánat nem úgy értettem írni olvasni tudom csak a konfig biteket nem tudom állítani vele.
(#) szilva válasza mrbini hozzászólására (») Máj 21, 2010 /
 
Ja ok. A PICkit2-ben is tudod állítani a config biteket, csak nem túl kényelmes módon, hexában vagy bitenként (most nincs előttem). Ehhez elő kell venni az adatlapot és az alapján billegtetni a biteket, de valóban kényelmesebb az MPLAB-ból megtenni ezt.
(#) mrbini válasza szilva hozzászólására (») Máj 21, 2010 /
 
Értem de ez a megoldás még nem menne nekem
(#) bbalazs_ válasza Hp41C hozzászólására (») Máj 21, 2010 /
 
tango2-es pcb jo lesz?
(#) olala hozzászólása Máj 22, 2010 /
 
Hello!

Segítségre volna szükségem PIC C programozással kapcsolatban. A Microchip C18 fordítóját használom egy 18F4550-es PIC-hez. Kezdő vagyok még, nem ismerem minden csínját bínját a C-nek, így legyetek elnézőek!
A problémám az volna, hogy szeretnék létrehozni egy olyan "makrót, vagy hivatkozást", amivel hivatkozni tudok egy port bizonyos bitjére. Azért kellene ez, mert pl. a LATAbits.LATA1 kifejezés egyrészt hosszú, másrészt beírom ezt a programban 20 különböző helyre és holnap a fent említett lábról a rákötött ledet a szomszédos lábra rakom, és akkor elég legyen az első sorban átírni a makrónál, hogy változás van, és ne kelljen az egész programot átbogarászni, hogy minden helyen módosítsam a láb nevét, mert abból csak baj van.

Eddig azzal próbálkoztam hogy:
  1. #define led LATAbits.LATA1
  2. led = 1;
,de ez nem jött be.
Amikor azt próbáltam csak hogy:
[code=c]#define led LATD
led = 1;[code=c], az szépen ment. Gondolom a struktúrák miatt van valami gond, de nem tudom hogy oldjam meg. Az volna a lényeg, hogy a port egyes bitjeire egyenként tudjak hivatkozni.

Próbáltam mutatót is használni, de azzal fordítási hibát kaptam, míg az előző verzió legalább lefordult.

Remélem Ti tudjátok mi lehet a megoldás és eláruljátok.

Köszi!
(#) trudnai válasza olala hozzászólására (») Máj 22, 2010 /
 
Idézet:
„Eddig azzal próbálkoztam hogy:
  1. #define led LATAbits.LATA1
  2. led = 1;

,de ez nem jött be.”


Pedig ennek mennie kell -- mi volt a hibauzenet?

UI: amugy makro neveket konvencionalisan csupa nagy betuvel irunk, hogy konyen lehessen latni a kodban, hogy az makro es nem valami mas...
(#) olala hozzászólása Máj 22, 2010 /
 
Nem kaptam hibaüzenetet, hanem az MPLAB SIM simulátorral tesztelem a programot, és ahogy nézem a watch ablakban a regiszterek értékeit, nem íródik felül az értékadás után a hivatkozás, amire a makró mutatna.
(#) potyo válasza olala hozzászólására (») Máj 22, 2010 /
 
Az inkább ezek egyikétől szokott lenni: Link
(#) Hp41C válasza bbalazs_ hozzászólására (») Máj 22, 2010 /
 
Szia!

Sajnos nincs tangóm, ha lehetne egyszerű képet tegyél fel...
(#) watt válasza olala hozzászólására (») Máj 22, 2010 /
 
Lehet, hogy az A portot nem jól állítottad be.
(#) olala válasza watt hozzászólására (») Máj 22, 2010 /
 
Köszönöm mindnekinek a segítő hozzászólásokat! Valóban a PortA beállításával lehet a probléma, mert ha a PortD-re írom át a kódot, akkor működik. Még átnézem a beállításokat, és az inicializálást, ott kell lennie a hibának.
(#) mrbini válasza trudnai hozzászólására (») Máj 22, 2010 /
 
Szia!
sikerült átállítani végre és elindult a program és az áramkör is a kijelző csatlakozóinál volt zárat.
Köszönöm a segítséget.
(#) icserny válasza olala hozzászólására (») Máj 22, 2010 /
 
Idézet:
„A Microchip C18 fordítóját használom egy 18F4550-es PIC-hez.”
Akkor "ajánlom magamat", azaz a PICCOLO projekt honlapját.

Idézet:
„Eddig azzal próbálkoztam hogy:
  1. #define led LATAbits.LATA1
Pontosan így csinálja a Microchip is az USB keretrendszerének mintaprogramjaiban. Mindenesetre a PIC18F4550 esetében érdemes PORTA lábait meghagyni az esetleges későbbi fejlesztésekhez szükséges analóg bemeneteknek, mert ennél a mikrovezérlőnél csak AN0-tól kezdődően, szigorúan sorban engedélyezhetők.
(#) olala válasza icserny hozzászólására (») Máj 23, 2010 /
 
Köszi az infókat és a honlapcímedet! Nagyon igényes és tartalmas oldal, még biztosan visszanézek rá, főleg az USB-s dolgok miatt.
Egyébként valóban az A portot állítottam be rosszul, és azóta jól működik a program a szimulációban is.
(#) potyo hozzászólása Máj 23, 2010 /
 
Valaki foglalkozott már PIC32 mikrovezérlőkkel? 12MHz-en futó 8051-es számára kellene külső programmemóriát emulálni (32 esetleg 64kB), ami azt jelenti, hogy egy külső megszakításlábon megjelenő megszakításra kellene reagálni úgy 150ns-on belül, de hogy ne legyen kicentizve, inkább 125ns-tól nem kellene hosszabb idő. Ha jól olvasom az adatlapokat, akkor meg lehet oldani, hogy megszakításnál ne kelljen az aktuális környezetet menteni (vagy legalábbis minimális dolgokat kelljen menteni), és így a 80MHz-en futó PIC32-nek 10 utasításciklusa van, hogy beolvassa egy port értékét, azzal indexelje a saját kód vagy adatmemóriáját, majd onnan kidobja az adatot egy másik portra. Szerintem kivitelezhető, de azért jó lenne, ha valaki, aki járatosabb a dologban, megerősítene, mielőtt bevásárolok.

Nem kéne nyitni egy külön PIC32-es témát?
(#) icserny válasza potyo hozzászólására (») Máj 23, 2010 /
 
Mennyi az interrupt latency, azaz hány utasításciklus telik el az interrupt flag bebillenésétől az interrupt kiszolgáló rutinba való belépésig? S mennyi a visszatérési idő? Mintha már lett volna róla szó, hogy a polling gyorsabb lehet...
(#) watt válasza potyo hozzászólására (») Máj 23, 2010 /
 
Én is pollingoznék, ha más fontos dolog nincs, csak memória emu. Vagy van?
(#) accesid hozzászólása Máj 23, 2010 /
 
Sziaszt
Pic 16f877, 4Mhz Q, T1OSO es T1OSI labakon egy 32768Hz-es orabol kiszedett rezonator ket 33.pf kondival a fold fele.

es a programresz Oshon fele basic

  1. TRISC = 1
  2.  
  3.  
  4. PIE1.TMR1IE = 1  
  5. INTCON.GIE = 1  
  6. INTCON.PEIE = 1
  7.                
  8.  
  9.  
  10. T1CON.TMR1ON = 1        'Timer1 On bit 1=on
  11. T1CON.T1OSCEN = 1       'Timer1 Oscillator Enable Control bit
  12. T1CON.T1CKPS1 = 1       'timer1 input clock prescale Select bits 11 = 1:8
  13. T1CON.T1CKPS0 = 1       '       -//-
  14. T1CON.T1OSCEN = 1       'Timer1 Oscillator Enable Control bit 1 =enabled
  15. T1CON.TMR1CS = 1        'timer1 clock source Select Bit
  16.                         '1 = External clock from pin RC0/T1OSO/T1CKI (on the rising edge)
  17. T1CON.T1SYNC = 1        'Timer1 External Clock Input Synchronization Control bit 1=no sync
  18.  
  19.  
  20.  
  21.  
  22.  
  23. PORTC.5 = 0
  24.  
  25.  
  26.  
  27. loop:
  28. Goto loop  'loop forever
  29.  
  30. End
  31.  
  32. On Interrupt  'Timer1 interrupt routine
  33. If PORTC.5 = 0 Then
  34.         PORTC.5 = 1
  35.         Else
  36.         PORTC.5 = 0
  37. Endif
  38.  
  39. PIR1.TMR1IF = 0  'TMR1 Overflow Interrupt Flag bit
  40. Resume


a T1OSO labon kimertem 32Khz-et
es az C5 labon egy led van ami kb 16Sec-enkent valt allapotot! A leiras szerint amibol a programresz szarmazik 1Sec-enkent kellene valtson.
Mi lehet a problema? a prescaller beallitasa?
(#) szilva válasza accesid hozzászólására (») Máj 23, 2010 /
 
Ha a timer1-et csak "szabadonfutó" módban használod interrupt-generálásra (azaz nem töltöd az értékét újra a megszakításban), akkor 65536 lépésenként fog bekövetkezni a megszakítás. Ez 32768Hz-es órakvarcnál 2 másodperc, ha nincs előosztó a timer1-en. A kód szerint viszont 8-as előosztót használsz, azaz teljesen jogos, hogy 8x2=16 másodpercenként fog a megszakítási rutinra ráugrani.
(#) potyo válasza watt hozzászólására (») Máj 23, 2010 /
 
Idézet:
„Én is pollingoznék, ha más fontos dolog nincs, csak memória emu. Vagy van?”
Közben usb-re is rá lenne dugva, és ugyan kommunikáció emulálás közben nem lenne, de ki tudja, mikor jut eszébe a windows-nak, hogy valamit lekérdezzen. Bár tapasztalatom szerint nem csinál semmit a windows sem, maximum a SIE intézi a dolgot, és a kontroller processzorának nem kell foglalkoznia semmivel.
(#) watt válasza potyo hozzászólására (») Máj 23, 2010 /
 
Ezt ki kéne próbálni. Szimulátorban próbáltad milyen időt ad a megszakítással lekezelt műveletre? A 32-eseket nem ismerem annyira, de úgy tudom, hogy a műveleti idő nem egyértelmű, függhet a műveletek végrehajtási sorrendjétől, vagy mi... ?
Nameg mi van akkor, ha pont egy USB-s megszakítást szakítasz meg(prioritásos megszakítás), mondván a memóriakiszolgálás fontosabb?
Ha a kettő nincs egy időben, akkor nem lehet ezt különválasztani(üzemmód kapcsoló)?
(#) potyo válasza icserny hozzászólására (») Máj 23, 2010 /
 
Idézet:
„Mennyi az interrupt latency, azaz hány utasításciklus telik el az interrupt flag bebillenésétől az interrupt kiszolgáló rutinba való belépésig? S mennyi a visszatérési idő?”


Na ezaz, ezért kérdeztem a dolgot, hogy valaki aki foglalkozott vele, meg tudja-e mondani. Én csak adatlapokat bányásztam eddig, nemis láttam még élőben PIC32-t. Ezen doksi Example 8-9 alapján az interrupt belépés 12 utasítás. Namost a kérdés, hogy ebből mi az, amit esetleg ki lehetne hagyni? Mert nekem itt stack-ra nincs szükségen, talán a status regisztert sem rontanám el, egyetlen indirekt címzés regiszter kell, amivel tudok olvasni a memóriából és utána kitenni a tartalmát egy portra. A megszakítások 500ns időnként követik egymást, tehát a lényeg, hogy a megszakítás beesésétől számítva 120-130ns-on belül ott legyen az adat a kimeneten, és ott maradjon 170-180ns-ig (a megszakítás beesésétől számítva) a maradék időben bármit csinálhat a kontroller.
(#) potyo válasza watt hozzászólására (») Máj 23, 2010 /
 
Úgy vettem észre, hogy az USB az enumeráció után már nem kényes a válaszidőre. Volt, hogy megállítottam ICD2-vel a futást, 25-30 másodperc után indítottam el újra, és simán működött tovább.

Szimulációra ma fog sor kerülni. Már én is ezen gondolkozok, hogy üzemmód kapcsoló kellene, ha máshogy nem valósítható meg a dolog.
(#) watt válasza potyo hozzászólására (») Máj 23, 2010 /
 
Nálam a CDC-s próbálkozásokkor ha nem pollingoltam elégszer megszakításból a PC-s USB kéréseket, akkor szétszakadt a kapcsolat.
(#) potyo válasza watt hozzászólására (») Máj 23, 2010 /
 
CDC-t csak kipróbáltam, de nem használtam sosem. Viszont el tudom képzelni, hogy a drivere folyamatosan kérdezgeti le, hogy van-e új adat, és ha nem jön válasz, akkor leválasztja. HID-et használtam olyan célra, mint ahogy itt is lenne, annál simán meg lehetett állítani. Biztos ha más célra lenne, akkor itt is lenne gond, de ennél pont nem, amire nekem kell.

De nemis ez a lényeg, hanem hogy meg lehet-e a megadott időn belül oldani az interrupt kiszolgálást? Nem értem, hogy ha 18F-nél a magas prioritásnál megoldották, hogy néhány kritikus regisztert hardverből mentsen, akkor itt a PIC32-nél miért írnak 12 utasításos bevezetőt és utána hét utasításos kivezetőt...
(#) accesid válasza szilva hozzászólására (») Máj 23, 2010 /
 
Koszi a valaszt szilva!
Teljesen logikus... 16bites a tmr1 szamlaloja... vegigolvastam adatlapot csak nem ertettem meg...
Ha kikapcsolom az eloosztast kapok egy 2Hz-jelet...
a megszakitas akkor kovetkezik be ha a 16bites szamlalo tulcsordul... tulcsordulaskor TMR1H=0 es TMR1L=0, ha en a megszakitasban TMR1H.7 erteket 1 be allitom akkor 65536 helyett 32768 lepesenkent fog bekovetkezni a megszakitas?

(ha igy van akkor meg egy kerdes, a 16f877 adatlapjaban nem talaltam de mas tiposoknal igaz a TMR0 irasakor 2 utasitascuklusig tiltva van a szamlalo... ugye itt ilyen nincs?)
(#) potyo válasza accesid hozzászólására (») Máj 23, 2010 /
 
Van itt egy doksi neked.
(#) watt válasza potyo hozzászólására (») Máj 23, 2010 /
 
Azt hiszem azért, mert másképp működik a parancsok végrehajtása, meg talán azért, mert mindegy, hogy hardverből, vagy szoftverből van lekezelve, ugyanannyi idő.

Ha üzemmódos lenne, akkor nem kéne megszakítás. Mert mi van, ha memória kezelés alatt dugja rá valaki...
(#) szilva válasza accesid hozzászólására (») Máj 23, 2010 /
 
Igen, elméletileg úgy kellene lennie, ahogy írod az 1 másodperces megszakítást. Ám a gyakorlatban a TMR1 regiszterek írása után elképzelhető, hogy egy órajelet ki fog hagyni a számolásból. Erről az adott típus errata-ját kellene elolvasnod, illetve mintha lenne "timer1 errata" dokumentum is a Microchipnél.
Következő: »»   747 / 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