Fórum témák

» Több friss téma
Fórum » PIC programozás
 
Témaindító: G-Lex, idő: Okt 24, 2005
Lapozás: OK   24 / 66
(#) trudnai válasza Hp41C hozzászólására (») Ápr 22, 2010 /
 
Van amugy olyan PIC ahol az EEPROM irasnal gond van es ott specialis workaround kell, hogy mukodjon. De ha jol emlekszem, akkor az 14 bites valtozatoknal fordult elo.
(#) samson111 válasza trudnai hozzászólására (») Ápr 22, 2010 /
 
Besokalltam, átírtam a progit, hogy a Flash (program) memóriába tárolja le az adatokat. És nagyot koppantam, mert ez sem megy! Ezt legalább tudom olvasni, de írni nem. A konfigurációs biteket (300008-D) is megnéztem, mind "1", azaz nincs védve. Segítsetek, mert szétrobban a fejem Köszönöm

;-----------------------------------------------------------------
; TÖRÖL - 1x64 byte
;-----------------------------------------------------------------
movlw upper flash_rele_ido
movwf tblptru
movlw high flash_rele_ido
movwf tblptrh
movlw low flash_rele_ido
movwf tblptrl

bsf eecon1, eepgd
bcf eecon1, cfgs
bsf eecon1, wren
bsf eecon1, free ; sortörlés engedélyezése
bcf intcon, gie ; a megszakítások letiltása

;-----------------------------------------------------------------
movlw 55h
movwf eecon2 ; write 55h
movlw 0AAh
movwf eecon2 ; write AAh
bsf eecon1, wr ; BR bit engedélyezése, az írás megkezdése
bsf intcon, gie ; interruptok engedélyezése

;-----------------------------------------------------------------
; ÍR - 8x8 byte
;-----------------------------------------------------------------
movlw .8
movwf lepesszam
lfsr fsr0, rele_kezdesi_ido
tblrd*- ; a következő ciklus miatt
flash_iras_2
movlw .8
movwf tmp0
flash_iras_3
movff postinc0, tablat
tblwt+*
decf tmp0
bnz flash_iras_3
;-----------------------------------------------------------------
bsf eecon1, eepgd
bcf eecon1, cfgs
bsf eecon1, wren
bcf intcon, gie ; a megszakítások letiltása
;-----------------------------------------------------------------
movlw 55h
movwf eecon2 ; write 55h
movlw 0AAh
movwf eecon2 ; write AAh
bsf eecon1, wr ; BR bit engedélyezése, az írás megkezdése
bsf intcon, gie ; interruptok engedélyezése
;-----------------------------------------------------------------
decf lepesszam
bnz flash_iras_2
;-----------------------------------------------------------------

bcf eecon1, wren ; az írás tiltása mert kész.
(#) samson111 válasza trudnai hozzászólására (») Ápr 22, 2010 /
 
Nem sikerül tabulálnom és színeznem a válaszokat, most megpróbálom fájlmellékletként, nehogy a kedveteket veszítsétek

a.txt
    
(#) Bell válasza samson111 hozzászólására (») Ápr 22, 2010 /
 
Lehet hogy elnézek valamit, de hol vizsgálod meg azt, hogy befejeződött, és teljesült az írás?
(#) samson111 válasza Bell hozzászólására (») Ápr 23, 2010 /
 
Tudomásom szerint nincs mit vizsgálni. A CPU ez idő alatt áll - ca. 2 ms. A write verify még hiányzik - ha már bármit beletudnék írni, a helyességét is ellenőrizném
(#) Bell válasza samson111 hozzászólására (») Ápr 23, 2010 /
 
Egész konkrétan az EECON1 WR bitjére gondoltam, ami nulla, ha kész az írás.
Az adatlapokon nem szerepel és lehet, hogy a 452-nél ez nem is kell?
(#) pgabor2 válasza samson111 hozzászólására (») Ápr 23, 2010 /
 
Próbálj meg egyetlen byte-ot írni-olvasni az általam leírt rutinok alapján (#693370). Kb. 50 készülékünk működik ezzel a kóddal, nyugodtan használhatod.
(#) Hp41C válasza samson111 hozzászólására (») Ápr 23, 2010 /
 
Szia!

Egy kérdésem lenne: Milyen címen van a flash_rele_ido ?
A programtárban kerek 4 szavas címen kellene lennie... A törlés arra a 64 byte-os tartományra vonatkozik, amibe a címe beleesik, az írás viszont azért nem múködhet, mert a buffer egyik fele az egyik 8 byte-os tartományra, a másik fele a következő tartományra vonatkozik...
(#) samson111 válasza Hp41C hozzászólására (») Ápr 23, 2010 /
 
Szia!

Erre is gondoltam:

org 440h ; 64-gyel osztható cím kell!!
flash_rele_ido fill $-440h, .64 ; BCD kódolt: alsó byte óra

azt gondolom, hogy ez így korrekt, ha mégsem, írjátok meg. Köszönöm
(#) samson111 válasza Bell hozzászólására (») Ápr 23, 2010 /
 
Szia!

A PIC18F452.pdf szerint:

"The long write is necessary for programming the internal
FLASH. Instruction execution is halted while in a
long write cycle. The long write will be terminated by
the internal programming timer."

...azaz ha a következő utasítás csak akkor hajtódik végre, ha az írás már véget ért - nincs mit vizsgálni. EEPROM-nál persze kell figyelni a WR bitet - az eredeti problémám szerint itt kerültem végtelen ciklusba

De ha nincs igazam, szólj
(#) vilmosd válasza samson111 hozzászólására (») Ápr 23, 2010 /
 
Hali
Ezt a kodot a CCS C altal leforditott .lst-bol masoltam be. ez egy word-ot ir az EEPROM-ba:
  1. data)
  2. .................... {
  3. ....................    int8 i;
  4. ....................  
  5. ....................    for(i = 0; i < 2; ++i)
  6. *
  7. 0D0A:  CLRF   xBB
  8. 0D0C:  MOVF   xBB,W
  9. 0D0E:  SUBLW  01
  10. 0D10:  BNC   0D64
  11. ....................    {
  12. ....................      write_eeprom(address + i, *((int8 *)(&data) + i));
  13. 0D12:  MOVF   xBB,W
  14. 0D14:  ADDWF  xB8,W
  15. 0D16:  MOVWF  xBC
  16. 0D18:  CLRF   xBE
  17. 0D1A:  MOVLW  B9
  18. 0D1C:  MOVWF  xBD
  19. 0D1E:  MOVF   xBB,W
  20. 0D20:  ADDWF  xBD,W
  21. 0D22:  MOVWF  01
  22. 0D24:  MOVLW  00
  23. 0D26:  ADDWFC xBE,W
  24. 0D28:  MOVWF  03
  25. 0D2A:  MOVFF  01,FE9
  26. 0D2E:  MOVWF  FEA
  27. 0D30:  MOVFF  FEF,BD
  28. 0D34:  MOVFF  BC,FA9
  29. 0D38:  MOVFF  BD,FA8
  30. 0D3C:  BCF    FA6.6
  31. 0D3E:  BCF    FA6.7
  32. 0D40:  BSF    FA6.2
  33. 0D42:  MOVFF  FF2,00
  34. 0D46:  BCF    FF2.7
  35. 0D48:  MOVLB  F
  36. 0D4A:  MOVLW  55
  37. 0D4C:  MOVWF  FA7
  38. 0D4E:  MOVLW  AA
  39. 0D50:  MOVWF  FA7
  40. 0D52:  BSF    FA6.1
  41. 0D54:  BTFSC  FA6.1
  42. 0D56:  BRA    0D54
  43. 0D58:  BCF    FA6.2
  44. 0D5A:  MOVF   00,W
  45. 0D5C:  IORWF  FF2,F
  46. ....................    }
  47. 0D5E:  MOVLB  0
  48. 0D60:  INCF   xBB,F
  49. 0D62:  BRA    0D0C
  50. .................... }
  51. 0D64:  RETLW  00

Termeszetesen a regiszterek cimkent vannak benne. Nekem ez mukodik 18F2320-ban. Talan segit.
Udv Vili
(#) Hp41C válasza samson111 hozzászólására (») Ápr 23, 2010 /
 
Szia!
A hozzászólásodban levő programnál egy problémát látok:
- Ha prioritásos megszakítási rendszert használsz, nem elég a GIE azaz GIEH törlése, a GIEL -t is törölni kell.
(#) Bell válasza samson111 hozzászólására (») Ápr 23, 2010 /
 
Egy dolog a doksi, ahol a mintaprogramok gyakran hibásak, illetve nem teljes. Ha megnézed, pár sorral lentebb, nem eretnek dolog megvárni az írás végét.
Idézet:

41. 0D54: BTFSC FA6.1
42. 0D56: BRA 0D54”

Te megszakítást figyeltél, de az nem volt engedélyezve, ezért volt a végtelen ciklus.
(#) samson111 válasza Bell hozzászólására (») Ápr 24, 2010 /
 
Sziasztok!

Nem így van, ha megnézed a programot, a ciklus előtt engedélyeztem ismét a megszakításokat. Viszont a disassemblált kódban (#694205) letiltott megszakítások mellett is müködik a dolog...

A hexa file-t egy download.exe programmal a soros porton keresztül töltöm le a PIC-be, egy beégetett program fogadja. Lehet, hogy ez akadályozza meg, hogy írjam az EEPROM-ot, vagy a saját programból a FLASH program memoriát?! Elég értelmetlen lenne... és nem is tudom, hogy csinálná... A configurációs biteket ismételten ellenőriztem (300008h-30000Fh), nincs semmi sem levédve. Érdekes, hogy az ID-t 18F252-nek adja meg, pedig a tokozáson is 454 van...
(#) Bell válasza samson111 hozzászólására (») Ápr 24, 2010 /
 
A listán csak a GIE-t engedélyezed, és ez kevés.
A megszakítást teljesen kihagyhatod az egészből, az csak akkor kell, ha egyéb okból van szükséged rá.
A config azonos azzal, amit utóljára megadtál, amit vissza tudsz olvasni.
(#) Hp41C válasza samson111 hozzászólására (») Ápr 24, 2010 /
 
Szia!

Töltsd le a AN851 application note-t. Ez egy soros boot loader, benne van a program memória írása is.
(#) icserny válasza samson111 hozzászólására (») Ápr 24, 2010 /
 
Idézet:
„Érdekes, hogy az ID-t 18F252-nek adja meg, pedig a tokozáson is 454 van...”
Ez bizonyára elírás, mert 18F545 tudtommal nincs, s korábban te is 452-t emlegettél.

Ha így van, akkor valami nem stimmel, mert a 252-nek 0x400, a 452-nek pedig 0x420 az ID-je!
(#) meili hozzászólása Ápr 24, 2010 /
 
Sziasztok!
Van egy kis gondom PIC programozással HI-TECH C-nél.
Szeretnék gyököt vonni, de az sqrt függvény valamiért nem működik.
A program ehhez tartozó része:

float x_dec, y_dec, z_dec, sum_dec;
double negyzet;

negyzet = x_dec*x_dec + y_dec*y_dec + z_dec*z_dec;
sum_dec = sqrt( negyzet );

Szóval fordításkor az sqrt nem tetszik neki, hibaüzenetre rákattintva megtekinthetem az sqrt.c fájlt, ahol látszik, hogy az sqrt argumentumának double értéket kell megadni, ezért is deklaráltam a negyzet változót double-ként.
Egyébként azzal sincs gond, hogy float-okból double-t csinál, mivel a negyzet értékét meg rendesen kiírja.
Mi lehet a gond?
(#) Hp41C válasza meili hozzászólására (») Ápr 24, 2010 /
 
Szia!

Az sqrt függvény is double értéket ad vissza, próbáld a sum_dec változót is double -nak deklarálni...
(#) meili válasza Hp41C hozzászólására (») Ápr 24, 2010 /
 
Próbáltam úgy is, úgy sem jó.
Igazából rájöttem, hogy nem kellett volna ennyit beraknom, az sqrt úgy sem működik, hogy:

sum_dec = sqrt(5.6);

de még egész számmal sem.
(#) meili válasza meili hozzászólására (») Ápr 24, 2010 /
 
Köszönöm a segítséged, de rájöttem, szarvashiba volt, math.h nem volt beinclude-olva.
(#) trudnai válasza icserny hozzászólására (») Ápr 24, 2010 /
 
Idézet:
„[quote]Idézet:
„Érdekes, hogy az ID-t 18F252-nek adja meg, pedig a tokozáson is 454 van...””

Ez bizonyára elírás, mert 18F545 tudtommal nincs, s korábban te is 452-t emlegettél.[/quote]

545?
(#) icserny válasza trudnai hozzászólására (») Ápr 24, 2010 /
 
Idézet:
„545?”
454! Még egy elírás...
(#) samson111 válasza icserny hozzászólására (») Ápr 24, 2010 /
 
csak elírás volt, 452
(#) samson111 válasza Hp41C hozzászólására (») Ápr 24, 2010 /
 
Köszönöm az ötletet, Még nem rágtam át magam teljesen rajta, de nagyon érdekes. Mindenesetre már látszik, hogy nem a boot loader az akadály.
(#) icserny válasza samson111 hozzászólására (») Ápr 24, 2010 /
 
Sejtettem, ezért írtam,hogy baj van, mert annak más az ID-je. Egyébként az MPLAB IDE Device könyvtárában minden,az MPALB által ismert eszközről van egy-egy adatfájl, amiben minden lényeged info benne van, így pl. a az azonosító kód is (devid), s az is, hogy honnan, és milyen maszkkal olvassa a programozó vagy debugger.

Pl. 0x3ffffe-0x3fffff címtartományból olvasunk egy kétbájtos adatot, s ha 0xffe0-vel maszkolva 0x420-at kapunk, akkor PIC18F452-ről van szó. Az alsóbb helyiértékű bitek pedig a verziót jelzik...
(#) samson111 válasza Hp41C hozzászólására (») Ápr 25, 2010 /
 
Bocs a szemetes programért, a hibakeresés kínjában mindenfélével próbálkoztam, az épp aktuális verziót küldtem

Áruld már el, mit csináltál vele, mert most MINDEN !!! működik. Még az a billentyű is, amit nem használtam, mert ettől eddig mindig lefagyott!!! A clrf portA-E-től lenne?! Megpusztulok, ha nem mondod meg

Persze még átnézem a programot töviről hegyire...a falon lyuk van, a fejem helye..

És nagyon-nagyon köszönöm!!! :worship:
(#) Hp41C válasza samson111 hozzászólására (») Ápr 27, 2010 /
 
Szia!

Nem az assembly programhoz való include állományt használtál. A p18F452.inc használatával egy csomó hibajelzés előjön, ha azokat leküzdöd, már csak egy algoritmus hiba marad, az adat eeprom olvasásánál a RD bit 1-be állítását vittem a ciklus belsejébe...
(#) knobor hozzászólása Máj 3, 2010 /
 
Sziasztok

Azt szeretném,hogy egy teljessen kezdő honnan tudna megtanulni a legegyszerűbb programozási parancsokat.
Neten nem találtam semmi jót ami magyar lenne.
(#) Bell válasza knobor hozzászólására (») Máj 3, 2010 /
 
Ha igazán érdekel, mindegy hogy magyarul van, vagy sem. Angolul úgyis kell érteni valmicskét, mert lépten-nyomon előfordul hogy olyasmire vagy kiváncsi, ami csak úgy hozzáférhető.
A microchip oldalán ezerszámra találsz adatlapot, leírást. Vagy google és magyarul is rengeteg.
De legfontosabb, hogy csináld. Nincs királyi út.
Következő: »»   24 / 66
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