MicroBasic - pic16F1709 - nonviolet FLASH read-write problem

mikroC, mikroBasic and mikroPascal PRO for Microchip’s 8-bit PIC MCUs.
Post Reply
Author
Message
vrach
Posts: 1
Joined: 05 Jul 2021 15:10

MicroBasic - pic16F1709 - nonviolet FLASH read-write problem

#1 Post by vrach » 05 Jul 2021 16:47

Pozdrav za sve, prvi put pristupam ovakvim forumima iako se računarima bavim 30-tak godina.
Ne znam kakva su pravila pa ću ovo pitanje postaviti na srpskom a ako treba prevod na engleski i to ću dodati naknadno.
Treba mi pomoć oko snimanja pojedinačnih podataka u trajnu Flash memoriju na kraju memoriske mape mikrokontrolera pic16f1709 i to za MikroBasic.
Opis problema:
Napravio sam uređaj koji prikazuje trocifren broj (na sedmosegmentnom displeju) i sa tri tastera cifre mogu da se podešavaju.
Nakon prvog podešavanja uređaj upiše u Flash memoriju podatke i nakon ponovnog uključenja uredno pročita te podatke i prikaže na displeju.
Međutim ukoliko ponovo pokušam da promenim cifre (tj. drugi i svaki naredni put bez obzira što sam uređaj restartovao) deluje da je snimanje prošlo kako treba ali nakon ponovong uključenja uređaj više ne može da pročita snimljene podatke, tj. pročita ih ali to nisu ispravni podaci.
Znači snimanje u Flash memoriju i uspešno čitanje podataka uspeva samo prvi put nakon programiranja mikrokontrolera a svaki naredni pokušaj je neuspešan.
Što se tiče koda koji se koristi, pokušao sam sa raznim varijantama definisanja promenjivih (byte, word, [4], [32]) i sa primerima iz Help-a i ni jedna ne daje rezultate.
Na kraju sam došao do svedenog koda koji je jednostavan da ne može biti jednostavniji.
Evo dela koda koji se koristi za upis-čitanje podataka u Flash memoriju:
---------------------------------------------------------------------------------------
dim stotine as word
dim desetine as word
dim jedinice as word
dim podatak_u_FLASH_memoriji as word[4]
...
Snimi_u_FLASH_memoriju:
podatak_u_FLASH_memoriji[0] = stotine
podatak_u_FLASH_memoriji[1] = desetine
podatak_u_FLASH_memoriji[2] = jedinice
podatak_u_FLASH_memoriji[3] = 0
FLASH_Write(8064, podatak_u_FLASH_memoriji)
Delay_ms(500)
return
...
Ucitaj_iz_FLASH_memorije:
stotine = FLASH_Read(8064) ' za PIC16F1709 ' 1F80h-1FFFh '8064-8191
Delay_ms(500)
desetine = FLASH_Read(8065)
Delay_ms(500)
jedinice = FLASH_Read(8066)
Delay_ms(500)
return
-----------------------------------------------------------------------------------------------------
Isprobao sam ovaj kod i sa dodatkom FLASH_Erase komande ali ni to nije dalo rezultate.
Nakon prvog startovanja uređaja i snimanja podataka uradio sam čitanje podataka iz mikrokontrolera (ako je to uopšte moguće) i sve je delovalo ok (na adresama od 1F80h sam našao brojeve cifara koje sam podesio), ali nakon druge izmene i snimanja podaci su delovali zbrljano, iako ne bi trebalo da je moguće da je program slučajno pisao preko drugih adresa osim ovih koje se nalaze u FLASH_Write komandi....
Jasno mi je da se prilokom upisa u Flash memoriju odjednom upisuje 4, 16 ili čak 32 bajta ali ipak moji podaci nisu na mestu gde bi trebalo da budu... osim prvi put...???
Čini mi se čak i da je programski deo na nižim adresama dobio neke praznine (tj. da je prvobitno HEX fajl bio više popunjen) mada se to nije odrazilo na rad uređaja i ostale njegove funkcije.
Šta bi ovde moglo da bude problem?
Molim za neki savet?

User avatar
filip
mikroElektronika team
Posts: 11874
Joined: 25 Jan 2008 09:56

Re: MicroBasic - pic16F1709 - nonviolet FLASH read-write problem

#2 Post by filip » 07 Jul 2021 07:48

Hi,

Since this is an English language based forum, please write your post in English in the future.

I will try your code and let you know.

Regards,
Filip.

Post Reply

Return to “PIC PRO Compilers”