Fórum témák

» Több friss téma
Fórum » PIC - Miértek, hogyanok haladóknak
Lapozás: OK   660 / 1319
(#) Attila86 válasza potyo hozzászólására (») Feb 2, 2010 /
 
Először csak az angol ABC szerint írtam a cimkéket és a változókat biztos ami biztos. De aztán láttam Watt egyik programját és abban is voltak ékezetek, ezért úgy döntöttem mostantól én is írok ékezeteket. Szinte az összes cimke és változó tartalmaz mindenféle ékezetes karaktereket és nem sír miatta a fordító. Csak a minusz, plusz meg hasonló karaktereket nem szereti de olyanokat nem is írok.

Átírtam az RD-t WR-re, de így sem írja be az új értéket. :no:
(#) icserny válasza Attila86 hozzászólására (») Feb 2, 2010 /
 
Az EEADRH-t is illene beállítani!
(#) kissi válasza Attila86 hozzászólására (») Feb 2, 2010 /
 
Szia!

Nekem az volt a tapasztalatom, hogy "kényére-kedvére" hol jó a változó, cimke ékezetesen hol nem ( igaz, hogy általában jó!), ezért én is azt javaslom, hogy ne használj ilyet!
Ugyanezen okból a könyvtárnevek se használjanak ékezetes karaktereket és vigyázz az elérési út hosszára is ( ha jól emlékszem 62 karakter a maximum!!) !

Steve
(#) Hp41C válasza Attila86 hozzászólására (») Feb 2, 2010 /
 
Szia!

- A GIE-t a WR beállítása után 1-re lehet állítani, nem kell megvárni vele az írás végét.
- Ahogy már írták, az írás befejezését a WR bit 0-ba állása jelzi - esetleg a PIR2 regiszter EEIF bitje.
- Mekkora adat eeprom van a kontrollerben? - Nem lehet, hogy másik lapjára írsz, mint ahonnan olvasol. Ha az EEPROM mérete nagyobb, mint 256 byte, az EEADRH regisztert is be kell állítani :EEADRH:EEADR adja ki a címet...

Szia
(#) potyo válasza Attila86 hozzászólására (») Feb 2, 2010 /
 
Szimulátor mit mutat?
(#) watt válasza Attila86 hozzászólására (») Feb 2, 2010 /
 
Igen, én is használom, de vigyázz, csak az ASM fordító eszi meg, így ha nagyon hozzászoksz, mint én, utána majd a C-nél nehezebb lesz, mint nekem is! De nem vészes, át lehet rajta esni!
(#) Attila86 válasza Hp41C hozzászólására (») Feb 2, 2010 /
 
Icserny, Hp41C!

PIC18F2520-at programozok, annak csak 256 bájtos az EEPROM-ja. Szóval EEADRH-t nem kell állítani és ilyen regiszternév nem is szerepel az adatlapjában.
(#) Attila86 válasza potyo hozzászólására (») Feb 2, 2010 /
 
Hogy érted hogy mit mutat? Az MPLAB szerint nem változik az EEPROM tartalma és az áramkörben sem tapasztalom a változást. Vagy másra gondolsz?
(#) watt válasza Attila86 hozzászólására (») Feb 2, 2010 /
 
Ez egy C kód, de könnyű átértelmezni ASM-ba. Persze a felső cím nálad nincs, de ezt megbeszéltétek.

.
  1. EEADRH = (unsigned char)(Address>>8); // Felső EEPROM cím betöltése
  2.         EEADR = (unsigned char)Address; // Alsó EEPROM cím betöltése
  3.         EEDATA = Data; // Átadott EEPROM adat betöltése
  4.         EECON1bits.EEPGD=0; // Point to DATA memory
  5.         EECON1bits.CFGS=0; // Access EEPROM
  6.         EECON1bits.WREN = 1; // EEPROM írás engedélyezése
  7.         GIE_Status = INTCONbits.GIE; // Megszakítást engedélyező bit mentése
  8.         INTCONbits.GIE = 0; // Globális megszakítás tiltása
  9.         EECON2 = 0x55; // Szükséges szekvencia az írás indításához
  10.         EECON2 = 0xAA; // Szükséges szekvencia az írás indításához
  11.         EECON1bits.WR = 1; // Írás indítása
  12.         while (EECON1bits.WR); // Írási folyamat befejezésére várakozás
  13.         INTCONbits.GIE = GIE_Status; // Globális megszakítás bit visszaállítása
  14.         EECON1bits.WREN = 0; // EEPROM írás engedély törlése


Én sem engedélyezem a megszakítást az írás ellenőrzés bekövetkezte előtt, bevallom nem tudtam, hogy lehet, ezt akkor úgy old meg, ahogy a többiek ajánlották, majd én is áttérek erre a módszerre.
(#) Attila86 válasza Attila86 hozzászólására (») Feb 2, 2010 /
 
Na, a szimulátor szerint az EECON2 regiszterbe nem kerül be az 55h és a 0AAh. Az EECON2 regiszter mindig nulla.
(#) icserny válasza Attila86 hozzászólására (») Feb 2, 2010 /
 
Mondtam már, hogy az EECON2 nem fizikai regiszter. Az adatlap szerint mindig nullát ad olvasáskor.
(#) watt válasza Attila86 hozzászólására (») Feb 2, 2010 /
 
Most már a WR-t figyeled?
(#) Attila86 válasza watt hozzászólására (») Feb 2, 2010 /
 
Igen.
Jelenleg így néz ki a dolog:
  1. movlw   d'147'
  2. movwf   EEDATA
  3. movlw   d'1'
  4. movwf   EEADR
  5. bcf     EECON1, EEPGD ; Point to DATA memory
  6. bcf     EECON1, CFGS ; Access EEPROM
  7. bsf     EECON1, WREN ; Enable writes
  8. bcf     INTCON, GIE ;globális megszakítás tiltás
  9. movlw   55h ;
  10. movwf   EECON2 ; Write 55h
  11. movlw   0AAh ;
  12. movwf   EECON2 ; Write 0AAh
  13. bsf     EECON1, WR ; Set WR bit to begin write
  14. bsf             INTCON, GIE             ;globális megszakítás engedélyezés
  15. btfsc   EECON1, WR      ;befejeződött már az írás? (ha igen, akkor ugrik!)
  16. goto    $-2    
  17. bcf     EECON1, WREN ; Disable writes on write complete (EEIF set
(#) potyo válasza Attila86 hozzászólására (») Feb 2, 2010 /
 
Nekem ez működik a szimulátor szerint.
(#) Attila86 válasza potyo hozzászólására (») Feb 2, 2010 /
 
Akkor végképp nem tudom mi lehet a baj. :no: Itt van a program:

Laminalo2.asm
    
(#) potyo válasza Attila86 hozzászólására (») Feb 2, 2010 /
 
Nekem ebben is működik. Jó helyen nézed te az értékeket?

De azt azért próbáld megtanulni, hogy a bal szélre csak a címkéket tesszük, azokat viszont kötelezően csak oda. Csomó ilyen üzenetet dob a fordító, hogy rossz helyen vannak dolgok.
(#) Attila86 válasza potyo hozzászólására (») Feb 2, 2010 /
 
Csak a még kérdéses programkód-részleteket teszem be baloldalra, innen tudom hogy ezen helyes részek működése még nem biztos. Amint megbizonyosodom róla hogy működik, beljebb rakom a tabulátorral.

Az értékeket az MPLAB View/EEPROM ablakában nézem, illetve élesben az LCD-kijelzőn.
(#) potyo válasza Attila86 hozzászólására (») Feb 2, 2010 /
 
Pedig nálam a kiolvasás is működik, bekerül a 93 a KÍVÁNT_HŐMÉRSÉKLET_laminálás változóba.
(#) Attila86 válasza potyo hozzászólására (») Feb 2, 2010 /
 
Az viszont érdekes, mert annak a programnak amit legutóbb feltöltöttem, a 408. soránál lévő goto$ ciklusban kellene maradnia és 147-et kellene írnia az EEPROM d'1'-es bájtba. A jelenlegi programot ugyanis lebutítottam ennyire, hogy ne a Hőfok_beállítás_menü szubrutinban bóklásszon. Tehát a kérdéses programrészlet a 390. sortól a 406. sorig van.
(#) potyo válasza Attila86 hozzászólására (») Feb 2, 2010 /
 
Igen, de előtte van egy olyan, hogy call EEPROMból_adatok_feltöltése. A szimulátor is olyan, hogy ha már egyszer beírta, akkor a reset utáni következő futtatáskor már ott van az EEPROM-ban az adat, és ki lehet olvasni. A kódod ki is olvassa, és csak ezután megy rá ismét az írásra majd a végtelen ciklusra.
(#) bazs hozzászólása Feb 2, 2010 /
 
sziasztok az lenne a kérdésem h mi a hiba akkor ha PICKIT2vel probálnék 877-est programozni és ezt irj ki "programming failed at program memory addres 0x000000" válaszotokat előre is köszönöm
(#) Attila86 válasza potyo hozzászólására (») Feb 2, 2010 /
 
Igen, de ott csak olvas az EEPROM-ból. Írni csak a 390. és a 406. sorok közt próbál.
(#) potyo válasza Attila86 hozzászólására (») Feb 2, 2010 /
 
Nálam ír is, azt a részt néztem. Majd utána Reset és az olvasás is működik.
(#) Attila86 válasza potyo hozzászólására (») Feb 2, 2010 /
 
Tényleg!
Mindvégig írta az EEPROM-ot, csak nem azt a bájtot amelyiket után kiolvastattam vele.
Most már tök jó, a tápfeszt levéve is megjegyzi a beállított értéket. :yes:
(#) watt válasza Attila86 hozzászólására (») Feb 2, 2010 /
 
Kicsit szétszórt vagy nem?
Én csak figyeltem, mert nem értettem mi a baj, mikor az eeprom írós rész jó...
(#) Attila86 válasza watt hozzászólására (») Feb 2, 2010 /
 
Minél bonyolultabb a program, annál több dologra kell odafigyelni és ezért egyre nehezebb...

-------------------------------------------------------

Egy LCD kijelzőn megjelenő menürendszert hogyan, milyen elven szokás megírni assembly-ben? Mert nekem van egy elképzelésem amit el is kezdtem megvalósítani de lehet hogy van ennél egyszerűbb megoldás is.

A gombok pergésmentesítését megoldottam megszakításból, teljesen saját ötlet alapján. És szuperül működik, olyan büszke vagyok rá!
(#) bazs hozzászólása Feb 2, 2010 /
 
sziasztok az lenne a kérdésem h mi a hiba akkor ha PICKIT2vel probálnék 877-est programozni és ezt irj ki "programming failed at program memory addres 0x000000" válaszotokat előre is köszönöm
(#) watt válasza bazs hozzászólására (») Feb 2, 2010 /
 
Másodszor is beírod ilyen trehány módon, chat-es stílusban, és csodálkozol, hogy nem áll szóba veled senki!?
(#) watt válasza Attila86 hozzászólására (») Feb 2, 2010 /
 
Mond el mi az elképzelésed, és reagálunk rá.
(#) Attila86 válasza watt hozzászólására (») Feb 2, 2010 /
 
Teljesen még én sem találtam ki, de eddig nagyjából a következőképp képzeltem el:
Például vegyük a 'főmenüt', ami három menüpontot tartalmaz, legyenek mondjuk: nyák, laminálás, beállítás. Kinevezek egy regisztert aminek adok egy kezdőértéket, mondjuk 1-et. Megvizsgálom, hogy a regiszter 1-e. Ha igen, akkor kiírom az első menüpont feliratát: "nyák". Ha kettő, akkor kiíratom ezt: "laminálás". Ha pedig három, akkor ezt: "beállítás".
Ez után megvizsgálom hogy le van-e nyomva valamelyik gomb. Ha a LE gomb van megnyomva, akkor inkrementálom a regiszter értékét, ha pedig a FEL gomb van lenyomva, akkor dekrementálom. Ha egyik sincs lenyomva akkor újra lekérdezem a gombokat (végtelen ciklus). Ha valamelyik gombot lenyomva találom, akkor visszaugrom a regiszter vizsgálatához és a regiszter értékének megfelelő menüszöveget írom ki.
A LE és FEL gombok vizsgálatakor az OK gombot is vizsgálom. Ha le van nyomva akkor beugrom egy szubrutinba, ami az almenüt íratja ki ugyan így de az már egy másik 'menüpont-számláló' regisztert használ, így az almenüből vissza lehet térni a főmenübe.

Ez mély menürendszer esetén elég bonyolult és átláthatatlan lenne, de én éppen ezért csak egy almenüt gondoltam.
Következő: »»   660 / 1319
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