Fórum témák

» Több friss téma
Fórum » PIC - Miértek, hogyanok haladóknak
Lapozás: OK   1053 / 1320
(#) potyo válasza shine207 hozzászólására (») Feb 16, 2012 /
 
Mármint hol fogad el csak 1F-et?
(#) shine207 válasza potyo hozzászólására (») Feb 16, 2012 /
 
Szia potyo!

SETF TRISC

TRISC = 0x1F
(#) potyo válasza shine207 hozzászólására (») Feb 16, 2012 /
 
És mi a hibaüzenet, ha olyat írsz, amit nem fogad el?
(#) shine207 válasza potyo hozzászólására (») Feb 16, 2012 /
 
Ezt most nem értem, hol kapok hiba üzenetet?

MPLAB + ICD2 debuggerel dolgozok

Egy másik PIC-re írt programomat akartam átrakni egy új hardverre és PIC-re, de nem tudom az RC7 lábra tervezett bemenetemet életre kelteni.
(#) potyo válasza shine207 hozzászólására (») Feb 16, 2012 /
 
Azt írod, a TRISC = 0x1F-et fogadja el csak. Akkor mi történik, ha ehelyett pl. 0x2F et írsz?

Kicsit pontosabban is leírhatnád a problémádat, és csatolj kódrészletet, hogy mit hogyan állítasz.
(#) shine207 válasza potyo hozzászólására (») Feb 16, 2012 /
 
Debugger próbáltam közvetlenül a regisztert módosítani /0xFF/ majd lépj egyet és látom, hogy 0x1F-let az értéke. Bármit elfogad ami nem nagyobb mint 1F de ha nagyobbat írok leveszi a többletet.

Persze az adatlapban lévő PORTA LATA TRISA beállításakor sem meggy a dolog.
(#) shine207 válasza potyo hozzászólására (») Feb 16, 2012 /
 
ANSEL = 0
ANSELH = 0

PORTC = 0
LATC = 0
TRISC = 0xFF

SSPADD = 5
SSPSTAT = 0
SSPCON1 = 0x28
SSPCON2 = 0
(#) trudnai válasza shine207 hozzászólására (») Feb 16, 2012 /
 
Debugger alatt szimulatort ertesz? Nem lehet, hogy az a hibas? (Nem ez lenne az elso eset)
(#) shine207 válasza trudnai hozzászólására (») Feb 16, 2012 /
 
Szia trudnai!

Nem szimulátorban megy, de valós debugolásnál jön elő a próbléma.
(#) paci hozzászólása Feb 17, 2012 /
 
Sziasztok !

Abban kérném a segítségeteket hátha tudtok nekem segíteni abban, hogy PIC mikrokontrollerre hol tudnék olyan matematikai függvényeket (acos, cos, sin ) találni amelynek az eredménye 6 tizedes jegynél több ( 1.047198 ). Amit ismerek C fordító ( High tech, Mikroe ) az csak 6 tizedes jegyig adja meg az eredményt.

Köszönöm Sanyi
(#) Hp41C válasza paci hozzászólására (») Feb 17, 2012 /
 
Szia!
A sin, cos Taylor sorba fejtett alakja (1/x)^n alakú tagokból all. Ezeket a tagokat számolja a fordítóban levő rutin is, míg a legutoljára hozzáadott tag abszolut értéke egy bizonyos érték alá nem csökken. Itt megint előjön a számítási pontosság: A 6 tizedes jegy kb. 20 bites alapot igényel. A 32 bites double 24 bites alapot tartalmaz.
(#) vendeg9898 hozzászólása Feb 19, 2012 /
 
Sziasztok!
Írtam egy programot amiben növelem az "osszes" változó értékét 10-el. Az értéket felbontom ezresekre százasokra tízesekre egyesekre. Majd elmentem ezeket a belső EEpromba. A PIC bekapcsolásakor pedig újra olvasom és az "osszeg" növelése onnan folytatódik. Ez működik 250-ig néha 300-ig szépen felbontja és a bekapcsoláskor ki is írja hogy PL.: 300 esetén 0 3 0 0. Viszont mikor 310-et kéne írnia akkor ezt kapom helyette 0 3 25 6. Néha ezt 250 után csinálja természetesen akkor 0 2 25 6-os értéket ír. Tudna valaki segíteni?

  1. #include <16F877A.h>
  2. #FUSES NOWDT,HS,NOPUT,NOPROTECT,BROWNOUT,NOLVP,NOCPD,NOWRT  
  3. #use delay(clock=20000000)
  4. #zero_ram
  5.  
  6.  
  7. #include<lcd420.c>
  8. unsigned int ezres,szazas,tizes,egyes;
  9. unsigned int16 ezresv,szazasv,tizesv,egyesv;
  10. unsigned int32 osszeg,osszesl,osszes;
  11.  
  12.  
  13. void felbont()
  14. {
  15.     osszesl=0;
  16.     osszeg=0;
  17.     ezres=0;
  18.     szazas=0;
  19.     tizes=0;
  20.     egyes=0;
  21.                                  
  22.    osszesl=osszes;            
  23.    
  24.    
  25.    ezres=osszesl/1000;
  26.    write_eeprom(0x0,ezres);
  27.    osszesl=osszesl-(ezres*1000);                
  28.  
  29.    szazas=osszesl/100;
  30.    write_eeprom(0x1,szazas);
  31.    osszesl=osszesl-(szazas*100);
  32.    
  33.    tizes=osszesl/10;
  34.     write_eeprom(0x2,tizes);
  35.    osszesl=osszesl-(tizes*10);
  36.    
  37.     egyes=osszesl%10;
  38.  
  39.     write_eeprom(0x3,egyes);
  40.    
  41.  
  42. }
  43.  
  44.      
  45.  
  46. void beallitasok()
  47.       {
  48.            
  49.             ezres=read_eeprom(0x0);
  50.             szazas=read_eeprom(0x1);
  51.             tizes=read_eeprom(0x2);
  52.             egyes=read_eeprom(0x3);
  53.             ezresv=ezres*1000;
  54.             szazasv=szazas*100;
  55.             tizesv=tizes*10;
  56.             egyesv=egyes;
  57.             osszes=ezresv+szazasv+tizesv+egyesv;
  58.            
  59.       }
  60.  
  61.  
  62. void main() {
  63.    lcd_init();
  64.    beallitasok();
  65.    printf(lcd_putc, "\f%u %u %u %u\n %u",ezres,szazas,tizes,egyes,osszes);
  66.    delay_ms(3000);
  67.    
  68.    
  69.      
  70.  for(;;)
  71.  {
  72.       osszes=osszes+10;
  73.       felbont();
  74.    
  75.  
  76.       printf(lcd_putc, "\fOsszes:%u"osszes);
  77.      
  78.       delay_ms(400);
  79.      
  80.    }
  81.  
  82. }
(#) Stefan válasza vendeg9898 hozzászólására (») Feb 19, 2012 / 1
 
Valami a felbont függvénnyel lesz, bár első ránézésre jó.
Miért nem tárolod le 2 bájton az EEPROMban simán?

write_eeprom(0x0, osszes/256);
write_eeprom(0x1, osszes%256);

osszes = read_eeprom(0x0)*256 + read_eeprom(0x1)
(#) vendeg9898 válasza Stefan hozzászólására (») Feb 19, 2012 /
 
Köszönöm erre nem is gondoltam megpróbálom. Én is arra gyanakodtam mert ugye mindig egy adott pontnál és annak a többszöröseinél hibázik pl 300 600 900. De a függvény elméletileg jó. 100 szor átnéztem. Köszi még egyszer
(#) Hp41C válasza vendeg9898 hozzászólására (») Feb 19, 2012 / 1
 
Szia!

Sajnos a 1/10 egy végtelen kettedes tört...
Csináld fordítva:

  1. void felbont()
  2. {
  3.    osszesl=osszes;            
  4.  
  5.    egyes=osszesl%10;
  6.    osszesl=osszesl/10;
  7.    tizes=osszesl%10;
  8.    osszesl=osszesl/10;
  9.    szazas=osszesl%10;
  10.    osszesl=osszesl/10;
  11.    ezres=osszesl%10;
  12.  
  13.     write_eeprom(0x3,egyes);
  14.     write_eeprom(0x2,tizes);
  15.    write_eeprom(0x1,szazas);
  16.    write_eeprom(0x0,ezres);
  17. }

Ez 7 időigényes osztást tartalmaz...
Minek ennyit osztogatni, egy egyszerű léptetős megoldás található itt, ami tetszőleges számjegyig bővíthető...
(#) vilmosd válasza vendeg9898 hozzászólására (») Feb 19, 2012 / 1
 
Szerintem egyszerubb lenne a helyzeted ha az EEPROM-ban csak az "osszes" valtozot mentened, az atszamitas csak a kijelzes elott tortenne meg. Igy csak 2 byte irasa es olvasasa szukseges. Mellekelek 2 fvenyt ami 16 bites int erteket irja, valamint olvassa az EEPROM-ba.
  1. #define INT_EEPROM_ADDRESS  int8
  2. // Purpose:    Write a 16 bit number to internal eeprom
  3. // Inputs:     1) An eeprom address
  4. //             2) The 16 bit number to write to internal eeprom
  5. // Outputs:    None
  6. void write_int16_eeprom(INT_EEPROM_ADDRESS address, int16 data)
  7. {
  8.    int8 i;
  9.  
  10.    for(i = 0; i < 2; ++i)
  11.    {
  12.      write_eeprom(address + i, *((int8 *)(&data) + i));
  13.    }
  14. }
  15.  
  16.  
  17. // Purpose:    Read a 16 bit number from internal eeprom
  18. // Inputs:     An eeprom address
  19. // Outputs:    The 16 bit number read from internal eeprom
  20.  
  21. int16 read_int16_eeprom(INT_EEPROM_ADDRESS address)
  22. {
  23.    int8  i;
  24.    int16 data;
  25.  
  26.    for(i = 0; i < 2; ++i)
  27.    {
  28.      *((int8 *)(&data) + i) = read_eeprom(address + i);
  29.    }
  30.  
  31.    return(data);
  32. }
(#) vendeg9898 hozzászólása Feb 19, 2012 / 1
 
Nagyon szépen köszönöm a válaszokat Hp41C-nek és vilmosd-nek! Jó megoldás használom is! Köszi!
(#) maya711 hozzászólása Feb 20, 2012 /
 
Helló,mindenki! Többszörös PWM-et szeretnék, de csak azonos (TMR2) frekivel csinálja. MIÉRT? De hardveresen ezt még nem próbáltam; lehet hogy csak az MPLAB nem képes? A mellékelt kód egy jóval nagyobb program részlete. Előre is köszönöm a segitséget.
(#) Ideiglenes válasza maya711 hozzászólására (») Feb 20, 2012 /
 
A banksel-ek ott vannak a megfelelő helyen? Nekem ilyenen szoktak elcsúszni a dolgok.
(#) Gál Norbert hozzászólása Feb 21, 2012 /
 
Helló

Én egy kerék fordulatszámát szeretném mérni, PICel a kerékre raktam mágneseket amik egy hall jeladó előtt haladnak el, ezt vezetem bele a picbe. A probléma az, hogy játékautó motor adja a hajtást és nagyon sok zavart termel. Ha úgy írom meg a programot, hogy várja meg a PIC amíg logikai 1est kap a hall jeladótól, aztán számolja hány órajel telik el mire logikai 0 lesz, akkor tökéletesen működik minden, viszont a PICnek mást is kéne csinálnia, ezért úgy gondoltam megszakítással oldom meg, csakhogy itt a le- fel- futó élre következik be a megszakítás és úgy veszem észre a motortól jövő zavarjelre is megszakad a program, ha kézzel hajtom a kereket akkor minden tökéletes. A motoron van soros tekercs és tele van pakolva kondival(azt hittem egy életre megoldódik a zavargerjesztése).

Van valami logikai áramkör komparátor amivel ezt meglehetne oldani vagy bármi más? Az egész egy 7,2V Nimh aksiról megy és sajnos más táplálás nem lehetséges.
(#) trudnai válasza Gál Norbert hozzászólására (») Feb 21, 2012 /
 
Meg kell szurnod a tapot ami a PIC fele megy. Hogy nez ki jelenleg a kapcsolasod? (Rajzold le es tedd be a kepet)
(#) mrgrassy hozzászólása Feb 21, 2012 /
 
Sziasztok egy furcsa kérdéssel fordulok hozzátok.
Azt szeretném kérdezni, hogy az ICD 3-as PIC programozóhoz árulnak e az rj12-es csatlakozóvégre átalakítót olyanra gondolok amibe beletudom rakni rögtön a PIC-et ?
(#) trudnai válasza mrgrassy hozzászólására (») Feb 21, 2012 /
 
Vehetsz valami ilyesmit is, de szerintem ezt borzalmas egyszeru otthon is ossze dobni... Kell hozza egy RJ12 aljzat, egy ZIF foglalat, es ha dugdosos probapanelen rakod ossze akkor meg tuskesorok sem kellenek a jumpereleshez...

Ha olcsobb kell akkor pedig ZIF helyett DIL tokot hasznalsz es minden tipusra kulon maratsz egy panelt igy jumperelgetned sem kell...
(#) mrgrassy válasza trudnai hozzászólására (») Feb 21, 2012 /
 
Hát lehet maradok az AC162069-nél egy egy vezetél aminek a vége tüskés és simán befér az ic lába mellé az univerzális foglalatba például vagy lehet csinálok hozzá egy kisebb panelt
(#) maya711 válasza Ideiglenes hozzászólására (») Feb 21, 2012 /
 
"banksel CCP1CON;...5. bank inic" jó kell legyen, mivel CCP1CON (0293H) és CCPTMRS (029E) azonos bankban vannak a manuál szerint. CCPTMRS felelős a timerek PWM-hez hozzárendeléséért.
Elküldtem kérdésem a melléklettel együtt MICROCHIPnek is már, de fülükbotjátsem...
(#) sukka hozzászólása Feb 23, 2012 /
 
Sziasztok! Lenne egy olyan kérdésem, hogy nem-e tud valaki olyan programot, vagy módszert amivel tudom tesztelni a megírt programomat. A probléma valójában az, hogy amit ismerek program az a pic simulator ide, ami nagyon jó lenne, viszont a hét 5 napjában koleszba vagyok ahol olyan gépek vannak amikre nem tudok telepitteni semmit, és úgy ha felmásolom egy pendrive-ra és onnan akarom indittani hibaüzenetet ír ki. Valaki nem tudna erre megoldást? Előre is köszönöm
(#) mrgrassy hozzászólása Feb 23, 2012 /
 
sziasztok azt szeretném kérdezni hogy hogyan tudom beállítani az ICD3-on hogy a PIC (16f628A) a programozóról kapja a feszültséget bármikor beállítom ki írja hogy nem sikerült beállítani a feszültséget az ICD-3on és nem akar semmit se ki olvasni. mit tegyek ? mit rontottam el ?
(#) mrgrassy hozzászólása Feb 23, 2012 /
 
Target Device ID (00000000) does not match
expected Device ID (000007c0). If you experience persistent
problems communicating, the ICD 3 test interface can be
used to help diagnose the problem.

Ezt az üzenetet kapom ha külön adok rá feszültséget.
(#) icserny válasza mrgrassy hozzászólására (») Feb 23, 2012 /
 
MPLAB-ban ha beállítottad a Programmer vagy Debugger eszköznek az ICD3-at, akkor látogasd meg a Programmer/Settings... menüpontot és a Power lapon tegyél pipát a Power target cicuit from ICD3 felirat elé!

(Ja, nem volt még ICD3 a kezemben, csak megnéztem a menüpontokat...)
(#) mrgrassy válasza icserny hozzászólására (») Feb 23, 2012 /
 
Ezt meg tetem utána fel urgik egy ablak és ha rányomok hogy OK akkor kiszedi a pipát a beállításokból.
Ha meg külön adok neki tápot akkor
ICD3Err0086: Target Device ID (00000000) does not match
expected Device ID (000007c0). If you experience persistent
problems communicating, the ICD 3 test interface can be
used to help diagnose the problem.

Ezt az üzenetet dobja fel :S
Következő: »»   1053 / 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