Elektronika.lt
 2024 m. gruodžio 13 d. Projektas | Reklama | Žinokite | Klausimai | Prisidėkite | Atsiliepimai | Kontaktai
Paieška portale
EN Facebook RSS

 Kas naujo  Katalogas  Parduotuvės  Forumas  Tinklaraščiai
 Pirmas puslapisSąrašas
 Forumas / + pokalbiai
 - Paieška forume
 - D.U.K. / Forumo taisyklės
 - Narių sąrašas
 - Registruotis
 - Prisijungti

Elektronika.lt portalo forumas

Jūs esate neprisijungęs lankytojas. Norint dalyvauti diskusijose, būtina užsiregistruoti ir prisijungti prie forumo. Prisijungę galėsite kurti naujas temas, atsakyti į kitų užduotus klausimus, balsuoti forumo apklausose.

Administracija pasilieka teisę pašalinti pasisakymus bei dalyvius, kurie nesilaiko forumo taisyklių. Pastebėjus nusižengimus, prašome pranešti.

Dabar yra 2024 12 13, 04:58. Visos datos yra GMT + 2 valandos.
 Forumas » Mikrovaldikliai » eeprom 24c32
Jūs negalite rašyti naujų pranešimų į šį forumą
Jūs negalite atsakinėti į pranešimus šiame forume
Jūs negalite redaguoti savo pranešimų šiame forume
Jūs negalite ištrinti savo pranešimų šiame forume
Jūs negalite dalyvauti apklausose šiame forume
 
  
Puslapis 16
Pereiti prie 1, 2, 3, 4, 5, 6  Toliau
Pradėti naują temą  Atsakyti į pranešimą Rodyti ankstesnį pranešimą :: Rodyti kitą pranešimą 
 eeprom 24c32
PranešimasParašytas: 2019 01 03, 17:56 Pranešti apie taisyklių pažeidimą Atsakyti su citata
dmb-220
Patyręs dalyvis
Patyręs dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą Siųsti el. laišką Apsilankyti vartotojo tinklapyje
sveiki, susiduriau su problema, nuskaitant eeprom 24c32, naudoju stm32f103 mikrovaldikli.

Kodas:
void eeprom_read_char(uint8_t address, uint16_t reg){
   writeCommand(address, reg);
   i2c_start();
   i2c_address_direction(address << 1, I2C_Direction_Receiver);
   test1 = i2c_receive_nack();
   i2c_stop();
}
//arba sitas
void eeprom_read_int(uint8_t address, uint16_t reg){
   writeCommand(address, reg);
   i2c_start();
   i2c_address_direction(address << 1, I2C_Direction_Receiver);
   test2 = i2c_receive_ack();
   test2 <<= 8;
   test2 |= i2c_receive_nack();
   i2c_stop();
}


sitie veikia gerai, nurodai, adresus ir nuskaito. pirmas nuskaito 8 bitus, su antru nuskaitau 2 po 8 bitus ir sujungiu, vel gerai yra.

bet problema buna kai noriu nuskaityti 32 bitus
Kodas:
void eeprom_read_float(uint8_t address, uint16_t reg){
   writeCommand(address, reg);
   i2c_start();
   i2c_address_direction(address << 1, I2C_Direction_Receiver);
   test3 = i2c_receive_ack();
   test3 <<= 8;
   test3 |= i2c_receive_ack();
   test3 <<= 8;
   test3 |= i2c_receive_ack();
   test3 <<= 8;
   test3 |= i2c_receive_nack();
   i2c_stop();

}


bandau gauti irasyta float skaiciu, bet gaunu tik skaiciu kratini. ka as blogai darau? kaip isgauti float?
P.S. su arduino veikia puikiai. o su stm32 C kalba nesigauna[/code]

_________________
Skype: dmb-220
 eeprom 24c32
PranešimasParašytas: 2019 01 03, 19:06 Pranešti apie taisyklių pažeidimą Atsakyti su citata
Socrates
Senbuvis
Senbuvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
Nesimato kur test3 aprasytas?
 eeprom 24c32
PranešimasParašytas: 2019 01 03, 19:16 Pranešti apie taisyklių pažeidimą Atsakyti su citata
dmb-220
Patyręs dalyvis
Patyręs dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą Siųsti el. laišką Apsilankyti vartotojo tinklapyje
Socrates rašo:
Nesimato kur test3 aprasytas?


Kodas:
uint8_t test1;
uint16_t test2;
uint32_t test3;


taip aprasyti testuojant, parasant FLOAT tipa, negalimas postumio ir sujungimo operacijos << |

Kodas:
eeprom_read_char(0x56, 38);
   eeprom_read_int(0x56, 39);
   eeprom_read_float(0x56, 0);

   char re[5];
   itoa(test1, re, 10);
   ST7735_PutStr7x11(10,  100, re, COLOR565_WHITE, COLOR565_BLACK);

   char ri[5];
   itoa(test2, ri, 10);
   ST7735_PutStr7x11(50,  100, ri, COLOR565_WHITE, COLOR565_BLACK);

   char rf[5];
   ftoa(test3, rf, 2);
   ST7735_PutStr7x11(10,  70, rf, COLOR565_WHITE, COLOR565_BLACK);


cia iosvedu i lcd, gal kazka konvertuodasmas blogai darau, be t su ftoa temperatura gerai konvertuoja i lcd isvedima suprantama israiska

_________________
Skype: dmb-220
 eeprom 24c32
PranešimasParašytas: 2019 01 03, 21:38 Pranešti apie taisyklių pažeidimą Atsakyti su citata
Socrates
Senbuvis
Senbuvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
Esi tikras, kad i atminti irasyta gerai? Pabandyk irasyt 11 22 33 44. Arba gali po kiekvieno I2C nuskaitymo issivest po baita.
 eeprom 24c32
PranešimasParašytas: 2019 01 03, 22:58 Pranešti apie taisyklių pažeidimą Atsakyti su citata
dmb-220
Patyręs dalyvis
Patyręs dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą Siųsti el. laišką Apsilankyti vartotojo tinklapyje
Socrates rašo:
Esi tikras, kad i atminti irasyta gerai? Pabandyk irasyt 11 22 33 44. Arba gali po kiekvieno I2C nuskaitymo issivest po baita.


su arduino irasytos reiksmes, kurias kuo puikiausiai nuskaito arduino. o su STM32 nesusidraugauju.

float irasytas i 0 - 3 pozicijas, adresus.
0 - 0100 0010, 1 - 0010 1111, 2 - 1111 1111, 3 - 1101 1110

cia antras FLOAT skaicius, abieju reiksmes labai panasios

4 - 0100 0010, 5 - 0011 0011, 6 - 1111 1111, 7 - 1101 1010

ir kaip man is ju padaryti FLOAT, reiksme turetu buti apie 37.60 - 37.85 ar pan.

_________________
Skype: dmb-220
 eeprom 24c32
PranešimasParašytas: 2019 01 04, 10:12 Pranešti apie taisyklių pažeidimą Atsakyti su citata
gintaras_bar
Patyręs dalyvis
Patyręs dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
Tingiu gilintis į problemą, bet reikėtų naudoti union type kintamąjį. Pateikiu realiai naudojamų paprogramių pavyzdžius.
Kodas:

float
eeprom_read_float (uint16_t address)
{
  uint8_t i = 0;
  union float_bytes
  {
    float val;
    uint8_t bytes[sizeof(float)];
  } data;

  for (i = 0; i < 4; i++)
    {
      while ((HAL_I2C_IsDeviceReady (&hi2c1, EE_I2C_ADDR, 5, 100) != HAL_OK))
         ;
      HAL_I2C_Mem_Read (&hi2c1, EE_I2C_ADDR, address + i, 1,
                        (uint8_t*) &data.bytes[3-i], 1, 10000);
    }

  return data.val;
}

void
eeprom_write_float (uint16_t address, float data)
{
  uint8_t data_buff[4];
  uint8_t i = 0;
  uint8_t *p = (uint8_t*) &data;

  LL_GPIO_ResetOutputPin(EEPROM_WC_GPIO_Port, EEPROM_WC_Pin);

  for (i = 0; i < 4; i++)
    {
      data_buff[3 - i] = p[i];
    }

  for (i = 0; i < 4; i++)
    {
      while ((HAL_I2C_IsDeviceReady (&hi2c1, EE_I2C_ADDR, 5, 100) != HAL_OK))
         ;

      HAL_I2C_Mem_Write (&hi2c1, EE_I2C_ADDR, address + i, 1,
                         (uint8_t*) data_buff + i, 1, 10000);
    }
  LL_GPIO_SetOutputPin(EEPROM_WC_GPIO_Port, EEPROM_WC_Pin);
}
 eeprom 24c32
PranešimasParašytas: 2019 01 04, 10:24 Pranešti apie taisyklių pažeidimą Atsakyti su citata
AlgisL
Senbuvis
Senbuvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
reikalingas typecastingas arba kaip gintas siulo
pvz kazkas tokio:
ftoa(*((float *)&test3), rf, 2);
 eeprom 24c32
PranešimasParašytas: 2019 01 04, 11:19 Pranešti apie taisyklių pažeidimą Atsakyti su citata
dmb-220
Patyręs dalyvis
Patyręs dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą Siųsti el. laišką Apsilankyti vartotojo tinklapyje
AlgisL rašo:
reikalingas typecastingas arba kaip gintas siulo
pvz kazkas tokio:
ftoa(*((float *)&test3), rf, 2);


laba AČIŪ, sita jusu eilute labai pagelbejo, puikiai nuskaito float reiksme, tiksliau ja isveda i lcd

dabar kaip taisiklingai irasyti?

Kodas:
void eeprom_write(uint8_t address, uint16_t reg, uint32_t data){
   writeCommand(address, reg);
   i2c_start();
   i2c_address_direction(address << 1, I2C_Direction_Transmitter);
   i2c_transmit(data);
   i2c_stop();
}
float temp = 45.11;

eeprom_write(0x56, 38, temp);


taip irasant neisiraso nei char nei int nei float tuo labiau. su char galvojau kad lengviau, nes 8 vbit i viena adresa imetu ir viskas. bet bandant irasyt klaidos nera, o nuskaitant buna tik senoji reiksme. pwz laika irasant per i2c i ds3231 paduodi skaiciu i i2c_transmit(); ir isiraso. o eeprom taip paprastai ne

_________________
Skype: dmb-220
 eeprom 24c32
PranešimasParašytas: 2019 01 04, 12:10 Pranešti apie taisyklių pažeidimą Atsakyti su citata
AlgisL
Senbuvis
Senbuvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
ziurek kaip tavo naudojamam libraryje aprasyta i2c_transmit();
normaliam pasaulyje i tokio tipo procedura keliautu rodykle i objekta ir jo dyis baitais, pvz:
i2c_transmit( (uint8_t*) data, sizeof( data) );
 eeprom 24c32
PranešimasParašytas: 2019 01 04, 12:37 Pranešti apie taisyklių pažeidimą Atsakyti su citata
dmb-220
Patyręs dalyvis
Patyręs dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą Siųsti el. laišką Apsilankyti vartotojo tinklapyje
AlgisL rašo:
ziurek kaip tavo naudojamam libraryje aprasyta i2c_transmit();
normaliam pasaulyje i tokio tipo procedura keliautu rodykle i objekta ir jo dyis baitais, pvz:
i2c_transmit( (uint8_t*) data, sizeof( data) );



Kodas:
/**
  ******************************************************************************
  *   @brief   Transmit one byte to I2C bus
  * @param   Data byte to transmit
  * @retval   None
  ******************************************************************************
  */
void i2c_transmit(uint8_t byte)
{
   // Send data byte
   I2C_SendData(I2Cx, byte);
   // Wait for I2C EV8_2.
   // It means that the data has been physically shifted out and
   // output on the bus)
   while (!I2C_CheckEvent(I2Cx, I2C_EVENT_MASTER_BYTE_TRANSMITTED));
}


o cia STM32 library fukcija
Kodas:
/**
  * @brief  Sends a data byte through the I2Cx peripheral.
  * @param  I2Cx: where x can be 1 or 2 to select the I2C peripheral.
  * @param  Data: Byte to be transmitted..
  * @retval None
  */
void I2C_SendData(I2C_TypeDef* I2Cx, uint8_t Data)
{
  /* Check the parameters */
  assert_param(IS_I2C_ALL_PERIPH(I2Cx));
  /* Write in the DR register the data to be sent */
  I2Cx->DR = Data;
}

_________________
Skype: dmb-220
 eeprom 24c32
PranešimasParašytas: 2019 01 04, 12:53 Pranešti apie taisyklių pažeidimą Atsakyti su citata
AlgisL
Senbuvis
Senbuvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
Matau KEIL naudojate...
KTU laborai jums knisa prota?
taigis...
Kodas:

void eeprom_write_ex(uint8_t address, uint16_t reg, uint8_t *data, size_t length){
   writeCommand(address, reg);
   i2c_start();
   i2c_address_direction(address << 1, I2C_Direction_Transmitter);
   while(length--) i2c_transmit(*data++);
   i2c_stop();
}

float temp = 45.11;

eeprom_write_ex(0x56, 38, (uint8_t*)&temp, sizeof(temp));

P.S. gali buti nezymiu sintakses ir darbo logikos klaidu Wink)))))
pvz, jei duomenu blokas kerta PUSLAPIO ribas, bet gal tai isspresta tvarkykleje...
 eeprom 24c32
PranešimasParašytas: 2019 01 04, 13:21 Pranešti apie taisyklių pažeidimą Atsakyti su citata
dmb-220
Patyręs dalyvis
Patyręs dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą Siųsti el. laišką Apsilankyti vartotojo tinklapyje
AlgisL rašo:
Matau KEIL naudojate...
KTU laborai jums knisa prota?
taigis...
Kodas:

void eeprom_write_ex(uint8_t address, uint16_t reg, uint8_t *data, size_t length){
   writeCommand(address, reg);
   i2c_start();
   i2c_address_direction(address << 1, I2C_Direction_Transmitter);
   while(length--) i2c_transmit(*data++);
   i2c_stop();
}

float temp = 45.11;

eeprom_write_ex(0x56, 38, (uint8_t*)&temp, sizeof(temp));

P.S. gali buti nezymiu sintakses ir darbo logikos klaidu Wink)))))
pvz, jei duomenu blokas kerta PUSLAPIO ribas, bet gal tai isspresta tvarkykleje...


naudoju System Workbench for STM32
Savamokslis esu, noriu nuo arduino, pilnai pereiti prie STM32f103. Mokausi tik del saves. darausi viena projekteli, ir reik panaudoti eeprom issaugoti nustatymams. siaip ant stm32 naudoja flash vietoje eeprom. bet minusas kad perrasius progrma turi vel suvesti nustatymus

_________________
Skype: dmb-220
 eeprom 24c32
PranešimasParašytas: 2019 01 04, 13:27 Pranešti apie taisyklių pažeidimą Atsakyti su citata
AlgisL
Senbuvis
Senbuvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
Sita eeprom_write_ex() tau tiks visiems kintamuju ir ju strukturu dydziams.
panasiai gali ir nuskaityma organizuotis.
Arduino bibliotekose yra
eeprom_write_block((void *)mystr,(void *)ee_addr,strlen(mystr)+1);
 eeprom 24c32
PranešimasParašytas: 2019 01 04, 14:29 Pranešti apie taisyklių pažeidimą Atsakyti su citata
dmb-220
Patyręs dalyvis
Patyręs dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą Siųsti el. laišką Apsilankyti vartotojo tinklapyje
AlgisL rašo:
Sita eeprom_write_ex() tau tiks visiems kintamuju ir ju strukturu dydziams.
panasiai gali ir nuskaityma organizuotis.
Arduino bibliotekose yra
eeprom_write_block((void *)mystr,(void *)ee_addr,strlen(mystr)+1);


aciu uz sugaista laika, bet man realiai nenori veikti.
Kodas:
float temp = 10.19;
      eeprom_write_ex(0x56, 4, (uint8_t*)&temp, sizeof(temp));

float temp = 10.19; arba uint32_t temp = 10.19; jei bandai irasyt, pakinba MCU, jei pakeiciu i uint16_t temp = 10.19; tada kodas vykdomas, bet nieko neiraso. kazko su 32 bit nenori draugauti

bandant irasyti char ar short ar int, lyg ir bando rasyt, kodas eina, lcd rodo. bet nuskaitant reiksme nebuna pakeista.

kazkur kazka esu prisidirbes, reik mokytis kaip naudoti debug, nes kitaip nerasiu kur problema

_________________
Skype: dmb-220
 eeprom 24c32
PranešimasParašytas: 2019 01 04, 14:58 Pranešti apie taisyklių pažeidimą Atsakyti su citata
AlgisL
Senbuvis
Senbuvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
Taip "ant smugio" sunku tiksliai nustatyti, kadangi neaisku kaip ten pas tave WP koja ?
Jei ji "1", tai ir neraso tau nieko.
kas rasoma, jei i LCD isvesti length ir *((float*)&data)
Pradėti naują temą  Atsakyti į pranešimą Pereiti prie 1, 2, 3, 4, 5, 6  Toliau
 
Forumo sistema: phpBB
 „Google“ paieška forume
 Kas naujesnio?
 Naujos temos forume

Global electronic components distributor – Allicdata Electronics

Electronic component supply – „Eurodis Electronics“

LOKMITA – įvairi matavimo, testavimo, analizės ir litavimo produkcija

Full feature custom PCB prototype service

GENERAL FINANCING BANKAS

Mokslo festivalis „Erdvėlaivis Žemė

LTV.LT - lietuviškų tinklalapių vitrina

„Konstanta 42“

Technologijos.lt

Buitinė technika ir elektronika internetu žemos kainos – Zuza.lt

www.esaugumas.lt – apsaugok savo kompiuterį!

PriedaiMobiliems.lt – telefonų priedai ir aksesuarai

Draugiškas internetas

FS25 Tractors
Farming Simulator 25 Mods, FS25 Maps, FS25 Trucks
ETS2 Mods
ETS2 Trucks, ETS2 Bus, Euro Truck Simulator 2 Mods
FS22 Tractors
Farming Simulator 22 Mods, FS22 Maps, FS25 Mods
VAT calculator
VAT number check, What is VAT, How much is VAT
LEGO
Mänguköök, mudelautod, nukuvanker
Thermal monocular
Thermal vision camera,
Night vision ar scope,
Night vision spotting scope
FS25 Mods
FS25 Harvesters, FS25 Tractors Mods, FS25 Maps Mods
Dantų protezavimas
All on 4 implantai,
Endodontija mikroskopu,
Dantų implantacija
FS25 Mods
FS25 Maps, FS25 Cheats, FS25 Install Mods
GTA 6 Weapons
GTA 6 Characters, GTA 6 Map, GTA 6 Vehicles
FS25 Mods
Farming Simulator 25 Mods,
FS25 Maps
Reklama
‡ 1999– © Elektronika.lt | Autoriaus teisės | Privatumo politika | Atsakomybės ribojimas | Turinys | Reklama | Kontaktai LTV.LT - lietuviškų tinklalapių vitrina
Script hook v, Openiv, Menyoo
gta5mod.net
FS25 Mods, FS25 Tractors, FS25 Maps
fs25mods.lt
Optical filters, UV optics, electro optical crystals
www.eksmaoptics.com
Reklamos paslaugos
SEO sprendimai

www.addad.lt
Elektroninių parduotuvių optimizavimas „Google“ paieškos sistemai
www.seospiders.lt
FS22 mods, Farming simulator 22 mods,
FS22 maps

fs22.com
Reklama


Reklama