mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik PIC16F18344 EEPROM Schreiben und Lesen funktioniert nicht


Autor: Max (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich versuche verzweifelt ein Byte in das EEPROM zu schreiben und 
anschließend wieder auszulesen.
Jedoch scheint das Schreiben einfach nicht zu funktionieren, denn ich 
lese immer nur 0xFF egal was ich zu vor hineinschreibe.
Auch, wenn ich im MPLAB IDE 3.60 das "EE Data Memory" Fenster öffne und 
alle EEPROM Werte auslese sind alle mit dem gleichen Wert 0xFF belegt.
Ich habe jetzt mehrmals sehr genau die Dokumentation dazu gelesen und 
kann beim besten willen meinen Fehler nicht finden.

Erkennt jemand was ich falsch mache?
Ich nutze MPLAB 3.6 und MPASM.
; CONFIG1
__CONFIG _CONFIG1, 
        _FEXTOSC_OFF & 
        _RSTOSC_HFINT32 & 
        _CLKOUTEN_OFF & 
        _CSWEN_ON & 
        _FCMEN_OFF
 
; CONFIG2
__CONFIG _CONFIG2, 
        _MCLRE_OFF & 
        _PWRTE_ON & 
        _WDTE_OFF & 
        _LPBOREN_OFF & 
        _BOREN_OFF & 
        _BORV_HIGH & 
        _PPS1WAY_OFF & 
        _STVREN_ON & 
        _DEBUG_OFF
 
; CONFIG3
__CONFIG _CONFIG3, 
        _WRT_OFF & 
        _LVP_OFF
 
; CONFIG4
__CONFIG _CONFIG4, 
        _CP_OFF & 
        _CPD_OFF

code 0x0

; Write
  banksel NVMCON1
  bsf    NVMCON1, NVMREGS
  bsf    NVMCON1, WREN
  
  banksel  NVMADRH
  movlw  H'70'
  movwf  NVMADRH
  
  banksel  NVMADRL
  movlw  H'00'
  movwf  NVMADRL
  
  banksel  NVMDATL
  movlw  H'44'
  movwf  NVMDATL
  
  banksel  NVMCON2
  
  movlw  H'55'
  movwf  NVMCON2
  
  movlw  H'AA'
  movwf  NVMCON2
  
  banksel  NVMCON1
  bsf    NVMCON1, WR
  
  nop ; Kann man eig. beim PIC16F18344 weglassen. 
  nop ;
  
  btfsc  NVMCON1, WR
  goto  $-2
  
; Read
  banksel  NVMCON1
  bsf    NVMCON1, NVMREGS
  bcf    NVMCON1, WREN
  
  banksel  NVMADRL
  movlw  H'00'
  movwf  NVMADRL
  
  banksel  NVMADRH
  movlw  H'70'
  movwf  NVMADRH
  
  banksel  NVMCON1
  bsf    NVMCON1, RD
  btfsc  NVMCON1, RD
  goto  $-2
  
  banksel  NVMDATL
  movf  NVMDATL, W
  
  goto  $

Autor: Volker SK (vloki)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sicher, dass das mit der x7000 Adresse stimmt?
Das gilt vielleicht nur bei indirektem Zugriff über die Tablepointer.
Normal beginnt das EEPROM soweit ich mich erinnern kann bei 0x0000.

Autor: Thomas Elger (picalic)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Servus,

Du solltest Dich an's Datenblatt halten, wo folgende Sequenz als 
Beispiel angegeben ist:
    BANKSEL NVMCON1
    BSF NVMCON1,WREN     ; Enable write/erase
    MOVLW 55h            ; Load 55h
    BCF INTCON,GIE       ; Recommended so sequence is not interrupted
    MOVWF NVMCON2        ; Step 1: Load 55h into NVMCON2
    MOVLW AAh            ; Step 2: Load W with AAh
    MOVWF NVMCON2        ; Step 3: Load AAh into NVMCON2
    BSF NVMCON1,WR       ; Step 4: Set WR bit to begin write/erase
    BSF INTCON,GIE       ; Re-enable interrupts

Mit der Bemerkung:
>Note 1: Sequence begins when NVMCON2 is written; steps 1-4 must occur in the 
>cycle-accurate order shown.

Autor: Max (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oh danke.
Die Adresse 7000h ist schon richtig.
Aber mir ist nicht aufgefallen, dass ich mit dem BANKSEL NVMCON1 
natürlich die Unlock Sequence unterbreche.
Hier nochmal ein Beispiel das bei mir jetzt perfekt funktioniert.
  ; Bank 17 - NVM registers.
  movlb  D'17'
  
  bsf    NVMCON1, NVMREGS
  bsf    NVMCON1, WREN
  
  movlw  H'70'
  movwf  NVMADRH
  
  movlw  H'00'
  movwf  NVMADRL
  
  movlw  H'97'
  movwf  NVMDAT
  
  movlw  H'55'
  movwf  NVMCON2
  
  movlw  H'AA'
  movwf  NVMCON2
    
  bsf    NVMCON1, WR

  btfsc  NVMCON1, WR
  goto  $-2
  
  goto  $

Autor: Thomas Elger (picalic)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gut :)
Aber warum hast Du den "banksel  NVMCON1"-Befehl jetzt durch
  ; Bank 17 - NVM registers.
  movlb  D'17'
ersetzt? Mit "banksel" ist es doch viel bequemer, lesbarer und weniger 
fehleranfällig!

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.