Fórum témák

» Több friss téma
Fórum » PIC - Miértek, hogyanok haladóknak
Lapozás: OK   1018 / 1319
(#) zenetom válasza watt hozzászólására (») Aug 22, 2011 /
 
Köszi a választ!
Az adatlap szerint BANK1-BANK14 nem elérhető, vagyis ott ugye nincs semmi. Szóval csak akkor lehet probléma, ha véletlenül a BSR-rel a BANK1..BANK14 valamelyikét választom ki?
Le akarom már tisztázni ezt a bankos ügyet, eddig nem nagyon törődtem vele, de azthiszem mostmár ez is kezd világossá válni.
(#) watt válasza zenetom hozzászólására (») Aug 22, 2011 /
 
Természetesen itt nem kell váltanod. Probléma akkor van, ha váltasz és nem tudod, hogy váltottál. Tehát ne válts! Ez a bank olyan mint a fiókok, azt húzod ki, amelyikben a keresett tartalom van, semmi ördöngősség, csak oda kell figyelni. Nyílván az üres fiókokat is ki lehet húzni, csak nem találsz bennük semmit. Más bajt nem okoz.
(#) zenetom válasza watt hozzászólására (») Aug 22, 2011 /
 
Ha már itt tartunk: gondolom 18F2550-nél már más a helyzet, hiszen ott már 2kbyte-os az SRAM, amiből a BANK0..BANK7 a GPR, a BANK15 pedig az SFR. Szóval ha egy változót a 310h helyre rakok, ami a 3. BANK-ban van, akkor direkt címzésnél váltani kell bankot?
(#) watt válasza zenetom hozzászólására (») Aug 22, 2011 /
 
Természetesen.
(#) zenetom válasza watt hozzászólására (») Aug 22, 2011 /
 
Rendben, köszi!
(#) netnet.hu hozzászólása Aug 22, 2011 /
 
Hatalmas problémával küzdök és segítség kell!


TCP/IP Stack-ben a CustomHTTPApp.c-ben a végén átrendeztem a HTTPPrint-eket és kikommenteltem a fölöslegeseket. Ezután a programom két változónak az értékét nem hajlandó elmenteni az SPI EEPROM-ba.

Itt a kódom:
  1. // Read all browser POST data
  2.         while(curHTTP.byteCount)
  3.         {
  4.                 // Read a form field name
  5.                 if(HTTPReadPostName(curHTTP.data, 6) != HTTP_READ_OK)
  6.                         goto ConfigFailure;
  7.                        
  8.                 // Read a form field value
  9.                 if(HTTPReadPostValue(curHTTP.data + 6, sizeof(curHTTP.data)-6-2) != HTTP_READ_OK)
  10.                         goto ConfigFailure;
  11.                        
  12.  
  13.         ///////////////////
  14.                 if(!strcmppgm2ram((char*)curHTTP.data, (ROM char*)"pip"))
  15.                 {// Read new IP Address to ping
  16.                         if(!StringToIPAddress(curHTTP.data+6, &newAppConfig.pingip))
  17.                                 goto ConfigFailure;
  18.                                
  19.                         newAppConfig.Defaultpingip.Val = newAppConfig.pingip.Val;
  20.                 }
  21.  
  22.  
  23.  
  24.  
  25.                 // Várakozás Before Ping
  26.                 else if(!strcmppgm2ram((char*)curHTTP.data, (ROM char*)"wbp"))
  27.                 {
  28.                         char TmpWBP[4];
  29.                         memcpy((void*)TmpWBP, (void*)curHTTP.data+6, 3);
  30.                         TmpWBP[3] = 0;
  31.                         newAppConfig.WaitBeforePing = atoi((char*)TmpWBP);
  32.                         newAppConfig.DefaultWaitBeforePing = newAppConfig.WaitBeforePing;
  33.                 }
  34.  
  35.                 // Jelszó
  36.                 else if(!strcmppgm2ram((char*)curHTTP.data, (ROM char*)"jel"))
  37.                 {
  38.                         memcpy((void*)newAppConfig.Jelszo, (void*)curHTTP.data+6, 16);
  39.                 }
  40.  
  41.                 // Ping időközök
  42.                 else if(!strcmppgm2ram((char*)curHTTP.data, (ROM char*)"pin"))
  43.                 {
  44.                         char sTEMP[4];
  45.                         memcpy((void*)sTEMP, (void*)curHTTP.data+6, 3);
  46.                         sTEMP[3] = 0;
  47.                         newAppConfig.PingInterval = atoi((char*)sTEMP);
  48.                         newAppConfig.DefaultPingInterval = newAppConfig.PingInterval;
  49.                 }
  50.  
  51.                 // Megszakitás ideje
  52.                 else if(!strcmppgm2ram((char*)curHTTP.data, (ROM char*)"rtm"))
  53.                 {
  54.  
  55.                         BYTE sTEMP2[4];
  56.                         memcpy((void*)sTEMP2, (void*)curHTTP.data+6, 3);
  57.                         sTEMP2[3] = 0;
  58.                         newAppConfig.RebootTime = atoi((char*)sTEMP2);
  59.                         newAppConfig.DefaultRebootTime = newAppConfig.RebootTime;
  60.                 }


és a HTTPPrint-ek:

  1. void HTTPPrint_ping_ip(void)
  2. {
  3.         HTTPPrintIP(AppConfig.pingip);
  4.         return;
  5. }
  6.  
  7. void HTTPPrint_ping_interval(void)
  8. {
  9.         int TmpPingInterval;
  10.         ultoa(AppConfig.PingInterval, TmpPingInterval);
  11.         TCPPutString(sktHTTP, TmpPingInterval);
  12.         return;
  13. }
  14.  
  15. void HTTPPrint_smtp_port(void)
  16. {
  17.         int digits;
  18.         ultoa(AppConfig.SmtpPort, digits);
  19.         TCPPutString(sktHTTP, digits);
  20.         return;
  21. }


Amikor weben beírom PingInterval és WaitBeforePing értékeit, akkor nem a valódit menti, hanem 0-t és 11831-et.


Kérem, akinek van fogalma hol a hiba, az szóljon!!


Köszönöm!
(#) potyo válasza netnet.hu hozzászólására (») Aug 22, 2011 /
 
Van ICD2 vagy Pickit2-d? Én tennék egy töréspontot a CustomHTTPApp.c-ben az itt 29-el jelölt sorra, majd onnan soronként léptetném és megvizsgálnám a változókat egyesével, hogy miben nem az van, ami kellene, hogy legyen.
(#) netnet.hu válasza potyo hozzászólására (») Aug 22, 2011 /
 
Ok, ráraktam a Pickit2-t. Most fogok először debuggolni, úgyhogy hajrá....

mindjárt irom mi az eredmény
(#) netnet.hu válasza potyo hozzászólására (») Aug 22, 2011 /
 
Remek, debuggolok (Debugger - Run) csak azt nem tudom, mit kell csinálni.
A break is ott van a sorban és most egy zöld nyíl is megjelent.
(#) potyo válasza netnet.hu hozzászólására (») Aug 22, 2011 /
 
Szimulátort sem használtad még sosem? F7-el léptethetsz soronként, de akkor a függvényhívásoknál bemegy a függvénybe is. F8-al léptetheted úgy, hogy a C forrásban a következő sorra ugorjon (ha közben van függvényhívás, akkor azt végrehajtja). F9-el meg megy a következő töréspontig (ami lehet ugyanaz is, mint a mostani, ha ismételten ráfut).

Van a View->Watch, ott tudod hozzáadni a figyelni kívánt változókat. Add hozzá a TmpWBP-t, és a newAppConfig-ot, akkor az ott majd kibontja a struktúrát és a tömböt. Jobbkattal a változó nevén birod állítani, hogy miként mutassa, hex, bin, dec vagy akár ascii kódban.

  1. atoi((char*)TmpWBP);

Ebben szerintem felesleges castolni, mert a TmpWBP már eleve char * típusú. Hibát nem szabad, hogy okozzon, csak felesleges. Juteszembe, ezért nem kiabál a fordító, hogy a char TmpWBP[4]; sor nem közvetlenül a függvény fejléce alatt van, még mielőbb bármi mást csinálnál?
(#) Hp41C válasza Attila86 hozzászólására (») Aug 22, 2011 /
 
Szia!
Mekkora tápról jár a rádiós modul? Elég nagy a jelszint a PICKit2 -nek? A buffer kártyát már ajánlottam...Segítségével már többször sikerült nyitott kollektoros vonalakon is használnom a PICKit2 alanizátorát.
(#) Attila86 válasza Hp41C hozzászólására (») Aug 23, 2011 /
 
Szia!
Gombbelemről, azaz kb 3V-ról meg az RTFQ1. Hogy elég-e PICkit2-nek a jelszintje azt nem tudom.
(#) Hp41C válasza Attila86 hozzászólására (») Aug 23, 2011 /
 
Szia!

A mérést elindítod, hogy a CH3 le- vagy felfutó éle a trigger. A mérés magától nem áll le, de a gomb megnyomására leáll. Ekkor a PICKit2 nem érzékeli rendesen a szinteket (szerintem a magas szintet). A gomb megnyomása után nézd meg a kapott regisztrátumot: ha minden jel alacsony szinten van, akkor kellene a buffer. Ne kösd össze a Vdd -t a panellal, hanem kapcsold be a PICKit2 -n a mérés előtt, így a buffer tápja a PICKit2 Vdd értékével állítható lesz. A buffert a Logic Tool elindítása után csatlakoztasd fel, és a belőle való kilépés előtt csatlakoztasd le.
(#) n_yálastrubadúr hozzászólása Aug 24, 2011 /
 
Jó napot!
A tapskapcsolós lámpám fényerőszabályzást megoldottam PWM-nélkül. Csak a TMR0- használatával. Így teljesen jó 0-255-ig szabályozható a fényerő.
A probléma csak az hogy teljesen lefoglalja a picet.
Amit kérdezni akarok a hozzávaló távirányítóm problematikája. Egy 10f200 előállítja a 38Khz vivő frekit, amit egy másik 10f200 fogad és ebből állítom elő a szinte tetszőleges bitsorozatot illetve szüneteket. A 10f200-ak belső oszcillátorról mennek plafonon, ami elvileg 4MHz. Ezt hivatott lenne venni egy 16f628a , ami szintén belső 4Mhz-en megy. Közben építettem egy frekvenciamérőt, Vicsys kolléga tárházából. Kérdezném, hogyan lehet ha lehet lemérni ezen picek belső működési frekvenciáját. És hogyan tudnám a vevő 16f628a-ban ezeket a 10f200 által küldött infra jeleket valahogyan befogni, ahol az időzítés nem súlyosan kritikus. A szegény ember szkópján nézve örülök, hogy kedvemre variálhatom a küldött csomagokat, de még jobban tetszene ha csak az én távirányítómra működne. Mert jelenleg a 10f200-ban egy bit 0xff hosszúságú. A szünet meg 10x 0xff. Ezeket hosszúságokat a 16f628a-ban is alkalmazom. De valahogy csak bizonyos idő után kapcsol, és ami rosszabb, ezt megteszi egy másik távirányítóra is, bármilyenre. Mivel a cél csak 2 különb funkció, az sem baj ha 4 bites, és mondjuk 100 csomag után fogadom el. Valószínűleg az időzítsek a rosszak, de a belső frekit is jó lenne tudni. Protokollokat nem alkalmazom, csak az érdekelne, hogyan lehet a legegyszerűbben nyomon követni a mechanizmusokat, mert így kicsit vakond vagyok.
(#) zenetom hozzászólása Aug 24, 2011 /
 
Van valami különösebb ok arra, hogy sok assembly programban a változókat az adatmemória 0x20-as címétől helyezik el?
(#) Hp41C válasza zenetom hozzászólására (») Aug 24, 2011 /
 
Szia!
- Ok: A kiválasztott típus memória szervezése. 16F sorozat tagjainál általában 0x20 címtől általános célú memória terület található.
- Különbségek: 16C83, 16C84, 16F83(A), 16F84(A) típusoknál ez a terület a 0x0C címtól kezdődik, a 16F54 -en 0x07 -töl, a 16F57 -nél 0x10 től, stb...

A kezdőcímet a felhasznált kontroller memória kiosztása alapján kell megválasztani.
(#) zenetom válasza Hp41C hozzászólására (») Aug 24, 2011 /
 
Köszi!
Tényleg, most nézem, 0x20 előtt SFR-ek vannak. Aztán vannak az általános regiszterek, aztán megint egy kis SFR, aztán megint GPR...
+1 pont a 18F-es szériának.
(#) trudnai válasza zenetom hozzászólására (») Aug 25, 2011 /
 
Amugy a programod szemszogebol miert zavaro, ha 0x20 cimrol kezdodnek az adataid?
(#) zenetom válasza trudnai hozzászólására (») Aug 25, 2011 /
 
Ha már van rá lehetőség, hogy a 0x00 címtől kezdődjenek az adatok, miért ne?
Egyébként Indirekt címzésnél ne kelljen hozzáadni a címhez mindig 0x20-at.
(#) trudnai válasza zenetom hozzászólására (») Aug 25, 2011 /
 
C program eseteben egy 0-as cim akar zavaro is lehet mivel a NULL ertek 0-as cimmel van lekodolva.
(#) n_yálastrubadúr hozzászólása Aug 25, 2011 /
 
Szép napot!
Van egy Pickit2-m. Az infra jeleket úgygondolom a TMR0-val fogom mérni, mondjuk a lefutó éleket, és mentem egy regiszterbe. A kijelzés lehetetlensége okán, hogyan lehetne mondjuk mplaban vagy valahogy a segédregiszter értékét a művelet után kiolvasni?
(#) icserny válasza n_yálastrubadúr hozzászólására (») Aug 25, 2011 /
 
A kijelzés sem lehetetlen, ha a PICkit2-t Uart Tool módban használod, s a mikrovezérlőd az USART/EUSART porton kommunikál.

A másik lehetőség az, hogy a PICkit2 hardveres nyomkövető módjában kiolvasod a megfelelő regiszter/változó tartalmát (ehhez természetesen egy töréspontot el kell helyezni a program egy alkalmas pontján).
(#) zenetom válasza trudnai hozzászólására (») Aug 25, 2011 /
 
Akkor erre jó lesz odafigyelni. De még egy ideig ASM-ben programozok.
(#) potyo válasza zenetom hozzászólására (») Aug 25, 2011 /
 
Indirekt címzésnél is valahonnan jön az FSR-be írandó érték, nem? Pl. a 0x30 címen levő ABC nevű változóba akarsz indirekt címzéssel írni valamit, akkor birod így csinálni:
  1. MOVLW ABC  ; szándékosan MOVLW, ez az ABC változó CÍMÉT tölti a W-be
  2. MOVWF FSR


Vagy ha az ABC egy tömb, akkor meg pl. az ötödik elemének a címét úgy számítod ki, ha a W-ben már ott van az öt, hogy
  1. ADDLW ABC ; szándékosan ADDLW, hogy a W tartalmához az ABC változó CÍMÉT adja hozzá
  2. MOVWF FSR
(#) zenetom válasza potyo hozzászólására (») Aug 25, 2011 /
 
Mindegy, lényegtelen.
(#) Attila86 hozzászólása Aug 25, 2011 /
 
INT megszakításnál van valami minimális idő ameddig mondjuk H szintűnek kell maradnia a bemenetnek ahhoz hogy megszakítás-generálódjon?

PIC18F14K22-nek az INT2 bemenetére H szintet kapcsolok két vezeték összeérintésével. A megszakítás felfutó élre van beállítva, és az INT2 lábra párhuzamosan rá van kötve egy LED is. Az INT2 megszakításának lekezelésében egy teljesen másik lábra kötött LED-et gyújtok ki aztán goto$. Ha összeérintem a két vezetéket akkor a direktbe rákötött LED felvillan és a másik LED pedig kigyúl (a megszakítás felkapcsolja). De néha sikerül elérnem azt hogy nagyon rövid időre érintem össze csak a két vezetéket, ekkor a direktbe rákötött LED felvillan egy pillanatra, de a másik LED sötét marad (a PIC nem lép be a megszakításba mert nem érzékeli a felfutó élt).

Ez azért gond mert egy másik PIC adna neki egy jelet (start bit lesz majd ha egyszer hajlandó lesz működni) és onnantól indulna meg egy jelátvitel. De egyszerűen nem érzékeli a "vevő" PIC. Az "adó" PIC által kiadott impulzus 1ms-os.

Szerk.:
25ns lenne? Hát annál az 1ms bőven több...

INT_min.png
    
(#) kissi válasza Attila86 hozzászólására (») Aug 25, 2011 /
 
Szia!

Attila a kézi érintésnél Te biztos nem adsz 1ms-nál rövidebb jelet ( az tuti elég, de a konkrét min.értéket nem tudom! ), ott valami más a hiba ... !

Steve
(#) MPi-c válasza Attila86 hozzászólására (») Aug 26, 2011 /
 
Idézet:
„INT megszakításnál van valami minimális idő ameddig mondjuk H szintűnek kell maradnia a bemenetnek ahhoz hogy megszakítás-generálódjon?”


Adatlapban benne kellene lennie:
TINP "INTx pin High or Low Time"

25ns jó lehet...
(#) kissi válasza Attila86 hozzászólására (») Aug 26, 2011 /
 
Itt látom konkrétan, jó volt MPi-c kolléga meglátása... !

Steve

INT.jpg
    
(#) Attila86 hozzászólása Aug 26, 2011 /
 
Igazatok volt, nem az idő volt túl kevés hanem a jelszint túl alacsony.

Hp41C!
Belinkelnéd azt a buffert amit említettél? Rákerestem de nem találom...
Következő: »»   1018 / 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