Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

PIC16F1459 - zapis/odczyt do FLASH (HEF , MikroC)[rozwiazany]

mariomario 02 Cze 2017 23:19 1950 1
  • #1 02 Cze 2017 23:19
    mariomario
    Poziom 18  

    Witam, zgodnie ze specyfikacją PIC16F1459 posiada on:

    "High Endurance Flash Memory (HEF) 128 B of Non-volatile Data Storage"

    komórki te znajdują się zgodnie z datasheetem od adresu 0x1F80 do adresu 0x1FFF. Ponadto zgodnie z przykładem dotyczącym zapisu do Flash z "Help'a" mikroC PRO for PIC v7.1.0 i używaniu poniższej funkcji

    Kod: c
    Zaloguj się, aby zobaczyć kod


    napisałem bardzo prosty przykładowy program zapisujący dane ze "zmiennej" do ostatniej komórki 0x1FFF. Poniżej kod programu:
    Kod: c
    Zaloguj się, aby zobaczyć kod


    moje pytanie brzmi - dlaczego po poprawnym skompilowaniu powyższego kodu i wgraniu go do PIC16F1459 za pomocą programatora PICKIT3 oraz MPLAB IPE widzę coś takiego (zamiast 0x3039) w pamięci Flash po odczycie pamięci Flash (gdzie kod programu powinien już dawno się wykonać):
    PIC16F1459 - zapis/odczyt do FLASH (HEF , MikroC)[rozwiazany]

    zaś ustawienia uC w MikroC są następujące:

    PIC16F1459 - zapis/odczyt do FLASH (HEF , MikroC)[rozwiazany]
    a sam uC zasilany z programatora, bez podpiętych jakichkolwiek elementów zewnętrznych.

    0 1
  • #2 04 Cze 2017 11:02
    mariomario
    Poziom 18  

    Poniższy bardziej rozbudowany przykład zaczerpnięty po części z "Help'a" MikroC też nie daje oczekiwanego rezultatu (dalej widzę we wskazanych niżej komórkach tylko wartości 0x3FFF). Dodałem też na pinie RB7 diodę LED migającą co sekundę aby sprawdzić czy uC działa poprawnie - i działa ok:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Czy ma ktoś jakieś sugestie co może być nie tak w powyższym kodzie, lub jakiś sprawdzony kawałek kodu zapisującego do Flash w PIC'ach ?

    Dodano po 12 [godziny] 54 [minuty]:


    Rozwiązałem powyższy problem.

    Na stronie Microchipa jest dostępna Errata dotycząca niniejszego mikrokontrolera PIC16F1459 -> http://ww1.microchip.com/downloads/en/DeviceDoc/80000546F.pdf

    Mój aktualnie zastosowany mikrokontroler jest w najstarszej wersji A2 (1003h). Zgodnie z informacją z erraty dotyczącą "błędów" w wymienionej wersji uC jest błąd dotyczący zapisu do Flash:
    PIC16F1459 - zapis/odczyt do FLASH (HEF , MikroC)[rozwiazany]
    oraz
    PIC16F1459 - zapis/odczyt do FLASH (HEF , MikroC)[rozwiazany]
    Tak więc ustawiłem taktowanie INTOSC na 4MHz. Dodatkowo w kodzie programu dodałem "delay", który daje odpowiednio dużo czasu aby dane w pamięci Flash zdążyły się zapisać (zgodnie z poniższą informacją):
    PIC16F1459 - zapis/odczyt do FLASH (HEF , MikroC)[rozwiazany]

    "Suma sumarum" udało się poprawnie zapisać dane do pamięci Flash w obszar gdzie występuje pamięć HEF (Flash o podwyższonej żywotności na kasowanie/zapis od adresu 0x1F80 do adresu 0x1FFF):
    PIC16F1459 - zapis/odczyt do FLASH (HEF , MikroC)[rozwiazany]

    Działający kod programu:
    Kod: c
    Zaloguj się, aby zobaczyć kod


    Wnioski: na przyszłość czytać Erraty ;)

    0