Fórum témák

» Több friss téma
Fórum » PIC - Miértek, hogyanok haladóknak
Lapozás: OK   268 / 1320
(#) melcher hozzászólása Aug 24, 2008 /
 
sziasztok
A nulláól a robotokig 1. részében két JDM van a. másodiknál a PIC lábkiosztása nem egyezik a PIC16F877-ével
Tudnátok segíteni?
(#) MPi-c válasza melcher hozzászólására (») Aug 24, 2008 /
 
Igen! Olvasd el ezt az írást!
(#) melcher hozzászólása Aug 24, 2008 /
 
köszi mostmár érthető a dolog!
(#) MPi-c válasza melcher hozzászólására (») Aug 24, 2008 /
 
Egyébként tényleg nem egyezik, mert ott egy 18 lábú PIC /Pl.: 16F628, 18F1320/ lábkiosztása szerepel.
(#) melcher hozzászólása Aug 24, 2008 /
 
Nem tudnál esetleg egy jó MPLAB-ot mert én a megadott helyrűl nem tudom letölteni.
(#) MPi-c válasza melcher hozzászólására (») Aug 24, 2008 /
 
Honnan nem jön le? A Microchiptől?
Kicsit nagyobb önállóságot!
(#) melcher hozzászólása Aug 24, 2008 /
 
Ezt se engedi ,nem értem. Az én számítástechnikai ismereteim kimerülnek a Wrld és a Paint használatában.
(#) gyengus válasza melcher hozzászólására (») Aug 24, 2008 /
 
Nekem jó a link.
Esetleg próbáld meg ezt: http://www.microchip.com/mplab/
(#) gyengus hozzászólása Aug 24, 2008 /
 
18F4550 eepromjába szeretnék írni, adatlap alapján próbálkozom C18-ban.
Sajnos nem működik, kiolvasáskor végig 0xFF-et kapok.
Ezt a két függvényt írtam:
  1. void writeToEeprom(byte addr, byte *data, byte size) {
  2.         byte temp = INTCON;
  3.         byte i;
  4.  
  5.         EECON1bits.CFGS = 0;
  6.         EECON1bits.EEPGD = 0;
  7.         INTCONbits.GIE = 0; // megszakítások tiltása!
  8.         EECON1bits.WREN = 1;
  9.         for (i = 0; i < size; i++) {
  10.                 EEADR = addr + i;
  11.                 EEDATA = data[i];
  12.                 EECON2 = 0x55;
  13.                 EECON2 = 0xaa;
  14.                 EECON1bits.WR = 1;
  15.                 while (!PIR2bits.EEIF) ; // várunk az írás végéig
  16.                 PIR2bits.EEIF = 0;
  17.         }
  18.         INTCON = temp; // INTCON regiszter visszaállítása
  19. }
  20.  
  21. void readFromEeprom(byte addr, byte *data, byte size) {
  22.         byte i;
  23.  
  24.         for (i = 0; i < size; i++) {
  25.                 EEADR = addr + i;
  26.                 EECON1bits.EEPGD = 0;
  27.                 EECON1bits.CFGS = 0;
  28.                 EECON1bits.RD = 1;
  29.                 data[i] = EEDATA;
  30.         }
  31. }

Hol rontottam el?
(#) trudnai válasza gyengus hozzászólására (») Aug 24, 2008 /
 
Szia gyengus,

Nem az EEIF-et, hanem a WR-t kellene tesztelni, hogy az iras megotrtent-e mar.
(#) gyengus válasza trudnai hozzászólására (») Aug 24, 2008 /
 
Szia trudnai!

Az adatlap 105. oldalán van egy táblázat, abban ezt írja:
EEIF: Data EEPROM/Flash Write Operation Interrupt Flag bit
1 = The write operation is complete (must be cleared in software)
0 = The write operation is not complete or has not been started
Ezért ezt a bitet figyeltem. (most nézem: interrupt, vagyis megszakítást generálna az írás végén?)
Köszi a tippet, kipróbálom WR teszteléssel!
(#) watt válasza melcher hozzászólására (») Aug 24, 2008 /
 
Nem akarok gonoszkodni, de akkor minek neked az MPLAB? Remélem nem a PIC-es topicban akarsz számítástechnikai kérdéseket felsorakoztatni, mert az MPLAB tisztán ilyen felület. Nem biztos, hogy jó irányból közelíted meg a PIC világot.
(#) trudnai válasza gyengus hozzászólására (») Aug 24, 2008 /
 
Igen, ha megnezed az example 7-3 -at az adatlapban (Data EEPROM Refresh Routine) akkor ott lathato ok hogy hasznaljak. A WR bit csak 1-be allithato, az szoftveres uton nem torolheto, viszont iras befejezesekor az torlodik - ezt kellene figyelni.

Van par mid-range-es PIC amiben az EEPROM modul hibas es ott ez nem mukodik, ott interrupttal es sleep uzemmoddal szoktak a hibat kikerulni, de ugy tudom egyetlen 18F sem tartalmazza ezt a hibat - ha nem megy WR figyelessel sem akkor erdemes esetleg azert atolvasni az Errata doksikat is.
(#) gyengus válasza trudnai hozzászólására (») Aug 24, 2008 /
 
Sajna így se jó. A refresh routine-t is néztem.
A C18 egyik súgójában (hlpC18ug.chm) találtam egy példát, aszerint se működik
  1. void writeToEeprom(byte addr, byte *data, byte size) {
  2.         byte temp = INTCON;
  3.         byte i;
  4.  
  5.         INTCONbits.GIE = 0; // megszakítások tiltása!
  6.         for (i = 0; i < size; i++) {
  7.                 EECON1bits.EEPGD = 0;
  8.                 EECON1bits.WREN = 1;
  9.                 EEADR = addr + i;
  10.                 EEDATA = data[i];
  11. //              EECON1bits.CFGS = 0;
  12.                 EECON2 = 0x55;
  13.                 EECON2 = 0xAA;
  14.                 EECON1bits.WR = 1;
  15.                 while (EECON1bits.WR) ; // várunk az írás végéig
  16.                 //PIR2bits.EEIF = 0;
  17.         }
  18.         EECON1bits.WREN = 0;
  19.         INTCON = temp; // INTCON regiszter visszaállítása
  20. }
  21.  
  22. void readFromEeprom(byte addr, byte *data, byte size) {
  23.         byte i;
  24.  
  25.         for (i = 0; i < size; i++) {
  26.                 EECON1bits.EEPGD = 0;
  27.                 EEADR = addr + i;
  28.                 EECON1bits.RD = 1;
  29. //              EECON1bits.CFGS = 0;
  30.                 data[i] = EEDATA;
  31.         }
  32. }
(#) gyengus válasza gyengus hozzászólására (») Aug 24, 2008 /
 
Működik. Elnézést kérek!
Ez már nekem is fáj: nem a megfelelő változót írtam az eepromba
(#) watt válasza gyengus hozzászólására (») Aug 24, 2008 /
 
Nem 100%, hogy ez segít, de én az adatlap ajánlása szerint, először a címet és az adatot tölteném be, és csak utána engedélyezném az EEPROM írását(WREN).

Szimuláció során megérkezik a subrutinba a cím és az adat rendesen?

A megszakításokat(GIE) elég a EECON2 akciói előtt törölni, és engedélyezni kell a WR bit beállítása után. De ez is csak részletkérdésnek tűnik.

(#) gyengus válasza watt hozzászólására (») Aug 24, 2008 /
 
Köszi, előrébb raktam őket.
Még nem megy a simulálás, inkább kiíratom a kérdéses változókat.
De már működnek a függvények.
(#) watt válasza gyengus hozzászólására (») Aug 24, 2008 /
 
Közben látom hogy sikerült, csak megy az F1- és elég hosszan írtam a választ!
Akkor valószínű, hogy az első saját verzió is működik.
(#) googa hozzászólása Aug 24, 2008 /
 
Nekem senki sem tud segíteni a konfigurációs bitekben??? Ezzel a százméteres programkóddal elnyomtad a picinyke hozzászólásomat
(#) VrGakos hozzászólása Aug 24, 2008 /
 
Sziasztok!

Segítséget szeretnék kérni PIC programhoz. Az lenne a kérdésem hogy hogyan tudok egy meglévő char típusú változóhoz hozzáadni egy következő karaktert?

Ákos
(#) lidi válasza VrGakos hozzászólására (») Aug 24, 2008 /
 
Nem teljesen világos, de most akkor egy sztringet szeretnél tulajdonképpen ? És milyen nyelven programozol ?
(#) VrGakos válasza lidi hozzászólására (») Aug 24, 2008 /
 
CCS programozási nyelvet használok. Végül is egy sztriget szeretnék. PIN -kód-os riasztóhoz lesz.
(#) MPi-c válasza VrGakos hozzászólására (») Aug 24, 2008 /
 
Továbbra is nézegesd a ccs kezelői leírását is! A standard string függvényeknél lesz.
(#) lidi válasza VrGakos hozzászólására (») Aug 24, 2008 /
 
Én ugyan hitech c-t használok de talán menni fog ccs ben is. A lényeg hogy a char változó csak 1 karaktert tud tárolni, ezért egy karakter tömböt kell erre használnod, ha stringet akarsz benne tárolni.

pl:

igy deklarálhatod:
char timestring[]="00:00:00";

ekkor letrehoz egy akkora tombot amiben elfér a fennti szöveg, es persze bele is irja.

vagy akár így is lehet:
char timestring[15];

majd így irhatsz bele pl:
strcpy(timestring,"HMM3");

vagy hivatkozhatsz a karakterekre is:
timestring[0]='a';

Ezek mondjuk eléggé alap c programozási dolgok, talán ajánlott lenne egy c könyvet elolvasni.
(#) VrGakos válasza lidi hozzászólására (») Aug 24, 2008 /
 
Köszönöm segítségeteket.
(#) Norberto válasza googa hozzászólására (») Aug 24, 2008 /
 
Ez lenne a helyes beállítás, ahogyan szeretnéd (belső oszcillátor):

11111100011000
(#) googa válasza Norberto hozzászólására (») Aug 24, 2008 /
 
Köszi! Akkor végülis jól gondoltam. Biztos a PWM beállításokkal lesznek gondjaim...
(#) Norberto válasza googa hozzászólására (») Aug 24, 2008 /
 
De azt ugye látod, hogy ez a kiemelt kódsorozat nem egyezik meg azzal, amit korábban te beírtál? Amikor átnéztem az általad beírt bináris számsorozatot, kiderült, hogy nem is belső oszcillátorra volt állítva a PIC, hanem RC oszcillátorra, ami nem egyezik meg a belsővel!
(#) googa válasza Norberto hozzászólására (») Aug 24, 2008 /
 
Igazad van, én megint elnéztem, pedig koncentráltam. Ilyen ez a fáradtság. Egyébként most, hogy így segítettél, már szépen működik a PWM jelem és a kis LED-em fénye folyamatosan megerősődik, aztán szépen lassan kihúny...és így tovább. Tök jó

Közben rá is jöttem, mit néztem el. Szóval így utólag jöttem rá, hogy mire való a konfigurációs szó, hiszen eddig csak példaprogikkal próbálkoztam. Mivel ez nem működött, összehasonlítotam egy régi működővel. Arra rájöttem, hogy a 4. bitet 1-re kell állítani és annak annyira örültem, hogy a 0. és 1. bit 0-ra állítása szépen kimaradt, mert az átírt kódot kevertem a jóval. A lényeg, hogy már működik és meg is értem amit csinálok! Köszi!
(#) trudnai válasza googa hozzászólására (») Aug 25, 2008 /
 
Szia googa,

Nem egeszen ertem, hogy miert bajlodsz a binaris dolgokkal mikor az INC file-ban ott vannak a nevesitett definiciok - azokkal nehezebb elszurni a beallitast
Következő: »»   268 / 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