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) {...
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...
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...
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...
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++,...
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);...
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(); }
Witam, dzisiaj miałem czas na zgranie kodu i wyrzucenie z niego tego co nie dotyczy tematu: Dodano po 7 Przepraszam za dziwne znaki w komentarzach ale przerzucałem z Windowsa na Linuxa i nie konwertowałem kodowania. Będę wdzięczny za pomoc. Sławek
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ć...
chara const chara chara const chara konwersja chara flash
dodge światła naklejki telefon skuter odpaleniem
podlaczenie czujki kompresor lodówkowy
Jak odzyskać hasło do poczty WP? Chrysler Voyager 2.8 CRD – wentylator chłodnicy klimatyzacji nie uruchamia się