 |

|
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 2025 04 20, 16:09. 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
|
|
|
 |
 |
 |
eeprom 24c32 |
Parašytas: 2019 01 04, 16:29 |
|
|
|
AlgisL rašo: |
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) |
jei wp koja butu blogai pajungta ar nepajungta, su arduino neirasytum?
Kodas: |
// i funkcija paduodu
float t2 = 12.19;
eeprom_write_ex(0x56, 0, (uint8_t*)&t2, sizeof(t2));
//....
char ri[5];
itoa(length, ri, 10);
ST7735_PutStr7x11(50, 100, ri, COLOR565_WHITE, COLOR565_BLACK);
char ra[5];
ftoa(*((float*)&data), ra, 2);
ST7735_PutStr7x11(90, 100, ra, COLOR565_WHITE, COLOR565_BLACK);
//...
|
length isveda 4, o *((float*)&data) i ekrana isveda 0.00. tas pats kas tuscias kintamasis
beto bandziau ir su char ir short pasiziuret ka DATA kintamasis isveda pries irasydamas. grazina kazkokias reiksmes , bet ne tas kas buna nurodyta prie kintamuju.
pvz padavus irasyti char 1 ar kita skaiciu bet koki, prie irasant data i ekrana visada isveda 201
 |
|
_________________ Skype: dmb-220 |
|
|
|
 |
 |
eeprom 24c32 |
Parašytas: 2019 01 04, 17:25 |
|
|
|
reikia debuginti...
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();
*/
uint32_t addr = (uint32_t)data;
uint32_t ival = *( (uint32_t*)data);
uint32_t dval = *( (float*)data);
float fval = *( (float*)data);
// atsispausdini reiksmes addr, ival, dval, fval
// ir ziuri kokia ten perdavimo i procedura trabliema gaunas
}
float temp = 10.19;
eeprom_write_ex(0x56, 4, (uint8_t*)&temp, sizeof(temp));
|
|
|
|
|
|
 |
eeprom 24c32 |
Parašytas: 2019 01 04, 17:30 |
|
|
|
Ne paprasciau irasineti du uint tipo kintamuosius vietoj float? Vienas baitas sveikoji dalis, kita - trupmenine. T.y. jei temperatura 11.22°C, tai pirmas baitas 11, antras 22. Paskui tik sudursi... |
|
|
|
|
 |
 |
eeprom 24c32 |
Parašytas: 2019 01 04, 17:41 |
|
|
|
AlgisL rašo: |
reikia debuginti...
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();
*/
uint32_t addr = (uint32_t)data;
uint32_t ival = *( (uint32_t*)data);
uint32_t dval = *( (float*)data);
float fval = *( (float*)data);
// atsispausdini reiksmes addr, ival, dval, fval
// ir ziuri kokia ten perdavimo i procedura trabliema gaunas
}
float temp = 10.19;
eeprom_write_ex(0x56, 4, (uint8_t*)&temp, sizeof(temp));
|
|
uint32_t dval = *( (float*)data);
sitas atspauzdina bet tik sveika skaiciu, po kablelio nuliai
float fval = *( (float*)data);
sitas atspauzdina visa skaiciu kuri paduodu i funkcija
kiti du variantai tiesiog isveda skaiciu kratinius |
|
_________________ Skype: dmb-220 |
|
|
|
 |
 |
eeprom 24c32 |
Parašytas: 2019 01 04, 18:11 |
|
|
|
Socrates rašo: |
Ne paprasciau irasineti du uint tipo kintamuosius vietoj float? Vienas baitas sveikoji dalis, kita - trupmenine. T.y. jei temperatura 11.22°C, tai pirmas baitas 11, antras 22. Paskui tik sudursi... |
galiu ir taip, bet kad neiraso nieko i eeprom nei int nei char |
|
Paskutinį kartą redagavo dmb-220, 2019 01 04, 18:14. Redaguota 1 kartą _________________ Skype: dmb-220 |
|
|
|
 |
eeprom 24c32 |
Parašytas: 2019 01 04, 18:14 |
|
|
|
dmb-220 rašo: |
Socrates rašo: |
Ne paprasciau irasineti du uint tipo kintamuosius vietoj float? Vienas baitas sveikoji dalis, kita - trupmenine. T.y. jei temperatura 11.22°C, tai pirmas baitas 11, antras 22. Paskui tik sudursi... |
galiu ir taip, bet kad neisrado nieko i eeprom nei int nei char |
Bet ar kintamieji pradzioj sustatyti teisingai pries irasant? Praeik su debuggeriu step-by-step issivesdamas kintamuju reiksmes ir matysi pazingsniui kas ten kada isiraso. |
|
|
|
|
 |
 |
eeprom 24c32 |
Parašytas: 2019 01 04, 18:18 |
|
|
|
Socrates rašo: |
dmb-220 rašo: |
Socrates rašo: |
Ne paprasciau irasineti du uint tipo kintamuosius vietoj float? Vienas baitas sveikoji dalis, kita - trupmenine. T.y. jei temperatura 11.22°C, tai pirmas baitas 11, antras 22. Paskui tik sudursi... |
galiu ir taip, bet kad neisrado nieko i eeprom nei int nei char |
Bet ar kintamieji pradzioj sustatyti teisingai pries irasant? Praeik su debuggeriu step-by-step issivesdamas kintamuju reiksmes ir matysi pazingsniui kas ten kada isiraso. |
kad as mokeciau tuo debug naudotis. bandziau ant System Workbench for STM32 OpenOCD pasileisti. bet ERROR pabiro ir viskas, <terminated, exit value: 1>openocd
<terminated, exit value: 0>gdb
Error: Target not halted
Error: failed erasing sectors 0 to 33
Error: flash_erase returned -304 |
|
_________________ Skype: dmb-220 |
|
|
|
 |
 |
eeprom 24c32 |
Parašytas: 2019 01 04, 18:37 |
|
|
|
Vadinasi adresai ir reiksmes perduodamos tvarkingai.
Tikrink ar tikrai veikia I2C ?
Pradzioje sekmingai irasyk/nuskaityk kazka tokio su Arduino, paskui bent nuskaityk su STM32
Beje, jei maitini EEPROM'a nuo 3v3, tai nustatyk 100kHz komunikacijos dazni.
Dar ten yra toks dalykas kaip ADRESACIJA
Dauguma Arduino biblioteku reikia nurodyti 0xAx, kai STM32 biblioteka gali noreti 0x5x arba irgi 0xAx
Pastebejau, kad nurodai 0x66 adresa!!!! |
|
|
|
|
 |
 |
eeprom 24c32 |
Parašytas: 2019 01 04, 19:10 |
|
|
|
AlgisL rašo: |
Vadinasi adresai ir reiksmes perduodamos tvarkingai.
Tikrink ar tikrai veikia I2C ?
Pradzioje sekmingai irasyk/nuskaityk kazka tokio su Arduino, paskui bent nuskaityk su STM32
Beje, jei maitini EEPROM'a nuo 3v3, tai nustatyk 100kHz komunikacijos dazni.
Dar ten yra toks dalykas kaip ADRESACIJA
Dauguma Arduino biblioteku reikia nurodyti 0xAx, kai STM32 biblioteka gali noreti 0x5x arba irgi 0xAx
Pastebejau, kad nurodai 0x66 adresa!!!! |
I2C veikia, nes nuskaitau RTC ds3231, temperaturos davikli sht31. Su arduino irasau ir nuskaitau be problemu. Su stm32 nuskaitau puikiai irasytas reiksmes.
Eeprom adresa nuskaiciau su arduino i2c scaner, parode kad 0x56. Jei adresas butu negeras blogas, nepavyktu nuskaityti |
|
_________________ Skype: dmb-220 |
|
|
|
 |
 |
eeprom 24c32 |
Parašytas: 2019 01 04, 19:20 |
|
|
|
Del 0x66 - atsiprasau, cia as pats esu zlibas.
0x56 kaip ir tinkamas butu adresas, nors A0 A1 A2 pasitikrink, jei netingi.
Butu gerai, kad pasitikrintum tose pat maitinimo salygose (jei STM32 atveju maitini is 3V3, tai ir Arduino atveju ta pati organizuok).
Nors minejai, kad teisingai nusiskaito, bet kazkur kabliuku ieskoti tai reikia... |
|
|
|
|
 |
 |
eeprom 24c32 |
Parašytas: 2019 01 04, 19:43 |
|
|
|
Del 0x66 - atsiprasau, cia as pats esu zlibas.
0x56 kaip ir tinkamas butu adresas, nors A0 A1 A2 pasitikrink, jei netingi.
Butu gerai, kad pasitikrintum tose pat maitinimo salygose (jei STM32 atveju maitini is 3V3, tai ir Arduino atveju ta pati organizuok).
Nors minejai, kad teisingai nusiskaito, bet kazkur kabliuku ieskoti tai reikia...
pagaliau gali isvis bukai daryti:
Kodas: |
void eeprom_write_ex( uint8_t address, uint16_t reg,
uint8_t *data, size_t length ) {
while( length-- ) {
writeCommand( address, reg++ );
i2c_start();
i2c_address_direction( address << 1, I2C_Direction_Transmitter );
i2c_transmit( *data++ );
i2c_stop();
delay( 10 ); // milliseconds
}
}
|
O kur tu toki pavyzdi atkasei?
ar ne geriau bus is karto Gintaras_bar varianta pasitiuninguoti pagal save?
man kazkaip kyla klausimas ar writeCommand( ) teisingai perduoda reg
t.y. 24c32 reiktu perduoti 12 bitu (is tikro 16), o ten gal tik 8 bitus perduoda???
Dar idomu, kad i2c_start(); eina jau po writeCommand()....
Cia tokia "draiverio" ypatybe ar tavo klaida?
24C32 datacheete aiskiai parasyta:
i2c_start()
device_address,r/w - pirmas baitas
hi(sddress) - antras baitas
lo(address) - trecias baitas
data..... - n baitu (bet reikia sekti puslapio ribas)
i2c_stop();
jei irasymas, tai palaukti 10..20ms
komanda ir adresas perduodami su ACK
duomenys (jei daugiau nei 1 baitas ) su ACK
duomenu paskutinis baitas noACK |
|
|
|
|
 |
 |
eeprom 24c32 |
Parašytas: 2019 01 04, 20:11 |
|
|
|
AlgisL rašo: |
Del 0x66 - atsiprasau, cia as pats esu zlibas.
0x56 kaip ir tinkamas butu adresas, nors A0 A1 A2 pasitikrink, jei netingi.
Butu gerai, kad pasitikrintum tose pat maitinimo salygose (jei STM32 atveju maitini is 3V3, tai ir Arduino atveju ta pati organizuok).
Nors minejai, kad teisingai nusiskaito, bet kazkur kabliuku ieskoti tai reikia...
pagaliau gali isvis bukai daryti:
Kodas: |
void eeprom_write_ex( uint8_t address, uint16_t reg,
uint8_t *data, size_t length ) {
while( length-- ) {
writeCommand( address, reg++ );
i2c_start();
i2c_address_direction( address << 1, I2C_Direction_Transmitter );
i2c_transmit( *data++ );
i2c_stop();
delay( 10 ); // milliseconds
}
}
|
O kur tu toki pavyzdi atkasei?
ar ne geriau bus is karto Gintaras_bar varianta pasitiuninguoti pagal save?
man kazkaip kyla klausimas ar writeCommand( ) teisingai perduoda reg
t.y. 24c32 reiktu perduoti 12 bitu (is tikro 16), o ten gal tik 8 bitus perduoda???
Dar idomu, kad i2c_start(); eina jau po writeCommand()....
Cia tokia "draiverio" ypatybe ar tavo klaida?
24C32 datacheete aiskiai parasyta:
i2c_start()
device_address,r/w - pirmas baitas
hi(sddress) - antras baitas
lo(address) - trecias baitas
data..... - n baitu (bet reikia sekti puslapio ribas)
i2c_stop();
jei irasymas, tai palaukti 10..20ms
komanda ir adresas perduodami su ACK
duomenys (jei daugiau nei 1 baitas ) su ACK
duomenu paskutinis baitas noACK |
Girtaras bar pvz butu tinkamas jei dirbciau su HAL library. as darau su Standard Peripheral Library.
pvz radau google kai reikejo laikrodi RTC nuskaityti. tai ta I2c library panaudojau ir sht31 nuskaitymui. galvojau pavyks ir eeprom panaudoti.
https://github.com/yohanes-erwin/stm32f103-keil/tree/master/ds1307
gal netinka nes cia KEIL rasytas, nors veikia ir ant System Workbench for STM32 IDE kodas. tik eeprom nedraugauja.
Kodas: |
//Nusiusti 16 bitu adresa
void writeCommand(uint8_t address, uint16_t cmd) {
i2c_start();
i2c_address_direction(address << 1, I2C_Direction_Transmitter);
i2c_transmit(cmd >> 8);
i2c_transmit(cmd & 0xFF);
i2c_stop();
} |
gal blogai kazka su i2c valdymui ir darau, nes bandziau nuo arduino pvz persirasyt ant stm32.
bandysiu su situo pasileisti pvz
http://we.easyelectronics.ru/STM32/stm32-i2c-eeprom-24sxx.html |
|
_________________ Skype: dmb-220 |
|
|
|
 |
 |
eeprom 24c32 |
Parašytas: 2019 01 04, 21:28 |
|
|
|
Va dabar ir aisku patapo ka cia priburei ))))))))
Kodas: |
void eeprom_write_ex( uint8_t address, uint16_t reg, uint8_t *data, size_t length ) {
i2c_start();
i2c_address_direction( address << 1, I2C_Direction_Transmitter );
i2c_transmit( reg >> 8 );
i2c_transmit( reg & 0xFF );
while( length-- ) {
i2c_transmit( *data++ );
if ( !((++reg) & 31 ) ) // perkopei 32 bytes puslapi
delay_ms( 10 ); // milliseconds
}
i2c_stop();
}
|
tau beliks 10ms delay pasigaminti arba neperkopineti per puslapi.
Beje, sitas kodas pageidauja 0x5x formato adresu.
Dar zek ir i2c_transmit() pas tave bus su "navarotais", nes paskutini baita reikia be ACK... |
|
|
|
|
 |
eeprom 24c32 |
Parašytas: 2019 01 04, 22:24 |
|
|
|
Dirbti be debuggerio... Nelabai isivaizduojamas reikalas siai dienai  |
|
|
|
|
 |
eeprom 24c32 |
Parašytas: 2019 01 04, 22:33 |
|
|
|
dmb-220 rašo: |
Girtaras bar pvz butu tinkamas jei dirbciau su HAL library. as darau su Standard Peripheral Library
|
Už lango jau dvidešimtieji XXI amžiaus metai eina, o tu vis dar su SPL dirbi... Negi turi polinkį į mazochizmą?
CubeMX sugeneruoja kuo puikiausią kodą ir su HAL, ir su LL (kur reikia). Ir viskas System Workbench kuo puikiausiai debugin'asi. Taigi mesk tas prieštvanines bibliotekas į šoną ir pradėk šiuolaikinėmis technologijomis naudotis. Išloši ir laiko, ir nervų, ir dar be jokio vargo galėsi "šokinėti" per skirtingus mikrovaldiklius, nė neužmesdamas akies į jų Data Sheet'us. |
|
|
|
|
|
 |
Google paieška forume |
|
 |
Naujos temos forume |
|
 |
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 |
 |
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 |
 |
FS25 Mods
Farming Simulator 25 Mods,
FS25 Maps |
 |
ATS Trailers
American Truck Simulator Mods,
ATS Trucks,
ATS Maps |
|

|
 |