Fórum témák
» Több friss téma |
Sziasztok!
Én is megpróbálta az EEPROM írást/olvasást, és a végén olvasáskor nem azt az értéket adja vissza mit beleírtam:S Hol a hibáztam, miért nem jó? Köszi
Elindítod az írást, aztán mielőtt befejeződne, le is tiltod. Mire számítottál?
Ha visszalapozol ide, akkor láthatsz egy működő változatot. Azt kellen követni! Abban van egy várakozás az írás végére (amit EECON1.WR 0-ba billenése jelez).
Szia!
Köszi az észrevételt, átírtam, de még így sem az általam beírt értéket olvassa vissza (32 helyett 255-öt). Mit nem vettem észre?
1. Ne késleltetést rakj be, hanem a bitváltást figyeld! Úgy, ahogy a mintaprogramban is van.
2. Próbálj áttekinthetőbben programozni! (pl. a speciális funkciójú regiszterek bitejeinek a szimbolikus nevét használd a sorszámuk helyett)!
"Ne késleltetést rakj be, hanem a bitváltást figyeld!"
Ezt kifejtenéd bővebben,h. hogy érted? Köszi
Szia!
Kijavítottam, ahogy kérted, csak a fáradságtól nem tudtam tisztán gondolkodni. De úgy tűnik mégse mindent, mivel még mindig az a probléma,h. az olvasás végén 63 helyett 255-t ad vissza ennél a sornál. bsf EECON1,RD Ötlete lenne valakinek,h.mi lehet a hiba?
Több helyen is látok ilyen utasításokat, amelyek nem azt csinálják, amit szeretnél. A változó tartalma helyett a változó címét rakják a W regiszterbe. Tehát: (f) -> w helyett f -> w hajtódik végre, ahol a '()' jelentése: 'tartalma' valaminek. Az olvashatóság már nagyon sokat javult. Még egy javaslat:
helyett írd úgy, hogy:
vagy így:
Köszi szépen a javaslatokat, így már nekem is sokkal átláthatóbb a program
Idézet: „(f) -> w helyett f -> w hajtódik végre” Hogy írjam,h.jól hajtódjanak végre ezek a parancsok?? Most próbálgattam, de még nem lett meg a keresett eredmény..
Idézet: „Hogy írjam,h.jól hajtódjanak végre ezek a parancsok?” A parancsok abszolút jól hajtódtak végre! Csak nem azt a parancsot használtad, ami az adott feladathoz kellett! Ez az utasítás szolgál egy memóriarekesz TARTALMÁNAK elővélelére. Nézd meg az előző beírásom második részét is!
Szia!
Köszi, de próbáltam így is: movlw b'00100000' movwf CIM movf CIM,W banksel EEADR movwf EEADR és így is: movlw b'00100000' banksel EEADR movwf EEADR Ezért írtam,h.még mindig nem jó sajna. Vagy még lehet,h.mindig nem értem és teljesen belezavarodtam ebbe a primitív utasításba Idézet: „1. movfw EEDATA” Ezt nem írtad el véletlenül? (movwf)
Tedd fel, hogy mivel próbálkozol!
Egy egyszerű EEPROM írást akarok csinálni, majd kiolvasni a beírt értéket..
Én a programod egy másik helyén talált utasításról írtam:
[quote=]movf EEDATA,0 ;W = EEDATA, az eredmény kiolvasása[/quote] Ez az ellenkező irányba mozgatja az adatot (legalábbis a komment szerint).
Szerintem amikor kiadod a BANKSEL INTCON2 makrót, akkor az átvált a nullás bankba, az EECON2 pedig a hármas bankban van!
Szia!
A programom kommentekkel együtt egy mintaprogram, amit csak ki szerettem volna próbálni..Bővebben: Link De most már nagyon szeretném,h. végre működjön!
Helló!
A gondod az hogy nem jókor használod a banksel makrót, például az ADAT regiszterd a 0x21-es címen van ami a BANK0-ban található, de te épp a BANK2-ben akarod beleírni és kiolvasni az értéket. A banksel INTCON utasítás pedig nem kell, mivel az INTCON regiszter mind a 4 bankból elérhető. Remélem érthető voltam.
Szia!
Megcsináltam, ahogy mondtad, mert jogos volt, amit leírtál, de semmi változás Neked így működött, jó értéket adott vissza??
Sziasztok!
Most már fut a progi Ez a parancs így jó benne? varok btfss EECON1,WR Mert máshol btfsc-t láttam..
1. A szimulátor szerint az írás nem működik a programodban.
2. A PIC16F690 adatlapja szerint EEDAT a megfelelő regiszter neve, nem pedig EEDATA. Ennek ellenére EEDATA névvel is működni látszik a dolog. 3. Ahogy korábban már említették, a BANKSEL INTCON sor elrontja a regiszterek címzését. Hagyd ki!!!
Sziasztok!
Köszi mindenkinek a kitartó segítséget, kicsit nyögvenyelősen, de megoldódott a probléma A programot soros porton teszteltem és működik Akit érdekel csatoltam!
Idézet: „Ez a parancs így jó benne? varok btfss EECON1,WR” Azt neked kell eldönteni, hogy mit akarsz csinál(tat)ni a programban. Ha a WR bit nullára váltását akarod megvárni, akkor nyilvánvalóan nem jó. De erre magad is rájönnél, ha megtennéd azt a szívességet, hogy végre elolvasnád a PIC adatlapját, s áttanulmányoznád benne, hogy mit csinálnak az egyes utasítások. (Ezt nyugodtan veheted letolásnak!)
Szia!
Köszi a letolást kell az néha Amúgy igen már vettem a fáradságot és elolvastam azokat a részeket mik ehhez kellenek és tudom,h.nem jó az amit írtam, csak egy miértre vagyok kiváncsi, h. ha btfsc-t írok, akkor miért nem megy végig a program és miért áll meg itt (szimulálásnál)?? És elismerem,h.mivel nem régóta foglalkozom PIC-el és nem is folyamatosan, ezért igen jönnek elő mindig kérdések, mivel ezek nekem új dolgok.. Sorry ha sokat kérdek, írok!
Itt már belinkeltem a működő változatot. Nem áll le.
Igen tudom, kösz.
Nekem is ilyen probélmám van. A prg. beír egy byte-ot az első címre, kiolvassa, és a kiolvasott értéket kiteszi a portra villogtatni. Így működik is. Ekkor már az EEPROMban benne kellene, hogy legyen az adat. Ha azonban újra fordítom úgy, hogy az írás kimarad, és csak kiolvasni kéne az adatot, és bekapcsolom, akkor már nem lesz benne az adat. (Ez persze csak egy tesztprogram). Mit rontok el? Tud valaki segíteni?
#include #include #include void Write_b_eep(unsigned int badd,unsigned char bdata); unsigned char Read_b_eep( unsigned int badd ); void main(void) { int i; int ReadData1=0; TRISA = 0x00; LATA = 0; TRISD = 0x00; LATA = 0x02; Write_b_eep(0x00,0x01); for (i=0;i<10000;i++); //várakozás ReadData1 = Read_b_eep(0x00); for (i=0;i<10000;i++); //várakozás while(1) { for (i=0;i<5000;i++) { LATA = 0x01; LATD = ReadData1; } for (i=0;i<5000;i++) { LATA = 0x00; LATD = 0x00; } } }>>>>
Újraíráskor felülírod az EEPROM-ot is, ha nincs kikapcsolva ez a memóriarész írásjoga a programban. A PK2-vel és a WPB-vel is lehet külön Flasht írni, de a legtöbb égető ismeri ezt a funkciót.
Értem. Itt az a gond, hogy az előzőleg tárolt adat marad benne, tehát csak a program futásakor él ez az adat. Utána, ha csak az EEPROMot olvasom ki, akkor az előző adatot olvassa. És még valami: Ha futás közben PICKIT2-vel kiolvasom, akkor sikerül kiolvasni az új adatot és ezután már nem felejti el akkor sem, ha új programot égetek bele.
(most látom, hogy az inc állományokat kihagyta, de természetesen benne van).
Nem teljesen értem amit írsz, de talán mindegy is, mert amit beleírsz, annak ott kell maradnia, akkor és mindöröké. Én így oldom meg az EEPROM írását:
Ha kódot akarsz beilleszteni, akkor használd a Kód gombot, vagy csatold a fájlt, ha hosszú! |
Bejelentkezés
Hirdetés |