Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Upis u interni EEPROM za mikrokontrolere 16f serije

[es] :: Elektronika :: Mikrokontroleri :: Upis u interni EEPROM za mikrokontrolere 16f serije

Strane: 1 2

[ Pregleda: 5144 | Odgovora: 22 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

mnn
sm

Član broj: 85435
Poruke: 723
*.dynamic.isp.telekom.rs.



+25 Profil

icon Upis u interni EEPROM za mikrokontrolere 16f serije12.07.2011. u 18:24 - pre 155 meseci
Kako upisujete promenljive tipa integer ili double u interni eeprom mikrokontrolera ?Kod upisa promenljivih tipa char koristim standardno
Code:

vrednost = read_eeprom (adresa);

odnosno

Code:


write_eeprom (adresa, vrednost);

Kod upisa tipa integer prvo sam razbijao promenljivu na jedinice ,desetice...,pa ih posebno upisivao na pojedinacna mesta.Kad imam malo promenljivih to mi ne smeta ,ali kad treba da upisem promenljivu tipa double to mi izgleda glupavo ,pa me zanima kako to ostali resavaju.
 
Odgovor na temu

rsinisa
Siniša Radanočević
Smederevo

Član broj: 2716
Poruke: 1586
*.dynamic.isp.telekom.rs.



+321 Profil

icon Re: Upis u interni EEPROM za mikrokontrolere 16f serije12.07.2011. u 18:37 - pre 155 meseci
O kom jeziku je reč? Neki imaju mogućnost da smeste sve bajtove odjednom (ako je višebajtna promenljiva), a kod nekih mora jedan po jedan bajt.

Pozdrav.
Sinisha
 
Odgovor na temu

mnn
sm

Član broj: 85435
Poruke: 723
*.dynamic.isp.telekom.rs.



+25 Profil

icon Re: Upis u interni EEPROM za mikrokontrolere 16f serije12.07.2011. u 18:57 - pre 155 meseci
U pitanju je C , Hi Tech C.
 
Odgovor na temu

rsinisa
Siniša Radanočević
Smederevo

Član broj: 2716
Poruke: 1586
*.dynamic.isp.telekom.rs.



+321 Profil

icon Re: Upis u interni EEPROM za mikrokontrolere 16f serije12.07.2011. u 19:21 - pre 155 meseci
Ne pričam taj jezik, ali za par minuta pretrage po netu sam video da sintaksa podržava samo upis i čitanje jednog bajta.

Pozdrav.
Sinisha
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.31.24.217.adsl2.beograd.com.

Sajt: mysql.rs


+2377 Profil

icon Re: Upis u interni EEPROM za mikrokontrolere 16f serije13.07.2011. u 06:46 - pre 155 meseci
jedinice, desetice ?!?!?!?

treba da znas koliko bajtova je koja promenjljiva ... int je kod vecine kompajlera za 8bitne mcu-e 2 bajta, ja volim da koristim "sigurne" tipove tipa int8, int16, int32 ili BYTE, WORD, DWORD

najlakse da pristupas bajt po bajt .. ako se dobro secam hitech to ume (ja preferiram ccs kod njega to radi)
isto ovo radi i za WORD i za DWORD i float i double i ..

Code:

BYTE *p;
BYTE i, adresa;
double x; 

x = 123.123; // vrednost koju hoces da zapamtis
adresa = 10; // adresa gde hoces da zapamtis
p = (unsigned char *) &x;
for (i = sizeof(double); i != 0; i--) eeprom_write(adresa++, *p++);

adresa = 10;
p = (unsigned char *) &x;
for (i = sizeof(double); i != 0; i--) *p++ = eeprom_read(adresa++); 



 
Odgovor na temu

goran_68

Član broj: 89012
Poruke: 932
*.dynamic.isp.telekom.rs.



+81 Profil

icon Re: Upis u interni EEPROM za mikrokontrolere 16f serije13.07.2011. u 07:54 - pre 155 meseci
Ako promenljive deklarišeš ovako:

unsigned char adresa;
unsigned long vrednost;

union lng
{
long l;
unsigned long ul;
int i[2];
unsigned int ui[2];
char b[4];
unsigned char ub[4];
}ltmp;


Onda kod može da izgleda ovako:

ltmp.ul = vrednost;

write_eeprom(adresa, ltmp.ub[0]);
write_eeprom(adresa + 1, ltmp.ub[1]);
write_eeprom(adresa + 2, ltmp.ub[2]);
write_eeprom(adresa + 3, ltmp.ub[3]);

isto je i za read






gorankg
 
Odgovor na temu

mnn
sm

Član broj: 85435
Poruke: 723
*.dynamic.isp.telekom.rs.



+25 Profil

icon Re: Upis u interni EEPROM za mikrokontrolere 16f serije14.07.2011. u 18:14 - pre 155 meseci
Bogdanovo resenje radi,a ovo goranovo_68 nisam probao.
Nadam se da će ovo još nekome pomoći.
Pozdrav
 
Odgovor na temu

tox!e
NS

Član broj: 20007
Poruke: 269
*.adsl.eunet.rs.

ICQ: 267386221


+3 Profil

icon Re: Upis u interni EEPROM za mikrokontrolere 16f serije21.10.2011. u 16:30 - pre 152 meseci
Takodje imam problema sa upisom u interni eeprom kod pic16f887 . Citanje je ok, probavao razlicite kodove, citao datasheet od istog sve radim kako treba.
Koristio custom funkcije, a pokusavao sam i sa Hi-Tech C compilerovim funkcijama eeprom_write(address, data) , kao i njihov macro EEPROM_WRITE(address, data) .
Ako upisem rucno ili inicijalizujem neke vrednosti, onda ih on iscita kako treba, ali meni treba da program moze da vrsi citanje i upis.

Code:
void eeprom_wr(unsigned char address, unsigned char data) 

GIE=0;
while (WR) continue;
EEADR = 0x01;

EECON1 == 0x7F;
WREN=1;
EEDATA = 0x02;

EECON2    =    0X55; 
EECON2    =    0XAA; 
WR     =    1; 
WREN    =    0;
GIE    =    1; 

/*    
    while (WR) continue;
    EEADR    =    address; 
    EEDATA    =    data; 
    RP0    = 1;
    EEPGD    =    0; 
    WREN    =    1; 
        GIE     =    0; 
    EECON2    =    0X55; 
    EECON2    =    0XAA; 
    WR     =    1; 
    GIE    =    1; 
    WREN    =    0;
*/    



Ni jedan ne radi upis, dok u proteusu rade obe varijante i komentarisana i nekomentarisana.

Da li je neko imao slican slucaj sa ovim kontrolerom? Citao errata za ovaj kontroler, nisam naisao da spominju tako nesto.
 
Odgovor na temu

goran_68

Član broj: 89012
Poruke: 932
*.dynamic.isp.telekom.rs.



+81 Profil

icon Re: Upis u interni EEPROM za mikrokontrolere 16f serije21.10.2011. u 18:13 - pre 152 meseci
Proveri konfiguracione bitove.

gorankg
 
Odgovor na temu

tox!e
NS

Član broj: 20007
Poruke: 269
*.adsl.eunet.rs.

ICQ: 267386221


+3 Profil

icon Re: Upis u interni EEPROM za mikrokontrolere 16f serije21.10.2011. u 18:30 - pre 152 meseci
__CONFIG(XT & WDTDIS & PWRTDIS & UNPROTECT & LVPDIS);
Oscillator : XT
Watchdog Timer : Off
Power Up Timer : Off
MCLR : /MCLR is external
Code protect : Off, probao i on
Data EE Read Protect : Off, probao i on
Brown Out Detect : BOD Enabled, SBOREN Disabled
Internal External Switch Over Mode : Enabled
Monitor Clock Fail-safe : Enabled
LVP : Disabled
Brown Out Reset Sel Bit : Brown out at 4.0V
Self Write Enable : No protection

 
Odgovor na temu

ZAS011
Uzgajivač šargarepe izakuće
Vanuatu

Član broj: 288510
Poruke: 4543

ICQ: 8713400
Sajt: www.justfuckinggoogleit.c..


+530 Profil

icon Re: Upis u interni EEPROM za mikrokontrolere 16f serije21.10.2011. u 19:35 - pre 152 meseci
Citat:
tox!e: __CONFIG(XT & WDTDIS & PWRTDIS & UNPROTECT & LVPDIS);
Oscillator : XT
Watchdog Timer : Off
Power Up Timer : ON
MCLR : /MCLR is external
Code protect : Off, probao i on
Data EE Read Protect : Off, probao i on
Brown Out Detect : BOD Enabled, SBOREN Disabled
Internal External Switch Over Mode : Disabled
Monitor Clock Fail-safe : Disabled
LVP : Disabled
Brown Out Reset Sel Bit : Brown out at 4.0V
Self Write Enable : No protection


Ajde promeni u gore naznacene vrednosti
--
Make no mistake between my personality and my attitude.
My personality is who I am.
My attitude depends on who you are.
 
Odgovor na temu

ZAS011
Uzgajivač šargarepe izakuće
Vanuatu

Član broj: 288510
Poruke: 4543

ICQ: 8713400
Sajt: www.justfuckinggoogleit.c..


+530 Profil

icon Re: Upis u interni EEPROM za mikrokontrolere 16f serije21.10.2011. u 19:39 - pre 152 meseci
Ex, da, zaboravih da dodam, Proteus je proteus a pravi hardver je nesto drugo. I najbolji simulator je tri puta losiji od PRAVOG hardvera
--
Make no mistake between my personality and my attitude.
My personality is who I am.
My attitude depends on who you are.
 
Odgovor na temu

goran_68

Član broj: 89012
Poruke: 932
*.dynamic.isp.telekom.rs.



+81 Profil

icon Re: Upis u interni EEPROM za mikrokontrolere 16f serije21.10.2011. u 20:05 - pre 152 meseci
Proveri da li ono UNPROTECT zaista postavi bitove kako treba. Nalazio sam greške u include fajlovima.
gorankg
 
Odgovor na temu

tox!e
NS

Član broj: 20007
Poruke: 269
*.adsl.eunet.rs.

ICQ: 267386221


+3 Profil

icon Re: Upis u interni EEPROM za mikrokontrolere 16f serije21.10.2011. u 20:32 - pre 152 meseci
Slazem se da je pravi hardver najbolji od bilo kog simulatora, ali sa njim sam poceo da razvijam, dok mi nije stigao doticni kontroler. Takodje mnogo mi je komotnije da koristim in circuit debugging nego preko simulacije, ali ok.
Probao sam da namestim konfiguracione bitove, ali isto se desava. Gledao sam i UNPROTECT u pic16f887.h vrednost 0x3fff sto je koliko znam ok.

Isto probao sa kompajlerovim funkcijama, a i sa ovim, koje sam postavio.
Ali i dalje nece. :(

 
Odgovor na temu

goran_68

Član broj: 89012
Poruke: 932
*.dynamic.isp.telekom.rs.



+81 Profil

icon Re: Upis u interni EEPROM za mikrokontrolere 16f serije21.10.2011. u 23:01 - pre 152 meseci
Ovaj izraz ti nije dobar:
EECON1 == 0x7F;

Takođe, po meni nepotrebno:
RP0 = 1;


void eeprom_wr(unsigned char address, unsigned char data)
{
EEADR = address;
EEDATA = data;
EEPGD = 0;
WREN = 1;
GIE = 0;
while(GIE){};
EECON2 = 0X55;
EECON2 = 0XAA;
WR = 1;
GIE = 1;
WREN = 0;
}

Kako i kada proveravaš da li ti je upisan željeni sadržaj u eeprom?

gorankg
 
Odgovor na temu

tox!e
NS

Član broj: 20007
Poruke: 269
*.adsl.eunet.rs.

ICQ: 267386221


+3 Profil

icon Re: Upis u interni EEPROM za mikrokontrolere 16f serije21.10.2011. u 23:07 - pre 152 meseci
Pazi, ali nece ni kompajlerova eeprom_write funkcija da radim, ali sadcu da probam i ovo.
Sto se sadrzaja tice proveru vrsim na vise nacina:
1. pustim program da radi, zatim sa pickit2 iscitam eeprom
2. idem preko debuggera, postavim bp na funkciju za upis, kada se ona izvrsi pustim jos da radi program, pa pauziram i opet iscitavam vrednosti
3. softverski znam sta sam upisao, i na tu kombinaciju tastera, treba da odreaguje. ako odreaguje onda ok, ako ne onda nevalja. to znam da 100% radi, jel ako upisem rucno u eeprom onda fercera, ali mi to nije resenje, jel treba i on s vremena na vreme da menja sadrzaj eeproma.

Mada kako gledam Microchipov forum, dosta ljudi ima slicnih problema. No ujutru cu probati sa eksternim napajanjem, a i pregledacu kondenzatore na oba Vcc i Vss od kontrolera. Mozda ga to muci.

[Ovu poruku je menjao tox!e dana 22.10.2011. u 00:19 GMT+1]
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.31.24.217.adsl2.beograd.com.

Sajt: mysql.rs


+2377 Profil

icon Re: Upis u interni EEPROM za mikrokontrolere 16f serije22.10.2011. u 00:17 - pre 152 meseci
ako ne mozes da upises u 16F-ov EEPROM obicno je

1. nemas eeprom (da ima i takvih 16F-ova)
2. nisi stavio decoupling kondove
3. zabranio si pisanje po epromu (fuse bitovi)
4. crko ti eeprom (oce i to da se desi)

Ako sam ja dobro shvatio ti pokusavas to sa PIC16F887 ?

Da li koristis interni oscilator ili externi? Ako je externi koji?
 
Odgovor na temu

tox!e
NS

Član broj: 20007
Poruke: 269
*.adsl.eunet.rs.

ICQ: 267386221


+3 Profil

icon Re: Upis u interni EEPROM za mikrokontrolere 16f serije22.10.2011. u 07:37 - pre 152 meseci
Koristim externi. Kristal od 8MHz i 2 kondenzatora od 22pF. Nije valjda da sam takve srece da uzmem nov kontroler i da mu je gotov EEPROM. Koje vrednosti preporucujes za decoupling kond. 100nF ?
 
Odgovor na temu

goran_68

Član broj: 89012
Poruke: 932
*.dynamic.isp.telekom.rs.



+81 Profil

icon Re: Upis u interni EEPROM za mikrokontrolere 16f serije22.10.2011. u 08:41 - pre 152 meseci
Za probu ti preporucujem da napravis zaseban projekat u kome ces u while petlji najpre upisivati nesto u eeprom a potom posle nesto vremena procitati sadrzaj te lokacije. Ukoliko se sadrzaj poklapa sa zeljenim digni ili spusti neki pin. I tako za sve lokacije internog eeproma. Samo to i nista vise. Zabrani interrupt-e, bez perferija, bez debugger-a, iskljuci watchdog i sl.Obezbedi na pocetku programa nekoliko sekundi pauze pa kreni u while. Ja nikada nisam imao problem sa internim eepromom ali ko zna moguce je da nesto kod tog pica nije u redu.
gorankg
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.31.24.217.adsl2.beograd.com.

Sajt: mysql.rs


+2377 Profil

icon Re: Upis u interni EEPROM za mikrokontrolere 16f serije22.10.2011. u 13:02 - pre 152 meseci
100n je ok za decoupling
na novom mi se nikad nije desilo da ne radi eeprom
evo ti jednostavan kod i hex (picc) pa probaj .. napeci ga, pusti da radi par sekundi i onda ga iskaci i procitaj sta psie u eepromu .. (rece da imas pickit) ... ja sam sad probao na 887 i radi

Code:

#include <16F887.h>
#device adc=16

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES HS                       //High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD)
#FUSES NOMCLR                   //Master Clear pin used for I/O
#FUSES NOBROWNOUT               //No brownout reset
#FUSES NOIESO                   //Internal External Switch Over mode disabled
#FUSES NOFCMEN                  //Fail-safe clock monitor disabled
#FUSES LVP                      //Low voltage prgming, B3(PIC16) or B5(PIC18) NOT available for I/O

#use delay(clock=8000000)

void main()
{
  unsigned char i;
   setup_comparator(NC_NC_NC_NC);// This device COMP currently not supported by the PICWizard

   while(1){
      for (i = 0; i < 100; i++) write_eeprom(i, i);
      delay_ms(1000);
   }   
}


HEX:
Code:

:1000000000308A001A28000023308400831300087F
:10001000031917280230F800F701F70B0D28F80B29
:100020000C289730F700F70B1328800B0A288A1149
:100030000A125A28840183131F308305831603177D
:100040000908C039890003131F129F1200300317DB
:10005000880083128701880189018701880189014D
:100060000313A1012108633C031C55282108031731
:100070008D000313210803178C0083168C130C15B5
:10008000831203130B08F7008B13831603175530E5
:100090008D00AA308D008C148C184C280C11770818
:1000A000831203138B04A10A32280430A200FA3011
:0C00B000A3000428A20B5728312863008D
:04400E00C230FF3F7E
:00000001FF
;PIC16F887
;CRC=A4AF  CREATED="22-Oct-11 14:00"


 
Odgovor na temu

[es] :: Elektronika :: Mikrokontroleri :: Upis u interni EEPROM za mikrokontrolere 16f serije

Strane: 1 2

[ Pregleda: 5144 | Odgovora: 22 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.