Zápis do EEPROM v PIC funguje len raz

Všetko čo sa týka mikropočítačov + Sekcia Arduino

Moderátori: psichac, Moderátori

Používateľov profilový obrázok
emajko159
Stály člen
Stály člen
Príspevky: 100
Dátum registrácie: 15 Máj 2010, 00:00
Bydlisko: Bratislava
Vek: 32
Kontaktovať používateľa:

Zápis do EEPROM v PIC funguje len raz

Príspevok od používateľa emajko159 » 07 Okt 2017, 11:49

Ahojte.
Viete mi niekto prosím povedať kde robím chybu?
Dokážem zapísať v PIC údaje do EEPROM, ale keď chcem spraviť viac zápisov, tak zapíše sa len ten čo je v kóde prvý.

Opakujem tam túto časť kódu akurát zakaždým s inou adresou.
WREN = 1; // povolenie EEPROM
EEADR = 0x00;
EEDATA = 0x11;
EECON2 = 0x55;
EECON2 = 0xAA;
WR = 1; // spustenie zapisu
WREN = 0; //zakaz EEPROM
EEIF = 0;

Kód: Vybrať všetko

// CONFIG1
#pragma config FOSC = INTRC_NOCLKOUT// Oscillator Selection bits (INTOSCIO oscillator: I/O function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN)
#pragma config WDTE = OFF       // Watchdog Timer Enable bit (WDT disabled and can be enabled by SWDTEN bit of the WDTCON register)
#pragma config PWRTE = ON       // Power-up Timer Enable bit (PWRT enabled)
#pragma config MCLRE = OFF      // RE3/MCLR pin function select bit (RE3/MCLR pin function is digital input, MCLR internally tied to VDD)
#pragma config CP = OFF         // Code Protection bit (Program memory code protection is disabled)
#pragma config CPD = OFF        // Data Code Protection bit (Data memory code protection is disabled)
#pragma config BOREN = ON       // Brown Out Reset Selection bits (BOR enabled)
#pragma config IESO = OFF       // Internal External Switchover bit (Internal/External Switchover mode is disabled)
#pragma config FCMEN = ON       // Fail-Safe Clock Monitor Enabled bit (Fail-Safe Clock Monitor is enabled)
#pragma config LVP = OFF        // Low Voltage Programming Enable bit (RB3 pin has digital I/O, HV on MCLR must be used for programming)

// CONFIG2
#pragma config BOR4V = BOR40V   // Brown-out Reset Selection bit (Brown-out Reset set to 4.0V)
#pragma config WRT = OFF        // Flash Program Memory Self Write Enable bits (Write protection off)

#include <xc.h>

void main(void) {
    
    int raz = 0;
    TRISD = 0x00;
    PORTD = 0xff;
    SPEN = 1;                   // Serial port enabled (configures RX/DT and TX/CK pins as serial port pins)
    CREN = 1;                   // Enables receiver
    SYNC = 0;                   // Asynchronous mode
    BRGH = 1;                   // High Speed Baud Rate
    BRG16 = 1;                  // 16 bit baud rate generator
    IRCF0 = 1;                  // 8 MHz oscillator
    IRCF1 = 1;                  // 8 MHz oscillator
    IRCF2 = 1;                  // 8 MHz oscillator
    // 115 200 cielovy BAUD RATE
    // BAUD RATE = 117 647,06
    // ERROR = 2,12%
    EEPGD = 0;                  // EEPROM Data memory
    
    while(1) {
        if(raz == 0) {
            PORTD = 0x00;
            raz = 1;

            WREN = 1;               // povolenie EEPROM
            EEADR = 0x00;
            EEDATA = 0x11;
            EECON2 = 0x55;
            EECON2 = 0xAA;
            WR = 1;                 // spustenie zapisu
            WREN = 0;               //zakaz EEPROM
            EEIF = 0;
            WREN = 1;               // povolenie EEPROM
            EEADR = 0x01;
            EEDATA = 0x22;
            EECON2 = 0x55;
            EECON2 = 0xAA;
            WR = 1;                 // spustenie zapisu
            WREN = 0;               //zakaz EEPROM
            EEIF = 0;
            WREN = 1;               // povolenie EEPROM
            EEADR = 0x02;
            EEDATA = 0x33;
            EECON2 = 0x55;
            EECON2 = 0xAA;
            WR = 1;                 // spustenie zapisu
            WREN = 0;               //zakaz EEPROM
            EEIF = 0;
            }
        if(RCIF == 1) {
            
        }
    }
     
    
}
0

BOBOR
Zaslúžilý člen
Zaslúžilý člen
Príspevky: 1069
Dátum registrácie: 15 Dec 2006, 00:00
Bydlisko: Snina, Košice

Re: Zápis do EEPROM v PIC funguje len raz

Príspevok od používateľa BOBOR » 07 Okt 2017, 11:52

zápis do EEPROM trvá asi 5ms takže po každom zápise musíš počkať než začneš ďalší
0

Používateľov profilový obrázok
mac26
Zaslúžilý člen
Zaslúžilý člen
Príspevky: 1298
Dátum registrácie: 01 Feb 2010, 00:00
Bydlisko: Martin

Re: Zápis do EEPROM v PIC funguje len raz

Príspevok od používateľa mac26 » 07 Okt 2017, 11:57

Kontrolna otazka: ako dlho trva zapis do EE?

Edit: neskoro, nevadi...
Ale namiesto cakania radsej kontroluj, ci uz je zapis ukonceny.
Ak si dobre spominam, tak by malo byt dostupne aj prerusenie pri ukonceni zapisu
0

Používateľov profilový obrázok
emajko159
Stály člen
Stály člen
Príspevky: 100
Dátum registrácie: 15 Máj 2010, 00:00
Bydlisko: Bratislava
Vek: 32
Kontaktovať používateľa:

Re: Zápis do EEPROM v PIC funguje len raz

Príspevok od používateľa emajko159 » 07 Okt 2017, 12:34

BOBOR: Ďakujem. Už mi to funguje.
Nevedel som že až tak dlhý čas je potrebný. Trochu som si o tom čítal teraz a vyzerá že je s tým dosť problémov. Ak chce človek veľa vecí zapísať, tak sa aj dosť načaká. A hlavne nikto nevie aký presne dlhý čas je potrebné čakať lebo je to závislé od teploty a ešte aj každý čip je iný.
mac26: hej dobre si pamätáš. to mi ani nenapadlo že môžem prerušenie EEPROM použiť. Teraz som zapisoval cez prerušenia Timer0. Ďakujem.
0

mato3000
Power user
Power user
Príspevky: 9767
Dátum registrácie: 04 Jan 2009, 00:00
Bydlisko: BA

Re: Zápis do EEPROM v PIC funguje len raz

Príspevok od používateľa mato3000 » 07 Okt 2017, 17:35

EEprom sa hlavne nevyužíva na časté zapisovanie, ale len na ukladanie hodnôt, ktoré sú potrebné aj po resete, resp po vypnutí napájania. Na častý zápis potrebuješ PIC s večšou SRAM, alebo to zapisuj do správnej časti Flash toho PICu s obmedzeniami ktoré k tomu patria, resp pripni k tomu nejakú FLASH-ku podla výberu, je ich mrte druhov. A neviem o tom že by bol nejaký problém so zápisom/čítaním eeprom v PIC a bežne to využívam.
0

Používateľov profilový obrázok
boraicho
Ultimate člen
Ultimate člen
Príspevky: 12406
Dátum registrácie: 03 Feb 2007, 00:00
Bydlisko: Prešov
Vek: 35
Kontaktovať používateľa:

Re: Zápis do EEPROM v PIC funguje len raz

Príspevok od používateľa boraicho » 07 Okt 2017, 21:03

pokaiľ viem, tak PIC maju aj priznak, ktor sa nastavi ked eeprom už zapiše, ja to použivam ten priznak.
0
"Aj nevinne vyzerajúca súčiastka, môže byť príčinou nefunkčnosti zariadenia a tou kondenzator 100% je"
3D REBEL II + PLA + PETG
CNC 1810 na DPS

mato3000
Power user
Power user
Príspevky: 9767
Dátum registrácie: 04 Jan 2009, 00:00
Bydlisko: BA

Re: Zápis do EEPROM v PIC funguje len raz

Príspevok od používateľa mato3000 » 08 Okt 2017, 17:49

šak hej,v DS je predsa celá rutina, nič netreba riešiť/špekulovať /vymýšľať, v nej je samozrejme zahrnutý aj ten príznak , ako už spomínal vyššie mac26
0

Napísať odpoveď
  • Podobné témy
    Odpovedí
    Zobrazení
    Posledný príspevok