Fórum témák

» Több friss téma
Fórum » CCS PIC Compiler
 
Témaindító: (Felhasználó 1542), idő: Ápr 3, 2006
Lapozás: OK   112 / 118
(#) Lamprologus válasza potyo hozzászólására (») Dec 30, 2015 /
 
Idézet:
„A PWM hardverből megy, mindegy mekkora a frekvenciája, nem lenne szabad foglalnia a procit.”

Hm .... Logikusnak tűnik ... de mégis bekavar valamit ...
Az LDC kijelző frissítésén látszik, hogy valami változik ha 500Hz-ről felteszem 20kHz-re ...
Timer1-el vezérlem, ami 1ms-ként generál megszakítást, megszakításon belül ezt számolom, 100 megszakítás után főprogramból megy a kijelző frissítése, és "hullámzik" az LCD
(#) Lamprologus válasza Lamprologus hozzászólására (») Dec 31, 2015 /
 
Rájöttem hol szúrtam el!
  1. enable_interrupts(INT_TIMER2);

Ez benn maradt a programba, mert azt hittem engedélyezni kell... Igaz, a megszakításban nem csináltam semmit (üres volt), de mégis alaposan visszafogta a procit.
Mióta nincs engedélyezve a Timer2 interrupts, azóta mindegy milyen frekit állítok be a PWM-nél!
Ez a Hardverből megy dolog vezetett rá a megoldásra. Köszönöm!
A hozzászólás módosítva: Dec 31, 2015
(#) Lamprologus hozzászólása Jan 6, 2016 /
 
Olyan feladatot szeretnék megoldani, hogy PIC-el mérek hőmérsékleteket, és ezeket az értékeket szeretném hálózaton keresztül (pl ESP8266 wifi modul) számítógépre küldeni, és a számítógépen egy web böngészőn megnézni.
A hozzászólás módosítva: Jan 6, 2016
(#) whalaky válasza Lamprologus hozzászólására (») Jan 6, 2016 / 1
 
Sok sikert hozzá!
Ugyan nem értem pontosan mit is akarsz, de örülünk hogy próbálkozol.
Csak megjegyzé képp:
Nem értem miért kéne a mért adatokat számítógépre küldeni, ha úgyis webböngészőn nézed?
Akár ey ajaxal a honlap közvetlenül lekérheti a mért értéket anélkül hogy látszana hogy az nem a szerverről jön.
A hozzászólás módosítva: Jan 6, 2016
(#) Lamprologus válasza whalaky hozzászólására (») Jan 6, 2016 /
 
Ja ... bocs .... A lényeget hagytam ki!

Hogy álljak neki?
Csinált már valaki ilyesmit?
(#) sysy válasza Lamprologus hozzászólására (») Jan 6, 2016 /
 
Csináltunk, és sokkkkkal bonyolultabb, mint a PWM frekit beállítani.
(#) icserny válasza Lamprologus hozzászólására (») Jan 6, 2016 / 1
 
"Hogy álljak neki? "
1. Google: ESP8266 getting started vagy ESP8266 tutorial
2. esp8266.com fórum látogatása
3. esp8266.com/wiki/ tanulmányozása.
4. nodemcu.com felkeresése, tanulmányozása, magas tetszésindex esetén nodemcu firmware telepítése.

A 4. pont miatt nem sok értelmét látom a PIC belekeverésének. Interaktív webszerver mintapéldát itt találsz. Ha keresgélsz a neten, ThingSpeak mintapéldákat is találsz.
(#) Lamprologus válasza sysy hozzászólására (») Jan 6, 2016 /
 
Köszi! Ezt megérdemeltem!
De legalább tanultam a hibámból!
Ha mindig csak olyant csinálok amihez értek, akkor nem fejlődöm!

Ha mondjuk lenne egy mintaprogi, amin átrághatnám magam, az is sokat segítene...

Egyszerűbb lenne-e lényegesen a dolog, ha vezetékes LAN kapcsolat lenne?
A hozzászólás módosítva: Jan 6, 2016
(#) Lamprologus válasza icserny hozzászólására (») Jan 6, 2016 /
 
Sajna ki kell egészítenem még egy ponttal:

0. Megtanulni angolul
(#) icserny válasza Lamprologus hozzászólására (») Jan 6, 2016 /
 
Idézet:
„Ha mondjuk lenne egy mintaprogi”
Olvasd már végig, amit előző hozzászólásomban írtam!
Idézet:
„Egyszerűbb lenne-e lényegesen a dolog, ha vezetékes LAN kapcsolat lenne?”
Nem.

Angol? Addig örülj, amíg nem kínai, japán vagy koreai leírásokból kell kisilabizálni a tudományt! Már nincs messze...
(#) Lamprologus válasza icserny hozzászólására (») Jan 6, 2016 /
 
Természetesen végig olvasom amit írtál!

Az a baj, hogy nekem az angol is kínai!

Mintaprogiból meg próbálok CCS-C keresni, idáig nem sok sikerrel...
(#) icserny válasza Lamprologus hozzászólására (») Jan 6, 2016 /
 
Ha a CCS C-hez ragaszkodsz: Ez a mintaprogram CCS C nyelvűnek tűnik (Pic18f4550 és CCS C 5.025 van említve).

Továbbra is fenntartom, hogy az ebben a hozzászólásban (a VÉGÉN) adott linken található NodeMCU mintapélda százszor egyszerűbb, mint a PIC mikrovezérlővel és az AT parancsokkal való kínlódás.
A hozzászólás módosítva: Jan 6, 2016
(#) Lamprologus válasza icserny hozzászólására (») Jan 6, 2016 /
 
Köszönöm, ezen a programon el csámcsogok egy darabig, aztán meglátom merre tovább!
(#) Lamprologus hozzászólása Jan 10, 2016 /
 
Van egy 4x20-as kijelzőm, azon szeretnék megjeleníteni adatokat, de zabálja a ROM-ot.
Mit kéne máshogy írnom hogy kisebb legyen a kód?

Valami hasonló kiírások lennének, 4-5 képenyő:

  1. lcd_gotoxy(1,1);
  2. printf(lcd_putc,"20%02u.%02u.%02u. %02u:%02u:%02u",ev,ho,nap,ora,perc,masodperc);
  3. lcd_gotoxy(1,2);
  4. printf(lcd_putc,"E/V:%03.0f/%03.0fßC SZ1:%s",Kazan_elore_homerseklet,Kazan_vissza_homerseklet,Szivattyu1_str);
  5. lcd_gotoxy(1,3);
  6. printf(lcd_putc,"P:%03.0fßC SZ2:%s T:%s",Puffer_homerseklet,Szivattyu2_str,Termosztat_str);
  7. lcd_gotoxy(1,4);
  8. printf(lcd_putc,"B:%03.0fßC SZ3:%s",Bojler_homerseklet,Szivattyu3_str);
(#) potyo válasza Lamprologus hozzászólására (») Jan 10, 2016 / 1
 
A printf eleve sok memóriát foglal, ha még float típust is akarsz kiíratni, akkor főleg. Első körben próbáld olyanra megírni a programot, hogy ne legyen benne float típus, ezzel nyersz egy csomó helyet és sebességet. Utána ha ez még mindig nem elég, akkor muszáj lesz a printf helyett saját implementációt készíteni, ami csak a szükséges változótípusokat kezeli.
(#) Lamprologus válasza potyo hozzászólására (») Jan 10, 2016 /
 
Átlakaítottam a float típusokat, signed long-ra de így is kevés a ROM.

Ez mi is pontosan?
Idézet:
„akkor muszáj lesz a printf helyett saját implementációt készíteni, ...”

Első olvasatra ez meghaladja a programozói tudásomat.

Lehet, hogy inkább PIC-et váltok, "hardweresen" nem kell sok átalakítás a PIC16F887-et kicserélni egy PIC18F4550-re.
(#) Lamprologus válasza Lamprologus hozzászólására (») Jan 10, 2016 /
 
Kicseréltem a procit.
Belső oszcillátort használok, elvileg 8MHz-re van állítva de úgy tűnik lassabban megy.
Timer0-val csinálok egy időzítést, amivel vezérlek egy kimenet váltását, elvileg 1mp alatt kéne váltania (16F887-el rendesen csinálta) most viszont kb 4mp alatt vállt.


  1. #fuses INTRC_IO                 //Internal RC Osc, no CLKOUT
  2.  
  3. #use delay(internal=8000000)
  4.  
  5. setup_oscillator(OSC_8MHZ);
  6.  
  7. setup_timer_0(RTCC_INTERNAL|RTCC_DIV_8|RTCC_8_bit);             //1,0 ms overflow


Kell még valami mást is állítani, vagy hol keressem a hibát?

Azt azért jó olvasni hogy ROM 21%
A hozzászólás módosítva: Jan 10, 2016
(#) Lamprologus hozzászólása Jan 14, 2016 /
 
Van egy probléma aminek nem találom az okát.
  1. for(i=0; i<8;i++)
  2. {
  3. write_eeprom((((Beolvasando_erzekelo-1)*10)+i),DS1820_kod[Beolvasando_erzekelo-1][i]);
  4. }

Az EEPROM-ba szeretnék írni... Amíg a beolvasando_erzekelo változó értéke 1 vagy 2 addig nincs is semmi gond, de amikor 3 akkor összesen 10 memória helyet ír át, beírja a megfelelő helyre az adatokat, és az előző adatcsomag utolsó két adatát felülírja az új adatcsomag első 2 adatával.
Ha 4 akkor már 12-t változtat 4 byte-ot az elötte lévő adatokból ír felül.
Ez mitől lehet?
A hozzászólás módosítva: Jan 14, 2016
(#) kissi válasza Lamprologus hozzászólására (») Jan 14, 2016 /
 
Szia!

Az EEPROM-okba az adat egyesével vagy csomagokban mehet. Ha csomagba küldöd, akkor csak bizonyos adat mehet egymás után újabb cím kiküldése nélkül, mert különben újrakezdi az írást! Esetedben úgy látszik 8 adat lehet a lapméret, ha ennél többet írnál, akkor a belső számlálója nullázódik !
(#) Lamprologus válasza kissi hozzászólására (») Jan 14, 2016 /
 
Minden írásnál kiküldöm a címet is!
(#) potyo válasza kissi hozzászólására (») Jan 14, 2016 /
 
18F4550 csak bájtonként tudja írni a belső eepromját.
(#) Lamprologus válasza Lamprologus hozzászólására (») Jan 16, 2016 /
 
Na, rájöttem csodák nincsenek! Ugyan azt a programrészletet 2-szer írtam meg, két különböző függvénybe, így 2-szer csináltam meg a mentést. A gond csak abból volt hogy az egyik helyen 8 byte-al a másikon 10-byte-al toltam el az írást ...
(#) Lamprologus hozzászólása Jan 23, 2016 /
 
USB kapcsolatot próbálgatok ...
  1. #include <18f4550.h>
  2. #device adc=10
  3. #fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN
  4. #USE delay(clock=48000000)
  5. // #define USB_CON_SENSE_PIN PIN_B2
  6. #include <usb_cdc.h>
  7.  
  8. void main()
  9. {
  10.         usb_cdc_init();
  11.         usb_init();
  12.         char c;
  13.  
  14. while(true)
  15.         {      
  16.                 delay_ms(100);
  17.                 output_toggle(PIN_A0);
  18.        
  19.                 usb_task();
  20.                 if (usb_enumerated()){
  21.                 printf(usb_cdc_putc,"\n\rEnumerate ok");
  22.                 if(usb_cdc_kbhit()){
  23.                 c=usb_cdc_getc();
  24.                 if(c=='x'){
  25.                 printf(usb_cdc_putc,"Érkezett X");
  26.                 }
  27.                 if(c=='n')printf(usb_cdc_putc,"Érkezett N");
  28.                 }
  29.                 }              
  30.         }
  31. }

de csak néha működik...
Betöltöm a progit a PIC-be, elindítom ... Windows felismeri - COM8 ... PUTTY csatalkozik ... jönnek mennek az adatok ... egyszer csak windows csipog USB kapcsolat megszakadt, COM8 eltűnt. PUTTY megállt ... aztán windows csipog hogy talált valamit, majd csipog hogy lekapcsolódott az a valami, majd fel ... majd le ... Majd látja a COM8-at de PUTTY nem csatlakozik hozzá ...
Mi lehet a gond?
Próbáltam a késleltetést kivenni hogy az usb_task sűrübben fusson, de úgy is ugyan ez a hibajelenség. Tényleg, milyen sűrün kell futtatni?
A hozzászólás módosítva: Jan 23, 2016
(#) Lamprologus válasza Lamprologus hozzászólására (») Jan 23, 2016 /
 
Bocsi! Megoldódott! Nem a programmal volt a gond!
Két USB kábellel próbáltam korábban, mindkettővel ugyan az volt a hiba, ezért nem gyanakodtam kábelgondra ...végül egy hármadik, rövidebb kábellel is megpróbáltam, és hibátlanul megy!
(#) icserny válasza Lamprologus hozzászólására (») Jan 23, 2016 / 1
 
Idézet:
„Tényleg, milyen sűrün kell futtatni?”

CCS C-hez nem értek, de a Full speed USB előírásaiból következik, hogy lekérdezéses módban elég sűrűn, 1 ms-onként kell tojózni az USB-t. Megszakításos módban már sokkal kevésbé izgalmas, inkább arra kell ügyelni, hogy időben kiürüljenek a bufferek.

Merem remélni, hogy alapértelmezetten a megszakításos módot használja a CCS C USB library.
A hozzászólás módosítva: Jan 23, 2016
(#) Lamprologus válasza Lamprologus hozzászólására (») Jan 25, 2016 /
 
Ment egy darabig ... Most megint kezdi!
Néha felismeri, máskor meg nem.

Próbáltam a késleltetést változtatni, kitörölni ugyan az a jelenség.

Valahol a usb_cdc_init(); usb_init(); nál molyol a program mert a LED-et sem villogtatja.

Nem tudom hol keressem a hibát.
(#) icserny válasza Lamprologus hozzászólására (») Jan 25, 2016 /
 
Kapcsolás hogy néz ki? VUSB lábon a 470 nF rendben van? (Nekem volt már szakadt a bekötése, s az csinált ilyen majdnem-működés állapotot). Minden VDD és GND láb be van kötve?
(#) Lamprologus válasza icserny hozzászólására (») Jan 26, 2016 /
 
MCLR lábon van egy felhúzó, 20MHz kvarc + 2x15pF, 2db VDD és 2db GND bekötve, 1db 100nF a táplábak közé, meg egy USB B aljzat, és 1db 680nF a Vusb lábon.
(#) Lamprologus válasza icserny hozzászólására (») Jan 27, 2016 /
 
Egy logikai analizátor segítségével (Saleae logic) sikerült megállapítanom, hogy amikor megszakad a PC-vel a kapcsolat akkor a D- láb magas szinten van és nem is változik a későbbiek során, pedig a D+ lábon válltozik a jelszint.

Azt hogy tudom megállapítani, hogy miért van a D- on folyamatos L szint?
A PIC tarthatja magas szinten, vagy a PC? Mondjuk más eszköz a PC USB portján hibátlanul működik, szóval ott a hardwer hibát kizárnám. Okozhat-e ilyen gondot egy rossz meghajtó driver?
(#) icserny válasza Lamprologus hozzászólására (») Jan 27, 2016 / 1
 
Előfordult már, hogy meggyűlt a bajom az USB csatlakozókkal:
- USB mini-B csatlakozó egyik-másik érintkezője begyűrődött.
- USB-B csatlakozó (vagy a környéke a panelon) kontakthibás lett.

Kipróbálhatnád a mikrovezérlőt a Microchip MLA valamelyik USB mintaprogramjával! A Device - HID - Custom Demos például kihagyná az USBser.sys drivert, az Device - CDC - Basic Demo pedig ezt a drivert tesztelné (az mchpcdc.inf beetetésére azért szükség lehet az eltérő PID miatt).

A PIC18F4550-hez való előfordított (HEX) demók a Precompiled Demos/PICDEM FSUSB mappában vannak. Az említett mchpcdc.inf "driver" (valójában csak információs fájl) pedig a Tools/USB CDC Serial Demo mappában keresendő.
Következő: »»   112 / 118
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