E-LAB Computers
 

FRAM lesen/schreiben

Harry
Moderator
Avatar
Geschlecht:
Herkunft: zwischen Augsburg und Ulm
Alter: 61
Beiträge: 2180
Dabei seit: 03 / 2003
Betreff:

FRAM lesen/schreiben

 · 
Gepostet: 02.01.2015 - 23:07 Uhr  ·  #1
Hallo @ all,

nachdem ich schon eine ganze Weile mit einem FRAM rumspiele und es nicht schaffe da was zu schreiben und zu lesen ..... HILFEEEEEEEEEEE :D

Typ FM24CL64

Code

Procedure ReadFM;                      // FM24CL64 lesen
  Begin
    TWIout(EEPROMaddr,0,0);
    TWIinp(EEPROMaddr,FMArr);
    If FMArr[2] in [0..40]
      then
        Contrast:=FMArr[2];
      else
        Contrast:=20;
      EndIf;
    If FMArr[3] in [0..25]
      then
        Backlight:=FMArr[3];
      else
        Backlight:=10;
      EndIf;
  End ReadFM;
  

Procedure WriteFM;                     // FM24CL64 schreiben
  Begin
    If Contrast in [0..40]
      then
        FMArr[2]:=Contrast;
      else
        FMArr[2]:=20;
      EndIf;
    If Backlight in [0..25]
      then
        FMArr[3]:=Backlight;
      else
        FMArr[3]:=10;
      EndIf;
    TWIout(EEPROMaddr,0,0);
    TWIout(EEPROMaddr,0,FMArr);
  End WriteFM;


Das Teil will von mir
lesen: I2C-Adresse ($50), Adresse MSB, Adresse LSB, I2C-Adresse ($50), Daten1, Daten2, ........
schreiben: I2C-Adresse ($50), Adresse MSB, Adresse LSB, Daten1, Daten2, ........

Ich komm damit irgendwie nicht klar :(
Hat jemand ein bisschen Code dafür ? Oder eine Erklärung ?

Gruss & Danke
Harry

PS: Ich hab mir grad mal das gesamt Array nach dem lesen anzeigen lassen und das steht überall $FF drin. Entweder funktioniert das schreiben nicht oder das lesen.
miparo
Moderator
Avatar
Geschlecht:
Herkunft: Germany
Alter: 60
Beiträge: 1023
Dabei seit: 09 / 2007
Betreff:

Re: FRAM lesen/schreiben

 · 
Gepostet: 03.01.2015 - 17:06 Uhr  ·  #2
Hallo Harry,
warum machst Du dir das so schwer :yawinkle:

Nimm den Device Treiber S.239 im StdManual.
Dort gibt es auch ein Sample dazu.

Gruß
miparo
Harry
Moderator
Avatar
Geschlecht:
Herkunft: zwischen Augsburg und Ulm
Alter: 61
Beiträge: 2180
Dabei seit: 03 / 2003
Betreff:

Re: FRAM lesen/schreiben

 · 
Gepostet: 03.01.2015 - 17:52 Uhr  ·  #3
Hi miparo,

das hab ich noch gar nicht gesehen :banghead: :confused5: ..... schau ich mir an. Danke.

Gruss
Harry
Harry
Moderator
Avatar
Geschlecht:
Herkunft: zwischen Augsburg und Ulm
Alter: 61
Beiträge: 2180
Dabei seit: 03 / 2003
Betreff:

Re: FRAM lesen/schreiben

 · 
Gepostet: 03.01.2015 - 19:49 Uhr  ·  #4
Falls es jemand interessiert: Die Adresse muß als Word gesendet werden, dann geht es auch. Mit 2 Bytes in Folge funktioniert das nicht.
Da ich nur eine Konfiguration mit 2 Bytes + 2 Dummybytes speichere hab ich die Adresse als Konstante definiert.

DANKE miparo :)

Code

Procedure ReadFM;                      // FM24CL64 lesen
  Const Adr : Word = $0000;
  Begin
    TWIout(FMaddr,Adr);
    TWIinp(FMaddr,FMArr);
    If FMArr[2] in [0..40]
      then
        Contrast:=FMArr[2];
      else
        Contrast:=20;
      EndIf;
    If FMArr[3] in [0..25]
      then
        Backlight:=FMArr[3];
      else
        Backlight:=10;
      EndIf;
  End ReadFM;
  

Procedure WriteFM;                     // FM24CL64 schreiben
  Const Adr : Word = $0000;
  Begin
    If Contrast in [0..40]
      then
        FMArr[2]:=Contrast;
      else
        FMArr[2]:=20;
      EndIf;
    If Backlight in [0..25]
      then
        FMArr[3]:=Backlight;
      else
        FMArr[3]:=10;
      EndIf;
    TWIout(FMaddr,Adr,FMArr);
  End WriteFM;
Lschreyer
Schreiberling
Avatar
Geschlecht: keine Angabe
Beiträge: 527
Dabei seit: 02 / 2007
Betreff:

Re: FRAM lesen/schreiben

 · 
Gepostet: 19.01.2019 - 17:58 Uhr  ·  #5
Ich hatte das hier mal zum Anlass genommen um ein FRAM FM25LS16B (2Kx8) per SPI ans Userdevice zu binden.
Falls jemand das mal benötigt ist hier eine Demodatei die zeigt wie das geht.
Etwas trickreich ist das Schreiben, man muss erst ein WREN-Befehl senden, CS wieder hoch setzen und dann erst schreiben, sonst klappt nicht.

Das Userdevice ist sehr praktisch, damit kann man direkt auf die Variablen zugreifen, und dank Fram ist es superschnell und unendlich oft beschreibbar.
Anhänge an diesem Beitrag
{XMEGA Demo for Avrco "Userdevice"

Written for the FM25L16B FRAM (2Kx8) 8-pin device
Connection with SPI

Creates a userdevice which saves and reads the data to the FRAM
}

program UserData;

Device = xmega256A3U, VCC = 3.3;

import SysTick, SerPortE0, SPI_C, UserPort;


define
// The XMegas don't provide any Oscillator fuses.
// So the application must setup the desired values
// possible OSC types: extXTAL, extClock, ext32kHz, int32Khz, int2MHz, int32MHz

OSCtype = int32MHz,
PLLmul = 6,
prescB = 1,
prescC = 1,
overdrive;

SysTick = 10;

StackSize = $150, iData;
FrameSize = $100, iData;

UserPort = 2048; {2048Byte extern} // define Mem expansion size

SerPortE0 = 38400, Stop2, Timeout;
TxBufferE0 = 64, iData;
RxBufferE0 = 8, iData;

SPIorderC = MSB;
SPImodeC = 0;
SPIprescC = 2;
SPI_SSC = NONE;

implementation

{$UDATA} // place vars into User Device
var
usrb : byte;
usri : integer;
usrArr : array[0..10] of byte;
uStr : string[8];
uRec : record
ub : byte;
uw : word;
uSt : string[4];
end;

{$IDATA}

// FRAM FM25L16B special Aliases and Constants
var
FMCS[@PORTC, 4] : bit;
Framstatus : byte;

alias // Edit here for other SPI Ports and the CS line of the Fram
FRAMCS = FMCS;
FRAMOutByte = SPIoutByteC;
FRAMInpByte = SPIInpByteC;

const
FM_WREN: byte = %00000110;//Set write enable latch 0000 0110b
FM_WRDI: byte = %00000100;// Write disable 0000 0100b
FM_RDSR: byte = %00000101;// Read Status Register 0000 0101b
FM_WRSR: byte = %00000001;// Write Status Register 0000 0001b
FM_READ: byte = %00000011;// Read memory data 0000 0011b
FM_WRITE: byte = %00000010;// Write memory data 0000 0010b
Dateiname: userdata.pas
Dateigröße: 3.29 KB
Titel: Xmega Userdata Fram SPI Demo
Heruntergeladen: 258
Gewählte Zitate für Mehrfachzitierung:   0

Registrierte in diesem Thema

Aktuell kein registrierter in diesem Bereich

Die Statistik zeigt, wer in den letzten 5 Minuten online war. Erneuerung alle 90 Sekunden.