Zrobilem cos podobnego, tyle ze zapis na karcie SD. Generalnie problem jest dosc prosty, tylko musisz zrobic bufor (np cykliczny) do odbioru znakow z uarta, bo bedziesz gubic dane. Mozesz zrobic tak, ze odbierasz np 30 znakow i dopiero cala paczke zapisujesz w eepromie, w tym czasie inne znaki sa zapisywane w buforze. Dlugosc bufora musisz tak dobrac...
A może skorzystasz z biblioteki eeprom.h? Jest tam procedura eeprom_write_byte (uint8_t *addr, uint8_t val); - do zapisu [nie rozumiem tylko dlaczego adres jest 8-bitowy - przecież np. ATmega8 ma 512 bajtów EEPROMU...] oraz uint8_t eeprom_read_byte (const uint8_t *addr); - do odczytu bajtu. (Jest też fajna procedurka eeprom_read_word(..) / eeprom_write_word(..)...
No to jeszcze raz tylko już całość i przetestowana na sprzęcie #include <delay.h> // Alphanumeric LCD Module functions #asm .equ __lcd_port=0x1B ;PORTA #endasm #include <lcd.h> eeprom char string[12]="Hello"; flash char stringf[12]="test eeprom"; void lcd_puts_ee(char eeprom *str) { char k;...
Witam. Nie bardzo rozumiem o co ci chodzi. To jest mikrokontroler 8 bitowy i pamiec jest zorganizowana w komorki 8 bitwe. Wiec jesli chcesz zapisac np zmienna typu int robisz to tak: zapis gornych 8 bitow -> zwiekszasz adres -> zapis dolnych 8 bitow/mozesz i odwrotnie ,zalezy to od twojego zapisu notacji/ i analogicznie robisz odczyt. Ponizej...
Lepiej wykorzystaj do tego celu pamiec programu , ewentualnie eeprom. Sposob deklaracji tablic dla winavr : dla eeprom : #include <avr/eeprom.h> #define EEPROM __attribute__ ((section (".eeprom"))) unsigned char temp [20] EEPROM ={1,2,3,4,}; dla pamieci programu : #include <avr/pgmspace.h> static unsigned char temp_1 [2] PROGMEM = {1,2,3,4};
...Zauwałzyłem, że po zadeklarowaniu w ten sposób liczba komórek RAM zmniejsza się:... Pamięci programu również :( Zajrzyj do pliku pgmspace.h , no i oczywiście do dokumentacji , a w lot zrozumiesz ;) #define EEPROM __attribute__ ((section (".eeprom"))) #define FLASH __attribute__ ((section (".progmem.gcc"))&...
Aby uzyskać dostęp do odczytu eeprom, trzeba ustawić bit EEMEN w rejestrze WMCON. Wtedy eeprom widziany jest jako pamięć xdata (adresy 0x0000-0x07ff), i odczyt odbywa się tak, jak zmiennych z przestrzeni xdata, np: xdata char eep_var; data char x; (...) WMCON |= 0x08;//wybor pamieci EEPROM jako XDATA x = eep_var; Dodatkowo aby móc zapisać EEPROM,...
Bardziej chodziło mi o wstawienie nop'a tak: unsigned char EEPROM_read(unsigned char Address) { //while(EECR & (1<<EEWE)); EEAR = Address; EECR |= (1<<EERE); asm volatile("nop"::... return EEDR; } Jeśli teraz działa, ale nie wiadomo co było nie tak, to nie można tego...
[syntax=c]char k[2]; k[0]=EEPROM.read(84);[/syntax]
Witam, bez wzgledu na platforme EEPROM jak kazda inna pamiec "przyjmuje" wartosci Byte, jezeli kompilator automatycznie nie zmienia char na byte to zorb to recznie a przy odczycie odtworz char. Pozdrawiam
poprawiłem i kropek nie ma ale za to zniknął pierwszy z zapisanych łańcuchów void SaveString(char offset, unsigned char * tekst) { char i=0; for( i=0; i<=strlen(tekst); i++) EEPROM_write(offset+i, tekst[i]); EEPROM_write(i, 0); } Działa przez wywołanie: K(OpenString(30,temp,12)); nie działa...
Piszesz: [syntax=c]struct struktura{ ... char *cText; }; char text[] EEMEM="Tekst w EEPROM"; struct struktura str={.cText=text};[/syntax] Coś w ten deseń. Niestety nie da się zrobić tak, aby część struktury była w SRAM, a część w EPROM.
Niepotrzebnie tyle razy rzutujesz, możesz od razu char *cptrEEPROM=(char*)&DefaultWorg.... zarówno dla FLASH jak i EEPROM. Swoją drogą to nie widzę powodu dla którego dane powyższy kod miałby źle ustawiać cptrEEPROM.
Ogólnie to miałem na początku zrobione wszystko w metodach, wystarczyło podać adres i długość a dostawało się char*. Jednak ogólnie ESP pod Arduino ma spore problemy z ogarnięciem takich rzeczy. Po dłuższym szukaniu w sieci znalazłem podobny projekt. Zauważyłem że podczas wczytywania znaków z EEPROM osoba ta użyła: [syntax=c] String zmienna zmienna...
Najlepiej używaj jednego albo drugiego (string lub C string - czyli tablice znaków) wyłacznie bo to straszne mącenie. 1. Jak już używasz tablice znaków to pamiętaj aby na końcu dać '\0' Nie musisz czyścić [syntax=c] char char_relay1name[32]; relay1name.toCharArray(char_relay1name, 32); //int a = 0; for (int i = 0; i < relay1name.length(); ++i) {...
Piszę program który w założeniu ma posiadać pamięć ustawień. Dokładniej jest w nim 11 zmiennych oraz 128 możliwości ich ustawień (128 banków pamięci dla tych 11 zmiennych). Każda zmienna jest 8bitowa. No i dostaje od kompilatora (WinAVR ) dziwne komunikaty: warning: pointer targets in passing argument 1 of 'eeprom_read_byte' differ in signedness W kodzie...
W zasadzie skopiowałem przykładowy kod z noty, nie działa mi zapis do wewnętrznego EEPROM'a, odczytuje ciągle 0xFF. Piszę w C, AVRStudio4, procek kręci się na 12MHz, nie mam włączonej żadnej optymalizacji (-00), nie wykorzystuje bibliotek, programuje mkAVRcalculator. Fuse bit's: LOW = 0xFF, HIGH = 0xD9, Extended = 0xFF, lock byte = 0x3F. [syntax=c]...
Prawie dobrze, poza tym, że nie czytasz co tu ludzie piszą i psujesz kod coraz bardziej, teraz dodałeś zapis EEPROM w przerwanie zliczające impulsy, operacje na EEPROM są jeszcze wolniejsze niż liczenie na floatach, na koniec używaj do pokazywania kodu c/c++ Syntax, opcja w edytorze postu po lewej na górze: [syntax=c]Cytat: #include <Wire.h> #include...
Też miałem o tym napisać ale dałem sobie spokój bo to nie na temat. U mnie często wychodzi około 1M cykli zapisu. Dodano po 1 Możesz zapisywać dane w kodzie Gray'a. Często kilkakrotnie zwiększa to maksymalną ilość zapisów bo każdy bit w bajcie jest zmieniany mniej więcej tak samo często. Ale oczywiście zależy to też jeszcze od charakteru zmian zapisywanych...
Bynajmniej nie chciałem urazić w poprzednich postach, jednak, moim zdaniem, dopiero przedostatni post autora tematu konkretnie wskazał problem. Nie znam za bardzo arduino, ale bazując na [url=http://codebender.cc/]kompilatorze online, obsługa eeprom w arduino jest identyczna jak w c. Przykład: [syntax=c]#include <avr/eeprom.h> typedef struct {...
Sprytne ;) Działa, ale proszę o rzucenie okiem czy nie ma tam rażących błędów [syntax=c] T_EEPROM_Data Struktura_odczytana; //Pusta struktura memset(&Struktura_odczytana, 0, sizeof(Struktura_odczytana)); char *bytebybyte = (char*)&EEPROM_Data; char bajt; int size = sizeof(EEPROM_Data); Erase_EEPROM(); Unlock_EEPROM(); for(i = 0; i < size;...
a jeszcze moge dodac jak to zapisac np do komórki pamieci nr100 w eepromie a potem to odczytac z tejze komórki czyli w skrócie adresowanie ? z góry wielkie dzieki No co Ty , żartujesz :?: eeprom int *eeptr; void main(void) { char a; a=0x11; eeptr=100; *eeptr=0x33; a=*eeptr; for(;;); } Piotrek
Witam mam następujący kawałek kodu: int main() { eeprom_write_byte ((char*)0x0001,'a'); eeprom_write_byte ((char*)0x0002,'b'); eeprom_write_byte ((char*)0x0003,'c'); eeprom_write_byte ((char*)0x0003,'d'); eeprom_write_byte ((char*)0x0005,'e'); eeprom_write_byte...
char jeden EEMEM; char numer=0; char wybrany[6]; int main(void) { LCD_Initalize(); //poczatek losowania numer, odczyt, zapis numer=eeprom_read_byte(&jeden); LCD_GoTo(5,0); itoa(numer,wybrany,10); LCD_WriteText(wybrany); if (numer>41) {numer=1;} else {numer++;}...
może ja czegoś nie rozumiem ale pomysła z przerwaniem jest dla mnie bez sensu. Jeśli pin nie jest podłączony do niczego to teoretycznie przerwanie nie powinno się wywoływać wcale. Ale są różne zakłócenia i może Ci się ono w takim przypadku wywoływać w różnych momentach, z kąd wiesz kiedy się ono wywoła? ten fragment uruchomienia przerwania i obsługi...
Należy zapamiętać w pamięci nieulotnej (EEPROM) informację o tym, że alarm został wyzwolony. Najprostszy kod na arduino (bez problemu do przerobienia na "goły" WinAVR). [syntax=c]#include <avr/io.h> #include <avr/eeprom.h> unsigned char EEPROM_read(unsigned char ucAddress) { while(EECR & (1<<EEPE)); EEAR = ucAddress; EECR |= (1<<EERE);...
witam, dobry przykład obsługi eepromu zamieszczony jest w dokumentacji od atmegi i wygląda to tak : void EEPROM_write(unsigned int uiAddress, unsigned char ucData) { while(EECR & (1<<EEWE)); EEAR = uiAddress; EEDR = ucData; EECR |= (1<<EEMWE); EECR |= (1<<EEWE); } unsigned char...
Zastanawiam się czemu co jakiś czas zaskakują mnie dziwne wartości. Procedury wyglądają tak: [syntax=c]//============================... void SAVE_RAM(void) { char adr=0, suma=0; EEPROM_write(adr++, sun_lvl), suma=sun_lvl; EEPROM_write(adr++, pmp_min), suma=+ pmp_min; EEPROM_write(adr++,...
A ja napisałem takie, może się przydadzą. Co prawda są na ATmegę8, ale 16 chyba się nie różni. void EEPROM_write(unsigned int address, unsigned char data) { EEDR = data; EEARH = (unsigned char) (address >> 8); EEARL = (unsigned char) address; if ( SREG & 0x80) { cli(); EECR |= (1...
Okej, z tego co zrozumiałem skoro mam podpięte do GND adres to normalnie 0xA0, no to wyskrobałem ile wlezie tego kodu ale dalej nie rozumiem o co chodzi z tym potwierdzeniem (ACK), mógłby ktoś wyjaśnić? Tutaj to co do tej pory napisałem (nie działa jeszcze): [syntax=cpp]#define F_CPU 1000000L #include <avr/io.h> #include <util/delay.h> #define...
xdata char eep_var_Delta; //zmienna eeprom data char del; //zmienna w programie char EEPROM_zajety_z () //wskaznik EEPROM gotowy/zajety { if (EECON & 0x02) return 0; else return 1; } // ZAPIS // void EEPROM_zapis_Delta() //zapis Delty { EA = 0;//wylaczenie przerwan EECON |= 0x04; //wybor pamieci EECON |= 0x08; //aktywacja EECON |= 0x10; //zapis...
to wiem, lecz ciąg mam otrzymywać z formularza i będzie lądował w tablicy (np. char[10].) do eeprom zapisuje zmienne uint_8, a ciąg otrzymuję jako char ?
witam uzywam sobie funkcji: void WRword(unsigned char Ind) { //extern void eeprom_wb(unsigned int addr, unsigned char val); eeprom_write_byte( Ind, Dato); eeprom_write_byte( Ind+1, (Dato>>8)); } i wyskakuje mi komunikat.... mem.c:13: warning: passing arg 1 of `eeprom_write_byte' makes pointer from integer without a cast deklaracje mam takie: unsigned...
Na 100% działają na mojej ATmega169p, optymalizacja -Os void eeprom_write(unsigned int uiAddress, unsigned char ucData) { /* Wait for completion of previous write */ while(EECR & (1<<EEWE)); /* Set up address and Data Registers */ EEAR = uiAddress; EEDR = ucData; /* Write logical one to EEMWE */ EECR |= (1<<EEMWE);...
zapis do eeproma w atmedze16 void EEPROM_write(unsigned int uiAddress, unsigned char ucData) { while(EECR & (1<<EEWE)); EEAR = uiAddress; EEDR = ucData; EECR |= (1<<EEMWE); EECR |= (1<<EEWE); } unsigned char EEPROM_read(unsigned int uiAddress) { while(EECR &...
Wracam do tematu ponieważ dalej mam problem. Moje funkcje zapisu i odczytu zawierają zmienną adres typu unsigned char co daje mi możliwość zapisu 255 komórek adresu. Również jest błąd ponieważ nadpisuję dwa razu część młodszą i starszą. Chcę zapisać wyświetlacz LCD z pamięci EEPROM. Wyświetlacz posiada 1024 komórek (jedna komórka 8 bitów). Zapis i odczyt...
Modyfikator eeprom pewnie coś psuje. Nie znam tego kompilatora, ale spróbuj coś takiego: void strcpye(eeprom char* dptr, const char* sptr) { while((*dptr++ = *sptr++) != 0) ; }
jeśli a zadeklarowane jest jako tablica: char a[128]; to adresem danych w tej tablicy jest: - a - &a[0] &a to ... w sumie nie wiadomo co [; 4\/3!!
re. Odczyt pojedynczego bajtu dałem jak z noty katalogowej i co ciekawe - ruszyło - co prawda póki co sprawdziłem tylko w symulatorze, ale z rana sprawdzę jak uP to potraktuje. Mam jednakże pytanko. Przeglądając forum natknąłem się na informację, że można by stworzyć tablicę w EEPROM i komunikować się jak do zwykłej tablicy. Kod jest taki na to: #define...
Witam, mam problem z długim czasem odczytu z wewnętrznego EEPROMu w ATmega 32. EEPROM trzyma obrazek, który wyświetlany jest na graficznym LCD i wyraźnie widać jak grafika pojawia się stopniowo w ciągu ok. sekundy. Sprawa wydaje się dosyć dziwna, bo w AT89S8252, który teoretycznie powinien być daleko w tyle za ATmeg'ą, wszystko trwało ulamek sekundy...
Jak w C wpisać coś do pamięci EEPROM AT89S8252 i odczytać? Teoretycznie , ... #include <at89s8252.h> unsigned char read_eep(unsigned char xdata *index) { unsigned char eepd; //EA=0; //jeśli korzystamy z przerwań WMCON|=WMCON_EEMEN; eepd = *index; WMCON &=~WMCON_EEMEN; //EA=1; return eepd; } void write_eep(unsigned char...
ja bym proponował spróbować tak: for(zp1=1;zp1<20;zp1++) { cli(); eeprom_busy_wait(); eeprom_write_byte ((unsigned char *)zp1, dane[zp1]); eeprom_busy_wait(); sei(); }
Poniżej przesyłam błędy kompilacji spowodowane dodaniem EEPROM.h [syntax=c] libraries\EtherCard-master\EEPROM.cpp.o: In function `EEPROMClass::EEPROMClass(unsigned int)': C:\Users\Admin\Documents\Arduino\librari... multiple definition of `EEPROMClass::EEPROMClass(unsigned int)' libraries\EEPROM\EEPROM.cpp.o:C:\Users\A...
Witam, staram się zaprogramować pamięć SPI z seri 25LCXXX, jednak mam pewne kłopoty, to co udało mi się zrobić korzystając z ds wygląda tak: [syntax=c]#define SPI_SS PB4 #define SPI_MOSI PB5 #define SPI_MISO PB6 #define SPI_SCK PB7 #define INSTR_READ 0b00000011 #define INSTR_WRITE 0b00000010 #define INSTR_WREN 0b00000110 unsigned char spi_data; unsigned...
Wykorzystałem do sprawdzenia kod: #include <avr/eeprom.h> int main() { unsigned char x = eeprom_read_byte((unsigned char*)10); if(x <= 0xFA) // jeżeli osiągnie FA to znaczy, że się restuje { while(1); // wystarczy już zapisów ;-) } eeprom_write_byte((unsigned char*)10, x-1);...
Witam Chciałem poszerzyć pole swojego działania w ATMEGA8 o zapis i odczyt danych z pamięci wewnętrznej uC EEPROM. Otóż znalazłem na 20 i 21 str. manuala ATMEGA8 funkcje w C zapisu i odczytu danych z EEPROM uC. Oto one: Zapis do EEPROM: void EEPROM_write(unsigned int uiAddress, unsigned char ucData) { /* Wait for completion of previous...
Z floatem jest troche więcej zabawy Owszem , ale jeśli to dotyczy kompilatora innego niż AVR-GCC.Po zmiennej typu bit poznaję , że przytoczona przez Ciebie funkcja dotyczy bardziej MCS-51 , a nie AVR , choć tych drugich oczywiście nie wyklucza. Wracając do meritum , czyli zamiany nieszczęsnego float na string , to gdyby tylko zajrzeć do pliku nagłówkowego...
Witam STM32l151CC dysponuje 8Kb EEPROMu.. Próbuję zadeklarowac zmienne w pamieci eeprom, zrobilem cos takiego: [syntax=c] const char EEPROM_moj[] __attribute__ ((section(".eeprom"))) ={10,20,30,40}; w pliku linkiera MEMORY { rom (rx): org = 0x08000000, len = 256k ram (rwx): org = 0x20000000, len = 32k eep (rw) : org = 0x08080000, len = 1k } SECTIONS...
Siemano. Jeżeli chcesz umieścić np. tablicę jednowymiarową w sekcji EEPROM to możesz wykonać to w taki sposób const unsigned char Tablica[] EEMEM = { 0x3e,0x51,0x49,0x45,0x3e, 0x00,0x42,0x7f,0x40,0x00, 0x42,0x61,0x51,0x49,0x46, 0x21,0x41,0x45,0x4b,0x31 }; Niestety przy takiej deklaracji pierwszy element tablicy nie będzie znajdować...
Witam serdecznie, Czy używanie składni: [syntax=c]for(i=(unsigned char*)2; i<(unsigned char*)20; i++) eeprom_write_byte(i,0);[/syntax] wiąże się z koniecznością eeprom_busy_wait() po każdym użyciu eeprom_write_byte()?
chara const chara chara const chara konwersja chara flash
regulator awaria załączania instrukcja elmak audio telewizor xiaomi
odkurzacz dreame rozebrać odkurzacz
Przycisk z kluczykiem w Smart Fortwo - funkcje i zastosowanie Schemat połączenia wiązki drzwi Nissan Patrol GU4