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   57 / 118
(#) icserny válasza Dempsey hozzászólására (») Ápr 25, 2011 /
 
A problémádra sokféle megoldás elképzelhető. Nem muszáj ágyúval lőni verébre. A legegyszerűbb megoldás az, ha átszervezed a főprogramot.

A feltételvizsgálatokból vegyél ki minden késleltetést, s gondolkodj olyan méretű időszeletekben, amelynek minden késleltetésed egész számú többszöröse (pl. 50 ms).

A főprogramban egyetlen végtelen ciklus legyen, melyben a feltételvizsgálatok elhanyagolható időtartamúak, s a ciklusmag végén van egyetlen fix idejű késleltetés. Minden más késleltetés ezeknek a ciklusoknak a számlálgatásából áll. Tehát számlálókat inkrementálsz vagy dekrementálsz, s amikor a kívánt értéket elérted,akkor kell akcióba lépni (LED állapotváltás).

Ha megbarátkozol a véges állapotgép módszerrel, akkor gyerekjáték lesz a dolog:csupán az állapotváltások feltételeit kell figyelgetni.
-----------------------------------------------------
A következő fokozat majd az lehet, ha az 50 ms-os időszeleteket valamelyik timer megszakításaival időzíted, s a főprogramnak szemaforral jelzed az időszelet leteltét.
(#) sysy válasza potyo hozzászólására (») Ápr 26, 2011 /
 
Gondolod, hogy ez lehet a probléma lényege?
(#) szabo.gth hozzászólása Ápr 28, 2011 /
 
Sziasztok!
Valaki el tudná küldeni nekem emailben az első oldalon közzétett alkalmazást? (CCS compiler) A link sajnos már nem elérhető. Nem olvastam végig az összes oldalt, csak az utolsó párat és azok között nem találtam.
Köszönöm előre is
G
(#) icserny válasza szabo.gth hozzászólására (») Ápr 28, 2011 /
 
Ez nem warez fórum! Egyébként nem muszáj minden oldalt végigolvasni, azért van a kereső (K gomb).
(#) Meggányver hozzászólása Máj 26, 2011 /
 
Sziasztok!

Van egy Nokia 3510i színes kijelzőm, Pic18F2620 -al működik is szépen. Képet akarok megjeleníteni és az lenne a kérdésem, hogy hogyan tudnék egy képből hexa kódot generálni? Van valakinek esetleg ilyen segéd progija?
(#) trudnai válasza Meggányver hozzászólására (») Máj 26, 2011 /
 
Ilyesmire gondolsz?

  1. $ od -tx1 filenev.ext | cut -d' ' -f2-
  2.  
  3. 25 50 44 46 2d 31 2e 31 0d 0a 25 e2 e3 cf d3 0d
  4. 0a 31 20 30 20 6f 62 6a 0d 0a 3c 3c 0d 0a 2f 43
  5. 72 65 61 74 69 6f 6e 44 61 74 65 20 28 44 3a 31
  6. 39 31 30 32 31 31 31 31 31 31 30 39 31 35 29 0d
  7. 0a 2f 50 72 6f 64 75 63 65 72 20 28 5c 33 37 36
  8. 5c 33 37 37 5c 30 30 30 41 5c 30 30 30 63 5c 30
  9. 30 30 72 5c 30 30 30 6f 5c 30 30 30 62 5c 30 30
  10. 30 61 5c 30 30 30 74 5c 30 30 30 20 5c 30 30 30
  11. 44 5c 30 30 30 69 5c 30 30 30 73 5c 30 30 30 74
  12. 5c 30 30 30 69 5c 30 30 30 6c 5c 30 30 30 6c 5c


UI: Vagy esetleg:
  1. $ od -tx1 filenev.ex | cut -d' ' -f2- | sed -e "s/\([[:xdigit:]]\{2\}\)/0x\1,/g"
  2. 0x25, 0x50, 0x44, 0x46, 0x2d, 0x31, 0x2e, 0x31, 0x0d, 0x0a, 0x25, 0xe2, 0xe3, 0xcf, 0xd3, 0x0d,
  3. 0x0a, 0x31, 0x20, 0x30, 0x20, 0x6f, 0x62, 0x6a, 0x0d, 0x0a, 0x3c, 0x3c, 0x0d, 0x0a, 0x2f, 0x43,
  4. 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x65, 0x20, 0x28, 0x44, 0x3a, 0x31,
  5. 0x39, 0x31, 0x30, 0x32, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x30, 0x39, 0x31, 0x35, 0x29, 0x0d,
  6. 0x0a, 0x2f, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x72, 0x20, 0x28, 0x5c, 0x33, 0x37, 0x36,
  7. 0x5c, 0x33, 0x37, 0x37, 0x5c, 0x30, 0x30, 0x30, 0x41, 0x5c, 0x30, 0x30, 0x30, 0x63, 0x5c, 0x30,
  8. 0x30, 0x30, 0x72, 0x5c, 0x30, 0x30, 0x30, 0x6f, 0x5c, 0x30, 0x30, 0x30, 0x62, 0x5c, 0x30, 0x30,
  9. 0x30, 0x61, 0x5c, 0x30, 0x30, 0x30, 0x74, 0x5c, 0x30, 0x30, 0x30, 0x20, 0x5c, 0x30, 0x30, 0x30,
  10. 0x44, 0x5c, 0x30, 0x30, 0x30, 0x69, 0x5c, 0x30, 0x30, 0x30, 0x73, 0x5c, 0x30, 0x30, 0x30, 0x74,
  11. 0x5c, 0x30, 0x30, 0x30, 0x69, 0x5c, 0x30, 0x30, 0x30, 0x6c, 0x5c, 0x30, 0x30, 0x30, 0x6c, 0x5c,
(#) vilmosd válasza Meggányver hozzászólására (») Máj 26, 2011 /
 
Gugli mindig segit.
(#) Meggányver válasza trudnai hozzászólására (») Máj 26, 2011 /
 
Igen ilyesmire.
(#) trudnai válasza Meggányver hozzászólására (») Máj 26, 2011 /
 
Ha Mac vagy Linux/Unix geped van akkor a 'cut', 'od' es 'sed' mar rajta kell legyen a gepeden. Ha nem akkor le kellene toltened a UnxUpdates.zip-et innen es kibontanod az exe-ket valahova ahol elered (pl C:\Windows\).

Utana a command line-bol (xterm linuxon, Terminal Mac-en, vagy cmd Windows-on) futtasd le a parancsokat amiket oda irtam a dollar jel moge...
(#) Meggányver válasza trudnai hozzászólására (») Máj 26, 2011 /
 
Rendben köszönöm.
(#) szkrep hozzászólása Jún 1, 2011 /
 
Egy dsPIC33fj256mc710a -t szeretnék használni a fordító legfrissebb verziójával. Az adatlap a 147.oldalon szépen leírja, hogy az órajelet a PLL használatával hogyan állíthatom be, de a fordítóban az eszköz header fájljában a fuse bitek közt még hasonló rövidítéseket sem találok, és egyáltalán olyat sem amiben szerepel valami szám, hogy előosztóra vagy egyébre utaljon (aminek meg van szám a nevében, az egyértelműen brownout reset, és watchdog). A setup_oscillator()-ra sincs olyan paraméter, amivel meg tudom mondani neki, hogy milyen kvarc van rajta, és milyen belső órajelet akarok.
Tud valaki egy helyes #fuses sort adni, hogy mondjuk 10MHz kvarcból hogy születik 80MHz órajel?
(#) vicsys válasza szkrep hozzászólására (») Jún 1, 2011 /
 
  1. #include <33FJ256MC710.h>
  2.  
  3. #FUSES NOWDT                    //No Watch Dog Timer
  4. #FUSES ICS0                     //ICD communication channel 0
  5. #FUSES NOJTAG                   //JTAG disabled
  6. #FUSES NOCOE                    //Device will reset into operational mode
  7. #FUSES NODEBUG                  //No Debug mode for ICD
  8. #FUSES PUT128                   //Power On Reset Timer value 128ms
  9. #FUSES WPOSTS16                 //Watch Dog Timer PostScalar 1:32768
  10. #FUSES WPRES128                 //Watch Dog Timer PreScalar 1:128
  11. #FUSES WINDIS                   //Watch Dog Timer in non-Window mode
  12. #FUSES HS                       //High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD)
  13. #FUSES OSCIO                    //OSC2 is clock output
  14. #FUSES NOCKSFSM                 //Clock Switching is disabled, fail Safe clock monitor is disabled
  15. #FUSES PR_PLL                   //Primary Oscillator with PLL
  16. #FUSES NOTEMP                   //Temparature protection disabled
  17. #FUSES IESO                     //Internal External Switch Over mode enabled
  18. #FUSES NOWRT                    //Program memory not write protected
  19. #FUSES NOPROTECT                //Code not protected from reading
  20. #FUSES NOWRTSS                  //Secure segment not write protected
  21. #FUSES NOSSS                    //No secure segment
  22. #FUSES NORSS                    //No secure segment RAM
  23. #FUSES NOWRTB                   //Boot block not write protected
  24. #FUSES NOBSS                    //No boot segment
  25. #FUSES NORBS                    //No Boot RAM defined
  26. #FUSES NOPWMPIN                 //PWM outputs drive active state upon Reset
  27. #FUSES LPOL_HIGH                //Low-Side Transistors Polarity is Active-High (PWM 0,2,4 and 6)
  28.    //PWM module low side output pins have active high output polar
  29. #FUSES HPOL_HIGH                //High-Side Transistors Polarity is Active-High (PWM 1,3,5 and 7)
  30.    //PWM module high side output pins have active high output polarity
  31.  
  32. #use delay(clock=10000000)

Ilyen PIC-el még nem volt dolgom, de gondolom, hogy valami ilyesmi lehet.
(#) icserny válasza szkrep hozzászólására (») Jún 1, 2011 /
 
Az alkalmazott fordítótól függetlenül a dsPIC33 sorozatnál az az ajánlott módszer, hogy a beépített oszcillátorral induljon (FRC, 7,37 MHz), s menet közben a programod váltson át PLL-re.

Belső oszcillátor és C30 esetében ez így néz ki:
  1. //-- PLL elő- és utószámláló és osztó beállítása
  2.    PLLFBD = 41;                         // M = 43
  3.    CLKDIVbits.PLLPOST=0;                // N1 = 2
  4.    CLKDIVbits.PLLPRE=0;                 // N2 = 2
  5. //-- Órajelgenerátor átkapcsolása: belső FRC és PLL
  6.    __builtin_write_OSCCONH(0x01);
  7.    __builtin_write_OSCCONL(0x01);
  8. //-- Megvárjuk az átkapcsolást
  9.     while (OSCCONbits.COSC != 0b001) {};
  10. //-- Megvárjuk a PLL beállását
  11.     while(OSCCONbits.LOCK!=1) {};

Valami ehhez hasonlót kellene CCS C-ben is csinálnod.
(#) szkrep válasza icserny hozzászólására (») Jún 3, 2011 /
 
  1. //Belso RC:
  2. //#FUSES NOWDT, FRC_PLL, WINDIS, NOJTAG, PUT16,
  3. //#use delay(internal=80M)
  4.  
  5. //Külso órajel:
  6. #FUSES NOWDT, PR_PLL, CKSFSM, IESO, WINDIS, NOJTAG, PUT16,
  7. #use delay(clock=80M, xtal=10M)

Ez lett a megoldás. Ez a fordító komolyan veszi a magas szintű nyelv fogalmát...
(#) tomat5 hozzászólása Jún 8, 2011 /
 
Sziasztok

Egy ideje próbálkozom egy probléma megoldásával de sajnos segítség nélkül nem jutok előre. Egy darabig azt gondoltam, hogy működik a cucc de sajna nem.
16f628a-val szeretnék rs485 ön kommunikálni egy pc-vel. A pc oldal rendben van, írtam egy egyszerű programot amivel tudom a portot írni olvasni. Csináltam egy rs232-485 konvertert az működik. A problémám az, hogy nem működik a getc() a programomban. Printf(), putc() megy. Itt a kód.(már eléggé le lett egyszerűsítve a sok próbálkozás során.)
  1. #include <16F628A.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4. #ZERO_RAM
  5. #FUSES HS,NOWDT,NOPROTECT,NOBROWNOUT
  6. #USE DELAY(CLOCK=4915200)
  7. #USE rs232(baud=19200, xmit=PIN_B2, rcv=PIN_B1,parity=N,bits=8,stop=1,errors)
  8.  
  9. int counter,num_of_char,pchar;
  10. char s_message[16];
  11. char rec_char;
  12. char serial_buffer[16];
  13. char r_message[16];            
  14. int1 ismessage,answer;
  15.  
  16.  
  17. #int_rda
  18. void serial_isr1()
  19. {
  20.        
  21.         if(kbhit())
  22.         {
  23.        
  24.                 rec_char=getc();
  25.                 if(rec_char!='\n')
  26.                 {
  27.                 serial_buffer[num_of_char]=rec_char;
  28.                 num_of_char++;
  29.                 counter++;
  30.                 }
  31.                 else
  32.                 {
  33.                 serial_buffer[num_of_char]=0x00;
  34.                 strcpy(r_message,serial_buffer);
  35.                 num_of_char=0;
  36.                 ismessage=1;
  37.                 output_toggle(PIN_A2);
  38.                 }
  39.         }
  40. }
  41. void main()
  42. {
  43. set_tris_a(0x00);
  44. enable_interrupts(int_rda);
  45. enable_interrupts(global);
  46. rs232_errors=0;
  47. output_low(PIN_B3);
  48.  
  49.  
  50. while(1)
  51. {
  52. if(ismessage)  
  53.         {
  54.  
  55.                 output_toggle(PIN_A3);
  56.                 output_high(PIN_B3);
  57.                 delay_ms(10);
  58.                 printf("RECEIVE_OK\n");
  59.                 delay_ms(2);
  60.                 putc(counter+0x30);
  61.                 delay_ms(2);
  62.                 putc('\n');
  63.                 delay_ms(10);
  64.                 output_low(PIN_B3);
  65.                 ismessage=0;
  66.  
  67.        
  68.         }
  69. }
  70. }

A PIN_B3 mondja meg az SN75176-nak, hogy írok vagy olvasok. A PIN_A3 és A2 csak a hibakeresés miatt van benne, hogy egyáltalán eljut-e a prg addig a pontig. A küldött üzenetet a '\n' zárja. a counter csak azért van, hogy lássam hány karakter érkezett. Ha a printf("RECEIVE_OK\n") helyett azt mondom hogy:printf(r_message) akkor nem érkezik semmi a porton. A RECEIVE_OK és a küldött karakterek száma átjön. Egy if-el és egy kimenettel teszteltem az r_message-t:

  1. if(r_message[0]=0x00)
  2. printf("EMPTY");


Ilyenkor "EMPTY" jön amiből arra következtetek, hogy nem működik a getc(). Ugyanez a megszakítás egy másik programban működik. Szerintem az rs485-öt kezelem rosszul vagy valamilyen időzítési gond lehet de kevés vagyok hozzá hogy rájöjjek. Gyúrom már egy ideje de semmi. Ha valaki tudna segíteni azt megköszönném.
Üdv.
(#) MPi-c válasza tomat5 hozzászólására (») Jún 8, 2011 /
 
Idézet:
„azt mondom hogy:printf(r_message) akkor nem érkezik semmi a porton.”

A getc()-re nem tudok mit mondani, de a printf-nél ez így nem elég még a CCS-nek sem. A kiírás formátumát is meg kell adni: printf("%s",r_message) vagy printf("%s\n",r_message).
(#) tomat5 válasza MPi-c hozzászólására (») Jún 8, 2011 /
 
Szia

Nekem egy másik helyen így működött:
  1. switch( portdata[0])
  2.         {
  3.                 case '%':                            //ha SYN jön keresésnél
  4.                         printf("$");            //akkor ACK
  5.                         break;
  6.                 case '[':                               // lekapcsolódásnál
  7.                         reset_cpu();
  8.                         break;
  9.  
  10.                 case '<':                               // text 1
  11.                         for(index=0;index<17;index++)
  12.                         {
  13.                                 displayed1[index]=portdata[index+1];                           
  14.                         }
  15.                         storeData(1);
  16.                         printf(displayed1);    
  17.  
  18.                         break;
  19.                 case '>':                               // text 2
  20.                         for(index=0;index<17;index++)
  21.                         {
  22.                                 displayed2[index]=portdata[index+1];                           
  23.                         }
  24.                         storeData(2);
  25.                         printf(displayed2);
  26.                         break;
  27.                 case']':
  28.                         {                              
  29.                                 printf(displayed1);
  30.                                 delay_ms(400);
  31.                                 printf(displayed2);
  32.                                
  33.                         }


??
(#) tomat5 válasza tomat5 hozzászólására (») Jún 8, 2011 /
 
Kipróbáltam sajna így sem megy. A baj az, hogy nem íródik semmi a stringbe gets() nél.
(#) trudnai válasza tomat5 hozzászólására (») Jún 8, 2011 /
 
Hol van a gets()? En nem talaltam ilyet a kododban...
(#) tomat5 válasza trudnai hozzászólására (») Jún 8, 2011 /
 
Bocs getc() és nem a stringbe nem kerül semmi hanem a rec_char -ba.
(#) trudnai válasza tomat5 hozzászólására (») Jún 8, 2011 /
 
En tobb problemat is latok a kodban, nem biztos, hogy azok javitasa megoldja a problemad, de ki kell probalni es utana tovabb menni:

1. r_message es ismessage volatile kell legyen!

2. Egy buffer overrun hiba van a beolvasasnal... addig olvasol be, ameddig jonnek a karakterek, igy ha a bejovo string lanc hosszabb, mint amekkor a a bufferben van, akkor a buffer mogotti resz szepen felul irodik!

3. Ugyanigy az strcpy-nel sem ellenorzod a buffereid hosszat!

4. Nincs szinkronizalva az r_message buffered -- tehat pl a foprogramban eppen olvasod azt a buffert, de meg nem ertel a vegeig, es ekozben jonnek tovabbi karakterek, es az interrupt rutinban szepen felul irod...

5. Valtozoid nincsenek inicializalva, mint pl az ismessage vagy a counter es a num_of_char...
(#) tomat5 válasza trudnai hozzászólására (») Jún 8, 2011 /
 
Szia köszi a választ.
-A bejövő stringlánc hosszúságát azért nem ellenőrzöm (egyenlőre) mert a pc ről csak olyat küldök ami biztosan rövidebb mint buffer.
-A strcy nél a két string egyforma hosszú, kell ellenőrizni?
-Lehet hogy rossz a logikám de az ismessage akkor 1 ha megjön a stringlezáró. Amíg ez nem történik meg nem nyúl a főprogram a stringhez. Az üzeneteket én küldöm a pc-ről és mindig csak egyet küldök és várom a választ.
-Inicializáltam a változókat de ugyanaz.
-Már flag-ek is volatile-k de semmi.
Köszi
(#) trudnai válasza tomat5 hozzászólására (») Jún 8, 2011 /
 
Az mindegy, hogy neked mi a szandekod, hogy hany karaktert szeretnel kuldeni, igy is ugy is a kliens oldalon kell ellenorizni, hogy minden rendben van-e. Ilyen allapotban a kodod serulekeny es hibalehetoseget rejteget. Nem jo ezt igy berogziteni.

Az is lehet, hogy csak Te, es kizarolag Te fogod ezt hasznalni, tehat kicsi az eselye, hogy valaki majd megprobalja hibas mukodesre hasznalni az eszkozod (esetleg ezzel anyagi javakat szerezve maganak). Azonban ott vannak mas elemek is: Pl a kommunikacios vonalban hiba tortenik es emiatt leped tul a buffered. Vagy mert egy masik alkalmazas "kozbe dumal" es ezzel megzavarja az eszkozod. Vagy mert a PC oldali szoftveredben is ilyen lazan vannak kezelve a dolgok es ott is tobbet kuldesz ki valami hiba folytan... Hibalehetosegeket nehez lenne mindet felsorolni, ezek kozul egy is eleg, hogy a buffer meretet ellenorizd! Jelen esetben max 15 karaktert + a lezaro 0-t tudod elhelyezni, ezt ellenorizni kell...

A masik: A ket string nem feltetlen egyforma hosszu, jelen esetben a szamukra fenntartott buffer merete azonos. De ez valtohat a fejlesztes soran. Bizhatsz a sajat ellenorzeseben amit a fenti leirasom alapjan bele tettel, azonban celszerubb lenne strncpy-t vagy memcpy-t hasznalni.

Logika: Ellenorzi a foprogramod az ismessage-et, majd bele megy az if agba ha az 1-be valt. Kozben jon egy vagy tobb masik karakter, es a foprogramod futasa felfuggesztodik, es beolvasod a karaktereket es felul irod az r_message-et... Na ezt akartam volt elkerulni, azonban most jobban megnezven a kodot lattam, hogy nem is olvasod ki az uzenetet egyenlore, ugyhogy teljesen mindegy jelen felallasban.

Amugy eloszor interruptok nelkul probaldd meg elerni, hogy a karaktert kiolvassa. Ha az mar megy akkor irdd at megszakitasosra.
(#) tomat5 válasza trudnai hozzászólására (») Jún 8, 2011 /
 
Teljesen jogosak az észrevételeid. Azért butítottam le ennyire, hogy minél rövidebb legyen a kód a hibakeresés miatt. (Már lehet hogy túl rövid lett )
(#) tomat5 válasza tomat5 hozzászólására (») Jún 8, 2011 /
 
Hosszas szenvedés után úgy tűnik működik.
strcpy(r_message, serial_buffer)
helyett:memcpy(r_message, serial_buffer, sizeof (r_message)) lett a befutó.
Igaz, hogy ebben benne van az, hogy hány bájt legyen másolva, de nekem akkor sem egyértelmű hogy miért így jó. Pedig nagyon jó lenne tudni.
Mire leírtam lehet, hogy rá is jöttem. Talán a stringlezáró 0 nem volt ott és így túlcímezte a tömböt?
(#) trudnai válasza tomat5 hozzászólására (») Jún 8, 2011 /
 
Oda teszed a lezaro nullat, azt neztem elotte. A baj az lehet szerintem, hogy kicsi a buffer. pl 16 karakter ley van, es ha a PC-rol 16 karaktert kulsesz, akkor a lezaro az mar a buffereden kivulre esik. Namost ha megnezed a 'serial_buffer' -t koveti az 'r_message', tehat nagy valoszinuseggel a lezaro mar az r_message elejere kerul. Igen am, de a masolaskor az a karakter rogton felul is irodik a serial_buffer elso karakterevel, igy elveszited a lezaro 0-t... Remelem ertheto volt ahogy elmagyaraztam.

Ha valoban a PC-rol 16 karaktert kuldesz, akkor probaldd csak ki megnovelni mindket bufferedet 17-re, es az eredeti koddal kiprobalni.
(#) tomat5 válasza trudnai hozzászólására (») Jún 8, 2011 /
 
Szia
Értem mit mondasz. A memóriában a két tömb egymás után van. Ha túlírom az elsőt, akkor a másodikba írok. A próbálkozások során viszont max 3-4 karaktert küldtem.
(#) trudnai válasza tomat5 hozzászólására (») Jún 9, 2011 /
 
Voltak meg ott egyebek is, pl, hogy a num_of_char nem volt inicializalva, ill hogy egy-egy beerkezett string/sor utan nincs nullazva, igy folyamatosan irodik tovabb a memoriaban, meg ehhez hasonlo dolgok. Na, pl meg ez is lehet:

Bejon a CR karakter, amit a '\n' osszehasonlitas miatt ugy ertekelodik ki hogy megjott a sorvege. Ekkor beteszed a lezaro nullat, beallitod a flag-et, a foprogram meg elkezdene feldolgozni a buffered, minden szep es jo. Csakhogy a DOS es Windows alapu operacios rendszerek egy LF karaktert is oda biggyesztenek, aminek hatasara keletkezik egy megszakitas, ahol a lezaro nullat felul is irod...

De ez csak egy elmelet, mert ugye az LF-nek kellene lennie a '\n', nek, a CR-nek pedig a '\r'-nek nem pedig forditva, ugyhogy ilyen jellegu gondnak sem lenne szabad lennie. Debuggerrel ezt meg kellene vizsgalni, PICkit2 serial analyserrel meg kellene nezni mi jon ki a PC felol stb...
(#) Gál Norbert hozzászólása Jún 15, 2011 /
 
Hello

Tudna valaki segítteni, hogy az alábbi programkód mért nem akar menni?

  1. #include <16F628A.h>
  2.  
  3. //#FUSES NOWDT, NOPUT, NOPROTECT, BROWNOUT, NOLVP, INTRC
  4. #USE delay(oscillator=4000000)
  5.  
  6.  
  7.  
  8.  
  9.  
  10. void kesleltet(int szorzo1,szorzo2){            //szorzo1*szorzo2*100uS=Usecs
  11.         int h,j;                                                           //kesleltet(100,10)=100*10*100=100000uSecs=100mSecs
  12.         for(h=0;h<szorzo1;h++){
  13.                 for(j=0;j<szorzo2;j++){
  14.                         delay_us(100);
  15.  
  16.                 }
  17.         }
  18. }
  19.  
  20. void main(){
  21.  
  22. set_tris_a(0b11111111);
  23.         set_tris_b(0b00000000);
  24.         while(1){
  25.                 output_b(0b11111111);
  26.                         kesleltet(100,100);
  27.         kesleltet(100,100);
  28.         kesleltet(100,100);
  29.         kesleltet(100,100);
  30.         output_b(0b00000000);
  31.                 kesleltet(100,100);
  32.         kesleltet(100,100);
  33.         kesleltet(100,100);
  34.         kesleltet(100,100);
  35.         }      
  36. }


Próbáltam már mindenhogy de sehogy se működik, olyan mintha össze vissza menne az egész, ha csak simán az asztalon van a pic akkor nem történik semmi, de ha elkezdem fogdosni akkor néha bekapcsol a LED, aztán további tapizástól néha elaszik, de az egész teljesen rendszertelenül történik.

A 9es lábán van a LED, 4es lábon tápfeszültség van,5ös láb föld,14es szintén tápfeszültség, 17,18as láb egy kapcsolón keresztül földpontra vankötve(később szeretném majd ezt használni).

2.png

1.png
   
(#) trudnai válasza Gál Norbert hozzászólására (») Jún 15, 2011 /
 
NOWDT, NOMCLR es NOLVP mindenkeppen kellene oda, azonkivul nem tudom 100nF keramia kondit tettel-e nagyon kozel a PIC Vdd es Vss labai koze?
Következő: »»   57 / 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