Fórum témák

» Több friss téma
Fórum » PIC - Miértek, hogyanok haladóknak
Lapozás: OK   1177 / 1320
(#) Hp41C válasza watt hozzászólására (») Máj 24, 2014 /
 
Használd a szimuláció során a Watch ablakban a TMR1_Internal / TMR3_Internal stb. szimbólumokat. WREG a Watch ablakban.
A hozzászólás módosítva: Máj 24, 2014
(#) watt válasza Hp41C hozzászólására (») Máj 24, 2014 /
 
Köszönöm!
Igaz itt egy kicsit még számolgatni kell az FOSC/4-el, meg az elő, utó osztásokkal(ha van), de jobb mint a semmi.
A linkelt rész következtetésével egyetértek. Elég gáz ez rájuk nézve!

Viszont van egy kis gond ezzel még. Timer megszakításkor a Timer mindig ugyanannyi. Ha feltöltéssel igyekszik valaki beállítani a megfelelő időt, régen kényelmesebb volt kézzel korrigálgatni a feltöltési értéket. Nem akarom az X-et...

Ja és nem csak úgy nem működik a TMR1, hogy nem számol a Watch-ban, egyszerűen nem okoz megszakítást a szimulációban!!!
A hozzászólás módosítva: Máj 24, 2014
(#) kissi válasza watt hozzászólására (») Máj 24, 2014 /
 
Idézet:
„PICKit3 használata esetében megáll a breakpontál, de nincs StopWatch a Debugger menü alatt.”
Ezt nem értem, tudtommal soha nem is volt StopWatch, ha nem a szimulátorral dolgozol ( talán a RealIce-nál kezdődik az a kategória, ahol már tud időt is mérni debuggolás közben, ha jól emlékszem!) !?
TIMER1 idejét miért nem szimulátorral méred (MPLAB SIM)?

egy kicsit "összevissza" van most nekem a fórum, remélem nem értek félre valamit !?
A hozzászólás módosítva: Máj 24, 2014
(#) watt válasza kissi hozzászólására (») Máj 24, 2014 /
 
Idézet:
„TIMER1 idejét miért nem szimulátorral méred”

Mert nem áll meg a megszakításba helyezett break pontnál.

Nem értetted félre. Eddig nem néztem, hogy van-e stopwatch a PK2-nél, mert még nem volt ilyen, hogy nem működik a szimulátor, ezért lepődtem meg, hogy nincs a PK3-nál debugg módban. Eddig eszembe se jutott volna PKx debugg módban időket ellenőrizni, talán logikus is, hogy nem nagyon lehet USB-n keresztül ezt megtenni, belső perifériája pedig nincs a PIC-eknek erre. A JTAG az más téma, de 18F-ekben olyan nincs is...
Szóval köszi!
Itt egy kép arról, hogy a TMR0 számlál, a 3 nem. Valóságban működik és debugg módban meg is áll a break-nél...
(#) Hp41C válasza watt hozzászólására (») Máj 24, 2014 /
 
T3CONbits.TMR3CS = 1, így külső órajelről járna a timer. A szimulálásához stimulus kellene.
(#) watt válasza Hp41C hozzászólására (») Máj 24, 2014 /
 
T3CON bit 7-6 TMR3CS<1:0> 00=>Fosc/4
0b00110011
(#) Hp41C válasza watt hozzászólására (») Máj 24, 2014 /
 
Melyik típus?
(#) watt válasza Hp41C hozzászólására (») Máj 24, 2014 /
 
Pont ez járt a fejemben, hogy lehetséges, hogy ebben a PIC-ben másképp van...
18f87J94
(#) Hp41C válasza watt hozzászólására (») Máj 24, 2014 /
 
Nézd meg a Configure / Select device menüpontot. Nekem 8.90 van fenn, itt a Simulátor mellett a led még sárga.
(#) watt válasza Hp41C hozzászólására (») Máj 24, 2014 /
 
Még itt is. Ettől nem lettem boldogabb! Köszi mégegyszer!
Te használod az X-et? Ha igen, milyen?
(#) Hp41C válasza watt hozzászólására (») Máj 24, 2014 /
 
Egyszer - kétszer kipróbáltam, de **** lassúnak találtam. Az IPE betöltése, a PICkit3 felismerése kb. 40 másodperc (Intel Core2 duo, E8500, 3.2GHz, 2GB Ram)... Sajnos az új gép letöltése gombot nem találom a Microchip honlapján.
(#) watt válasza Hp41C hozzászólására (») Máj 24, 2014 /
 
Nekem egy 4magos gépem van, de nálam is négycsillagosan lassúnak tűnt.
De akkor ki az aki használja és ha nem, akkor erről miért nem tudnak a készítők? Pedig azt hittem, hogy ilyesmi csak itthon fordulhat elő...
(#) Hp41C válasza watt hozzászólására (») Máj 24, 2014 /
 
Azt hiszem, hogy ugyan az a viselkedés húzódik meg mögötte, ami a Win95 kezdeti korszakában történt. Az amerikai viszonyok közötti leglassabb gépeken is elfogadhatóan működött, de nálunk kivárhatatlanul lassú lett. Ezekre a körülményekre ott nem is számítanak. Náluk sokáig íratlan törvény volt, hogy évente - kétévente le kell cserélni a gépeket. Nekem sajnos nincs rá lehetőségem, keretem...
Ehhez a Java korszakhoz igen sok RAM kell (a fórumukon is a Java által kezet memória növelését ajánlják), de egy régi gépbe már nem is kapsz (megbízható forrásból) memóriát. A javasolt méret meghalaja a gépemben levő összes kapacitást..
Ha több Java -s programod is van, akkor igen nagy HDD -t is be kell szerezni. Hogyan is lehet egy Java -ra épülő program független a kb. hetenként átírt Java -tól? A futtató tartalmazza azt a verziót, amire kifejlesztették. Egy MpLabX, egy Eclipse, egy adóbevallás program = 3 java rendszer egy gépen...
A hozzászólás módosítva: Máj 24, 2014
(#) AZoli válasza watt hozzászólására (») Máj 24, 2014 /
 
Én év elején feltettem egy 2 magos 3GHz 4GRAM gépre 64bit Win7 alá, lassabb volt ugyan mint a v.8.92, de használható. Aztán 1 hónapra rá a IBM T42 laptopomra 1,7GHz 1,5G RAM WinXP alá, (ettől nagyon féltem hogy használhatatlan lesz, nem is igazán hittem benne) de nem sokkal lassabb mint a nagy gépen, feltételezem az XP miatt. Azóta kezdem megszokni, vannak nehezen viselhető dolgai, de már nem kezdenék új projectet a régiben. Összességében több a jó tulajdonsága mint a rossz szerintem, bár bőven van még mit szögelniük rajta.
(#) bocios válasza Hp41C hozzászólására (») Máj 25, 2014 /
 
Hát szereti a memóriát az már tuti, munkahelyen (Java fejlesztés, sok futó Java-s dolog) 16GB RAM és 2db 4magos CPU elég brutális bár szerintem ez egy picit már overkill.
(#) zenetom válasza Hp41C hozzászólására (») Máj 25, 2014 /
 
Nálam az Android emulátora le se bírja futtatni a buildolt apk programot.
Intel i5 proci, 4GB RAM, meg rendes vidikari kell hozzá hivatalosan legalább...
(#) icserny válasza watt hozzászólására (») Máj 25, 2014 /
 
Idézet:
„Nekem egy 4magos gépem van, de nálam is négycsillagosan lassúnak tűnt.”
És ha mindezt csak arra használod, hogy egy PIC12-be szánt párszáz bájtos programot elkészíts, akkor enyhén szólva ordító az aránytalanság. Pedig a Code::Blocks-ra is alapozhattak volna...
(#) watt hozzászólása Máj 25, 2014 /
 
Sziasztok! Most megint feltettem kipróbáltam, nem tetszik. Én arra lennék kíváncsi, valójában mi volt az ok, amiért Javat választottak!? Nem hiszem, hogy a platform függetlenség. Mindennek magvena valós oka és az nem mindig tetszik az embereknek... A gond, hogy ettől gyorsabb nem lesz, még ha el is viseli az ember, de a sima régi egy F1-es hozzá képest.
A hozzászólás módosítva: Máj 25, 2014
(#) watt hozzászólása Máj 25, 2014 /
 
Egy érdekes projectben vagyok benne és eddig nem nagyon használtam EUSART TX-re megszakítást. Ti szoktátok használni? Baromi élvezetes, hogy szinte semmi időt nem vesz el a fő száltól, még is kitolja amit ki kell, automatán kezeli az RS485 irányokat és ennek ellenére nagyon rövid a kód és kényelmes használni és az esetleges sorbanállást is meg lehet oldani! Igaz ez csak akkor érdekes, ha nincs idő, illetve ha sok adatot akarunk elküldeni és közben mással is kéne foglalkozni. Először egyébként a gyári Ethernet stack mellé kellett ilyen megoldást használnom, mert az eléggé el van csesszintve, magában működik, de hozzá nem nagyon lehet tenni semmit, ami időigényes, csak trükkökkel...
A hozzászólás módosítva: Máj 25, 2014
(#) zenetom válasza watt hozzászólására (») Máj 25, 2014 /
 
Én azthiszem egyszer használtam, mikor sok adatot kellett kiküldeni, de akkor is talán csak a flag bitet néztem, maga a megszakítás ki volt kapcsolva. ..szóval mégse használtam.
(#) Hp41C válasza watt hozzászólására (») Máj 25, 2014 /
 
Csak megszakítással kezelem az UART -ot, az adást is. Le is írtam ide többször is.
(#) watt válasza Hp41C hozzászólására (») Máj 25, 2014 /
 
Ezután én is így fogom, akkor is ha nem indokolt. A vételt eddig is, azt másképpen nem is nagyon lehet...
Lehet hülye kérdés, de akkor te is úgy kezeled, hogy előkészíted a puffert, beállítod a hosszt majd engedélyezed a megszakítást és a többit a megszakításban futó pár sor elintézi?
Nekem így néz ki a megszakítás most:
  1. //EUSART1 TX1 INT Küldés (RS485)
  2. if (PIE1bits.TX1IE && PIR1bits.TX1IF){
  3.         if(TX1_cik>Data_TX1_Size){
  4.                 PIE1bits.TX1IE=Ki;              // TX megszakítás kikapcs
  5.                 RS485_Vetel_1();                //Adás végén vételre váltunk
  6.         }else{
  7.                 RS485_Adas_1();        
  8.                 TXREG1=TX1_DataPointer[TX1_cik];
  9.                 TX1_cik++;     
  10.         }                      
  11. }

Ezt ebből hívom:
  1. void TX1_Send_CRC(unsigned char Size, unsigned char* Buffer){
  2.         unsigned int CRC_Ertek_int;
  3.         CRC_Ertek_int=Modbus_CRC16(Buffer, Size);
  4.         Buffer[Size++]=CRC_Ertek_int >> 8;      //CRC High
  5.         Buffer[Size++]=CRC_Ertek_int;           //CRC Low                                              
  6.         Data_TX1_Size=Size;                             //Adatcsomag hossza;
  7.         TX1_cik=0;
  8.         TX1_DataPointer=Buffer;        
  9.         PIE1bits.TX1IE=Be;              //Adás indítása TX1 megszakítás engedélyezésével.
  10. }
A hozzászólás módosítva: Máj 25, 2014
(#) watt válasza zenetom hozzászólására (») Máj 25, 2014 /
 
Szóval akkor mégsem!
(#) dani9228 hozzászólása Máj 26, 2014 /
 
Üdv! Tudnátok ajánlani egy "olcsó", és minimum 32 I/O
lábú pic- et? Idáig 18f452 vel dolgoztam, esetleg ahhoz hasonló is jó lenne.
Köszi!
(#) Hp41C válasza watt hozzászólására (») Máj 26, 2014 /
 
Ciklikus bufferrel használom. A TX megszakítás betölti TXREG -be a következő karakter, ha van. Ha nincs TXIE = 0. Ha küldeni kell valamit, beírom a pufferbe és TXIF = 1.
  1. void low_int (void)   //Low megszakítás lekezelése
  2. {
  3.         if (PIR1bits.RCIF)
  4.         {
  5.                 if (RCSTA & 0x06)
  6.                 {
  7.                         RCSTAbits.CREN = 0;
  8.                         WREG = RCREG;
  9.                         RCSTAbits.CREN = 1;
  10.                 }
  11.                 else
  12.                 {
  13.                         UARTReceiveBufferWp &= sizeof (UARTReceiveBuffer) - 1;
  14.                         UARTReceiveBuffer[UARTReceiveBufferWp++] = RCREG;
  15.                         UARTReceiveBufferChars++;
  16.                 };
  17.         };
  18.  
  19.         if ((PIR1 & PIE1 & 0x10))
  20.         {
  21.                 if (UARTTransmitBufferChars)
  22.                 {
  23.                         UARTTransmitBufferRp &= sizeof (UARTTransmitBuffer) - 1;
  24.                         TXREG = UARTTransmitBuffer[UARTTransmitBufferRp++];
  25.                         UARTTransmitBufferChars--;
  26.                 };
  27.                 if (!(UARTTransmitBufferChars))
  28.                 {
  29.                         PIE1bits.TXIE = 0;
  30.                 };
  31.         };
  32. } // End low_int
(#) Hp41C válasza dani9228 hozzászólására (») Máj 26, 2014 /
 
18F4520, 18F4620, 18F46K20, 16F1939, 16F1937 stb.
(#) watt válasza Hp41C hozzászólására (») Máj 27, 2014 /
 
Szia!
UARTTransmitBufferChars mi tölti fel?
Ha jól értem, ez csak ASCII karakterkódokkal működik a sizeof miatt, nem?
Idézet:
„Ha küldeni kell valamit, beírom a pufferbe és TXIF = 1.”

A TXIF-et, nem a TXIE-t állítod be?
A hozzászólás módosítva: Máj 27, 2014
(#) Hp41C válasza watt hozzászólására (») Máj 27, 2014 /
 
Ez tölti fel. A TXIE -t állítom, csak elírtam.
  1. void UartSend(unsigned char c)
  2. {
  3.         UARTTransmitBufferWp &= sizeof (UARTTransmitBuffer) - 1;
  4.         UARTTransmitBuffer[UARTTransmitBufferWp++] = c;
  5.         UARTTransmitBufferChars++;
  6.         PIE1bits.TXIE = 1;
  7. }
(#) Kisvé hozzászólása Máj 28, 2014 /
 
Helló!

Van egy SPI-os D/A, pl ez: Bővebben: Link
És van egy PIC, név szerint dsPIC33EP128MC502.
Nagy meglepődéssel tapasztaltam, hogy PIC SPI Masterként viselkedve nem tudja "értelmesen" kezelni az SS lábat, hanem csak egy szinkronizációs impulzust tud rá adni, ahelyett, hogy lehúzná, míg küldi az adatokat. A feladat végül az lenne, hogy DMA-val lehessen SPI-ra adatokat küldeni. Azonban mivel a D/A-k általában a CS felhúzására tekintik befejezettnek a küldést már nem is olyan egyszerű a helyzet, hiszen az SS láb nem tud "menni magától".
Van valami elképzelésetek, hogy mit lehetne erre kitalálni? Vagy ha tudtok olyan D/A-t, aminek jó ez szinkronizációs impulzus megoldás, akkor is járható út (bár én még soha életemben nem láttam ilyet...)

Köszi előre is!
(#) watt válasza Hp41C hozzászólására (») Máj 28, 2014 /
 
Rosszul gondolom, hogy minden elküldendő karakterhez meg kell hívnod ezt a rutint? Mert a UARTTransmitBufferChars++; csak 1-be állítja a változót, ami a megszakításban azonnal kilépést okoz (UARTTransmitBufferChars--; ), mert a megszakítást azonnal engedélyezed, tehát a karakter ki fog menni rögtön. Miért jó ez?
Közben kezd leesni a ciklikus puffer, de azért várom a megerősítést!
A hozzászólás módosítva: Máj 28, 2014
Következő: »»   1177 / 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