1. Włącz BOD'a w fusebit'ach 2. Dla pewności omiń np 8 pierwszych komórek EEPROM'u i nic do nich nie zapisuj.
A jak jest zadeklarowana zmienna? Jako uint16_t?
Witam, ilość odczytów nie ma znaczenia, mam układ gdzie 8 komórek 24C02 jest odczytywane cyklicznie co kilka milisekund w termometrze od ponad 7 lat i jeszcze nic się nie zmieniło. Nigdy nie spotkałem się z informacją o ilości cykli odczytu a jedynie zapisu do EEprom.
W rejestrze 0x00 jest bit CH - Clock Halt który trzeba wyzerować aby uruchomić zegar.
Jak wygląda jej deklaracja i odczyt?
I co Dawid udało się coś odczytać z eepromu, bo ja próbuję identycznym sposobem i zapisać się da, ale odczyt to bzdury. I nie jest ważne, czy zmienna "temp_dol_k1" jest jako zwykła, czy EEMEM. Coś jest źle. Próbowałem, też wg. kodu z datasheeta i też nic. Pozdrawiam.
Odnoszę wrażenie, że cały problem polega na tym, że widzisz wartość binarną ADC jako tekst. Na przykład liczba 455 traktujesz jako 3 znaki: '4', '5' i '5'. Potraktuj liczbę 455 jako liczbę 2 bajtową bez znaku, czyli uint16_t, czy unsigned int (zależnie od notacji). Oto przykładowy kod: [syntax=c]uint16_t adc_pos; //zapis do eeprom-u zmiennej adc_pos...
Nie da się zaadresować jednego bitu. Adresuje się po 8 bitów, więc jak czytasz całość, bascom spod konkretnego adresu pobiera bajt w miejscu. Najpewniej bascom nie obsługuje wyłuskiwania pojedynczych bitów z zmiennej będącej w eepromie. Odczytaj cały bajt do zmiennej w ramie, a dopiero wtedy dziel go na bity - metoda fool-proof.
Spróbuj z Instrukcją CONFIG I2CDELAY
to może zainteresuj się jakimś uC z wbudowanym eepromem? np. atmega +fusbity blokujące odczyt eepromu przez programator
Witam. Atmega może padać , to jest możliwe szczególnie EEprom , duża ilość zapisów do w/w. Czy da się sklonować istniejącą , wszystko zależy od LockBitów ustawionych w Atmega. Jeżeli została zabezpieczona lockBit to odczyt się nie uda, dostaniemy losowe wartości , zupełnie bezużyteczne. Pozdrawiam.
Masz przecież źródła tych funkcji w pliku eeprom.h.
Ten fragment ma właśnie to robić:) Tzn do tablicy tab wprowadzane są znaki które użytkownik wprowadził na klawiaturze. Może problem jest właśnie w wprowadzaniu tych znaków? [syntax=c] if(flaga250ms == 1) { klaw = KLAW_Skan(); flaga250ms = 0; if(klaw != 0) { tab[i] = klaw; if(klaw>0 && klaw<11) { i++; } if(i==2 && klaw == 11) {...
Masz podawane złe długości pól. Skoro odwołujesz się np. do pola okrążenia typu DANE_ZAWODNIKA to nie możesz robić sizeof(DANE_ZAWODNIKA) bo to nadpisze ci kolejne pola, powinno być sizeof ale pola okrążenia. Takich błędów masz więcej. Definicja: DANE_ZAWODNIKA numer_zawodnika_tab[sizeof(DANE_ZAWODNIK... też na oko jest bez sensu. Bo robisz tablicę...
Właśnie zapisuje do pamięci poprzez eeprom_write_byte(&pamt1,t1) a odczytuje poprzez eeprom_read_byte(&pamt1). Dodałem sobie opóźnienie z timera, aby po 2 s od włączenia zasilania odczytywał wartości z pamięci, na wszelki wypadek gdyby było coś z zasilaniem, ale niczego to nie zmienia.
[syntax=c] (...) static EEMEM uint8_t histereza = 3; //zmienna do pamieci EEPROM int main(void) { (...) uint8_t histereza = eeprom_read_byte(&histereza); (...) [/syntax] Zgadnij dlaczego nie działa ? Podpowiedź - nazwy.
Dalej nic!!! Co do konfliktu adresow: 1010001 to adres PCF'a A0=1 1010000 a to EEPROM'u A0=0 i P0=0 Wiec wedlug mnie poki co konfliktu nie ma. Chociaz lepiej bedzie jesli zmienie adresy na: 1010000 PCF z A0=0 1010010 EEPROM z A0=1 i P0=0 1010011 EEPROM z A0=1 i P0=1 Dziwna sprawa... poza tym nawet jak wyciagne PCF'a to i tak EEPROM nie dziala. WP w...
No oczywiscie. A możesz mi podpowiedzieć w jaki sposób ?
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++;}...
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...
Witam, potrzebuję co minutę zapisywać zmienną w pamięci EEPROM. Ile czasu "teoretycznie" pamięć będzie można użytkować? Czy ilość cykli zapisu jest taka sama do odczytu? Czy jeżeli wykonuję tylko zapis co minutę od ilość cykli odczytu również ulega zmniejszeniu ?
Ściągnij najnowszego bascoma z MSC Electronics bo starsze wersje czasami się dziwnie zachowują. Raz miałem taką w której wydanie polecenia Enable Interrupts generowało błąd :)
Za długie pętle lub za krótkie tablice zmiennych.
Witam, zakładam że rzeczywiście zapisujesz coś do EEPROMa. Temat był już poruszany, ponieważ ATmega przy wyłączaniu/załączaniu zasilania ( w szczególności jeśli napięcie wolno narasta/opada - wolno dla kontrolera!! oczywiście ) jesli nie są spełnione określone warunki potrafi ( i robi to często) zapisywać przypadkowe dane do pamięci EEPROM. Poświęcony...
wlacz datasheeta i poszukaj w nim slowka EESAVE 4\/3!!
Nie, odczyt zabezpieczonego procka zwraca kolejne wartości od 0 do 255 i tak w kóło. Nie wiem po co ci różne nakładki - avrdude najlepiej się obsługuje z linii poleceń, przynajmniej wiadomo o co chodzi, w dodatku można to zintegrować z jakimś sensownym IDE, dzięki czemu nie trzeba rozkodowywać fusebitów. Zobacz: http://mikrokontrolery.blogspot.com/2011...
W eeprom_write_block() masz odwrotną kolejność wskaźników. Najpierw musi być źródło, później cel.
K_o_n_r_a_d, jeżeli masz trochę czasu to przedstaw mi swój sposób zapisu/odczytu danych do/z EEPROM. Z góry dzięki. Ja to robię tak mniej więcej: Dim pomocnicza As single At 700 Dim X As Eram Single At 100 X=pomocnicza 'zapis do eeprom pomocnicza=X 'odczyt z eeprom
Spróbuj tak: odczyt [syntax=c] if(eeprom_is_ready()) { eeprom_read_block(&ustawienia,&ustawieni... } [/syntax] zapis [syntax=c] cli();//Globalna blokada przerwań if(eeprom_is_ready()) { eprom_write_block(&ustawienia,&ustawieni... } sei();//odblokowanie przerwań [/syntax]
W załączniku pliki EEPROM - eprom34.hex - na tym nie działało, pierwszy odczyt z niedziałającego urządzenia. Eprom33.hex to wsad z działającego urządzenia, który po wgraniu razem z FLASH-em ożywił flowmeter. Sam flash nie wystarczył... Więc ??? Rozumiem że do niedziałającego urządzenia najpierw wgrałeś sam FLASH zgrany z dobrego i urządzenie nie zadziałało?...
http://obrazki.elektroda.pl/9824916400_1... Witam, Korzystając z ostatnich wolnych dni przed studiami chciałbym zaprezentować moją ostatnią konstrukcję. Jest to mały przenośny barometr. Konstrukcja powstała na potrzeby osoby wrażliwej na zmiany ciśnienia oraz spełnia jej wymagania tzn. mały rozmiar( 20x40x9mm) oraz co się z tym wiąże...
http://obrazki.elektroda.pl/2762225800_1... Jedyny taki przenośny programator układów AVR. Pomoże wszędzie tam, gdzie trzeba zaktualizować oprogramowanie, a układ docelowy znajduje się w trudno dostępnym miejscu i nie mamy możliwości (lub chęci) ciągać ze sobą laptopa i mnóstwa przewodów. Banalnie łatwa obsługa, niski koszt wykonania, super...
Witam Z listingu wynika, że dane są zapisywane do wewnętrznego eepromu procesora. Jest taka możliwość, tylko trzeba przerobić program. Należy dodać obsługę I2C i przepisać podprogramy do zapisu, odczytu i kasowania pamięci. Pozdrawiam
Zmienna double zajmuje wiecej niz 1 bajt - dokladnie 4, a ty czytasz tylko 1 bajt. Nie ma prawa dzialac. Jak pisze Dr.Vee zainteresuj sie eeprom_read_block i eeprom_write_block, jako dlugosc bloku mozesz wykorzystac sizeof(double), albo sizeof(zmienna).
Witam wszystkich Chcę wysyłać i odczytywać obrazki BGF do/z eepromu. Procesor Atmega 32, eeprom at24c32. Wyświetlacz DMF5005N. T6963C. Ewentualnie skorzystałbym z EEpromu atmegi 644p. Czy posiada ktoś sprawdzoną procedurę zapisu i odczytu grafiki.? Próbowałem na przykładzie gotowca z helpa BASCOMA, ale miałem tylko czarne tło. Pozdrawiam i proszę o...
Widzę, że zapisujesz w koło w jednym miejscu: "eeprom_write_byte(1, humidity+1)". Zwiększ adres po zapisie do eeprom, to będziesz miał więcej danych do analizy. Dodane: (at)gps79, tak, tylko te "print() i println()" mogą autora zmylić. Może "printf("pomiar: %d temperatura: %d wilgotność: %d%%\n", numer, temperature, humidity)"?
sporo z nas zaczynało od tego ;-) poniżej parę moich (mało odkrywczych) rozwiązań: - zegar - temp wewn. zewn i piec (dodatkowe czujniki nic nie kosztują - lub niewiele) - wilgotność - zmiana jasności podświetlenia (w nocy to spora żarówka i nie da się na nią patrzeć po przebudzeniu) - trend temperatury (rośnie/maleje) - oczywiście progi alarmowe na...
Wrzucam działający kod może się komuś przydać bo ja sie oszukałem i o kombinowałem jak głupi, jest dużo przykładów z błędami w necie Deklaracja typedef struct { uint8_t h; uint8_t m; uint8_t s; } czas; czas ee EEMEM; czas ram; zapis eeprom_busy_wait(); eeprom_write_block(&ram, &ee, sizeof(ram)); odczyt eeprom_busy_wait();...
Tu masz program do zapisu i odczytu eeprom w procesorze program do wyświetlania na wyświetlacz napisz sam poszukaj w google te linki powinny ci pomoc http://www.fizyka.umk.pl/~ptarg/labview/... http://www.elportal.pl/pdf/k09/25_10.pdf http://www.elportal.pl/pdf/k09/27_01.pdf void EEPROM_write(unsigned int uiAddress, unsigned char ucData)...
Witam Mam pytanie dlaczego zmienna która inkrementuje się tutaj: [syntax=c] if(klawisz_wcisniety(ZAWODNIK_M)) { lcd_cls(); zawodnik_przejazdy_read(); zawodnik_przejazdy[zawodnik.numer].okraz... = 0; zawodnik_przejazdy_update(); zawodnik.numer++; zawodnik_przejazdy[zawodnik.numer].okraz... zawodnik_przejazdy_update(); } [/syntax] Inkrementuje się...
nie mam włączonej żadnej optymalizacji (-00) REG->EECR |= 1<<EEMWE; REG->EECR |= 1<<EEWE; żeby zapis się wywołal to druga zmiana bitu musi odbyć się w ciągu 4 cykli zegarowych a tymczasem ten kod skompilowany bez optymalizacji daje w gcc coś takiego: [syntax=asm] 162:ac e3 ldir26, 0x3C; 60 164:b0 e0 ldir27, 0x00; 0 166:ec e3 ldir30,...
Zrobić jedną tablicę jednowymiarową i zapisywać kolejno po sobie po 7 tych zmiennych, następnie odczytywać z "offsetem" tablica(x + y*offset) daje to pseudo 2 wymiarową tablicę. tablica(0 + 0*7) = tablica(0) tablica(1 + 0*7) = tablica(1) tablica(2 + 0*7) = tablica(2) .... tablica(0 + 1*7) = tablica(7) tablica(1 + 1*7) = tablica(8) itd....
hmm ,mi wpadł inny pomysł a można by go zrobić na M8 czy M16 ,a mianowicie połączyć 4051 w kaskady dzieki czemu wystarczy kilka pinów uC do tylu czujników ,w tygodniu przetestuje pomysł.... Ps .nic nie stoi na przeszkodzie aby dopisać linie programu (np. jeden pin uC ,sprawdzany przy starcie programu ) która będzie programowała ID czujników i zapisywała...
... dlatego chciałem to zorganizować programowo na kontrolerze, żeby przy pierwszym odpaleniu programu na procesorze do EEPROM-u zapisało domyślne wartości. A później przy kolejnych uruchomieniach procesora nie było już tego zapisu przy uruchomieniu tylko odczyt. Ale coś czuję w kościach, że się tak nie da... Jak to się nie da? .... ależ da się i powiem...
Chciałem takie zdjęcie wysłać do wyświetlacza. Bo tak to trzeba podać adres potem stronę potem kolejny adres potem adres odczytu i dopiero odczytać, i to troch czasu zajmuje.
Witam Sporo jest pytań na temat EEPROMU, ale nie udało mi się znaleźć odpowiedzi, więc przedstawię swój problem. Wykonałem zegar szachowy na ukł. ATmega 8. Wszystko działa poprawnie oprócz zapisu i odczytu pamięci EEPROM. Procedura zapisu nie modyfikuje pamięci, procedura odczytu daje zawsze "0", bez względu na rzeczywistą zawartość. Zapis i odczyt...
To będziesz musiał się trochę napocić. Po pierwsze jak używasz watchdoga w programie, to musisz w jakiś sposób sprawdzić czy reset aby na pewno służył do upgrade'u. Możesz to zrobić np przez zapis do eepromu jakiejś wartości, odczyt i odczyt jej bootloaderze (pamiętaj żeby bootloader ją resetował). Dobry by był też mechanizm który by pozwolił na zrezygnowanie...
Dzięki, testy na Arduino potwierdzają, że funkcja EEPROM.put() faktycznie czeka aż zapis się zakończy i trwa to ~3,35ms na bajt. Pozostając jeszcze w temacie EEPROM-u, jak to jest z tą ilością cykli zapisu do pamięci? Zauważyłem, że większość uC ma tą wytrzymałość deklarowaną na 100k zapisów, niektóre (np. Atmega88) tylko 50k, ale czy ktoś to w ogóle...
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...
warning: passing argument 3 of 'odczyt_stronicowy' from incompatible pointer type dla instrukcji odczyt_stronicowy(0, 6, MAC); Musisz wywołać funkcję w ten sposób: odczyt_stronicowy(0, 6, &(MAC[0])); Jeśli chodzi o : warning: assignment makes pointer from integer without a cast dla linijek odczyt[i]=READ_TWI(1);.....
Druga sprawa. Skoro ma być reset np. BORF: flaga resetu przy obniżonym napięciu sieci, to czy można wcześniej zapisać do EEproma jakieś ważne dane? Zdecydowanie nie należy nic zapisywać do EEPROM przy obniżonym napięciu. Poza tym BOD nie wystawia żadnej flagi przerwania którą mógłbyś wykorzystać. On po prostu resetuje układ o ile jest włączony a następnie...
No tak to właśnie zrobiłem... No chyba nie bardzo :D Przetestuj ten kodzik :D [syntax=vbnet]$regfile = "m32def.dat" $crystal = 16000000 Config Submode = New Config Lcd = 20 * 4 Config Lcdpin = Pin , Db4 = Portb.2 , Db5 = Porta.0 , Db6 = Porta.1 , Db7 = Porta.2 , E = Portb.3 , Rs = Portb.4 Config Pind.2 = Input : Set Portd.2 : Ok Alias Pind.2 Config...
Witam, nie wiem, dlaczego poniższy kod nie działa na procesorze attiny13. Kompiluje się bez błędów w AVR Studio. Jest to część większej aplikacji, która działa poprawnie (dla uproszczenia wyciąłem resztę kodu). Kiedy dodam obsługę EEPROM, aplikacja przestaje działać. Test przeprowadzam następująco: 1. Komentuję blok ODCZYT. 2. Kompilacja kodu (brak...
Tak jak pisałem, po operacjacvh na EEPROM, rejestr adresowy powinien wskazywać na nieużywaną komórkę pamięci. Ty zapisujesz i nadajesz mu 0, czyli wskazuje na komórkę pamięci używaną przez twoją strukturę. W przypadku problemów zawartość tej komórki zostanie uszkodzona. Poza tym dlaczego nie używasz funkcji bibliotecznych dostępu do EEPROM? Masz tam...
Dzięki za szybką odpowiedź. Mam pytanie czy byłaby możliwość pobierania danych z częstotliwością ok. 170kHz (chodzi mi o to ile cykli potrzeba na odczyt) o czy ATmega z kwarcem 16MHz by sobie z tym poradziła?
Po pierwsze: Używasz wewnętrznej pamięci, więc pamiętaj o żywotności cyklów zapisu/odczytu. Jest zalecenie, aby czynności związane z wewnętrzną pamięcią nie wkładać do pętli. Po drugie: Zainteresuj się zewnętrznymi pamięciami na I2C. To są moje wycinki kodu do regulatora PID: To w nagłówku: $eeprom 'Informacja dla procesora o korzystaniu z pamięci EEPROM...
Tutaj masz przyklad w ktorym po kazdorazowym wcisnieciu przycisku zmienna zwieksza sie o 1: Config Pinb.3 = Input S1 Alias Pinb.3 Set Portb.3 If S1 = 0 Then Waitms 25 If S1 = 0 Then 'np. Incr twoja_zmienna End If End If A tutaj wcisniecie przycisku i jego przytrzymanie powoduje zmniejszanie sie zmiennej o 1 co 200 ms: Config Pinb.3 = Input If S1 = 0...
Tak, wszystko się zgadza. Jeśli łączyłbyś potem np. 2 kości to wtedy w jednej dajesz oba piny do masy, a w drugiej jeden do VCC i masz 2 pamięci pod 2 różnymi adresami. Można w ten sposób połączyć do 4 pamięci typu at24c04
Ten program z #5 działa przez swoją głupotę tylko. Na tej samej zasadzie, jeśli Ty zdradzisz mi swój wiek, ja powiem Ci ile masz lat. Magia. Program z #1 w ogóle nie ma sensu. Nie wiem co to jest: eeprom_busy_wait(); i strlen w eeprom_read_block(R_array,0,strlen(W_arr... To akurat jest proste. Dzięki "strlen" odczytujesz z eeprom dane o losowej długości...
[syntax=c] aaa=EEPROM_odczyt(0); itoa(aaa, text, 10); [/syntax] aaa wewnątrz funkcji EEPROM_odczyt(); to nie to samo aaa co w int main(void); - to dwie różne zmienne.
a już żeby zamknąć temat to kod który działa wygląda tak: Ten kod jest błędny i działa tylko przypadkowo. uiAddress używasz niezainicjowany - nie masz żadnych ostrzeżeń kompilatora? Wywal go. Powinno być: [syntax=c] //Deklaracja zmiennych //EEPROM uint16_t kWh_stan EEMEM; uint16_t kWh; ... //Odczyt z EEPROMa i przypisanie do zmiennej kWh = eeprom_read_byte...
W każdym przypadku nie można odczytać sygnatury urządzenia. A cokolwiek da się poprawnie odczytać? Jak zwykle sprawdź połączenia z programatorem - zwykle tu jest jakiś głupi błąd. Druga sprawa to czy na pinach do programowania nie ma jakiś obwodów elektronicznych, które mogą zakłócić pracę programatora? Coś w stylu kondensatora, małego rezystora, LEDa...
Z uwagi na brak zrozumiałej dla mnie odpowiedzi z powyższego tematu - postanowiłem zrobić coś takiego - czyli adaptację sond - programową. Lecz problem pojawia się wówczas kiedy uszkodzi się jeden z czujników - program momentalnie szczytuję adres kolejnego i mam niestety dublet temperatury na 2 czujnikach. Jak mam rozwiązać aby omijał adresy czujników...
Witam, 1. 400kHz I2C a 20MHz ISP. Ile razy szybszy jest odczyt (i ew zapis) pamięci DataFlash od I2c EEPROM? Po pierwsze: nie osiągniesz 20MHz transmisji do pamięci DataFlash bo największa dopuszczalna częstotliwość pracy ATmega128 to 16MHz, a do tego częstotliowść pracy magistrali SPI ( a nie ISP In Cicuit Programing - programownie w układzie ) jest...
Twój problem wynika bezpośrednio z ignorowania warningów i dlatego zaliczasz 10 stopień piekiełka . A jeżeli sobie z tym nie radzisz, to trzeba to napisać i pokazać już w pierwszym poście. Nie odpowiedziałeś na moje pierwsze pytanie - ciągnąć Ciebie za język trzeba ... a czas Ci leci ...
Przecież dostałeś ode mnie opis nagłówka eeprom.h oraz dwa przykłady w tym jeden dokładnie taki jak potrzebujesz: Funkcje obsługi eeprom z nagłówka <avr/eeprom.h>: http://www.nongnu.org/avr-libc/user-manu... Tutaj jest dokładnie taki przykład jak potrzebujesz - po włączeniu odczytuje zapisane w eeprom parametry: http://mikrokontrolery.blogspo...k-podci...
http://obrazki.elektroda.pl/3799930900_1... Jakiś czas temu pisałem, jak nagrywać gry z PC na PEGASUSA. Teraz pora podejść do tematu z drugiej strony – jak zgrać naszą ulubioną kolekcję kartrydży na komputer. Wiele osób może się dziwić, po co taki zabieg, zwłaszcza, że większość gier z tej konsoli krąży już po Internecie. Czasem...
A próbowałeś inne oprócz M16 i M32? Było tak samo? A jeśli odznaczysz EESAVE i wykonasz chip erase, tak, żeby cały EEPROM miał 0xFF i zaprogramujesz to też wyskakuje błąd? W jaki sposób jest zasilany procesor i taktowany? Te błędy, które wyskakują to zawsze błędy typu odczyt 0, w miejsce 1, czy zdarza się także odczyt 1 w miejsce zera? To pierwsze wskazywałoby...
Witam, używam do programowania atmegi 328p programu avr dude + avr dude gui, pytanie, jaki wgrać lock bit żeby był niemożliwy odczyt flash? (i najlepiej eeprom też), pozdrawiam
W funkcji eeprom_read po drugim I2C_start musisz wysłać jeszcze raz adres układu, tym razem adres do odczytu z wyzerowanym najmłodszym bitem. Marek
Tak naprawdę tylko zmiana bitu z 1 na 0 jest objęta limitem, czyli zatkanie komórki. Zmiana z 0 na 1 nie obniża żywotności. W szczególnych przypadkach danych następujące kolejne 8 operacji ustawienia 1 na różnych bitach nie ma wpływu na żywotność EEPROM'a jeżeli się je oczywiście mądrze zrobi.
Chodzi oczywiście o lock bity (lock - blokada). Swoją drogą skoro programujesz swoje avrki to jak możesz nie wiedzieć jeszcze nic o tych bitach ? Jak programujesz swoje AVRy ? Po pierwsze to nie są bity ustawiane z poziomu programu. PonyProg, AvrDude, AvrStudio, Bascom wszystkie pozwalają na ustawienie lock bitów. A blokując Flash lub EEPROM blokujesz...
Rozumiem a do odczytu wystarczy j=twiread(adres);? Też trzeba sprawdzić ACK, bo układu może nie być (np adres jest zły), kabelek się urwał, itp. Po warunku staru też należy sprawdzic status bo może byc problem z rezystorami podciągającymi. Jest tez inny powód. Np komunikujesz się po IIC i w czasie wysyłania np drugiego impulsu SCK następuje reset procesora....
Wygląda na problem z zasilaniem, pamięć eeprom jest niestety dość czuła na tym punkcie. Próbowałeś włączyć Brown-out detection z ustawieniem na odpowiedni poziom napięcia?
Witam Czy procesor AtMega 328p wyrobi się przy założeniu: Odczyt danych z RS485 Zapis danych na karcie SD Zakładam tak: PD0, PD1 - UART PD3 - przełączanie transmisji RS485 PC4, PC5 - I2C ( TWI ) pod EEPROM + PCF8563 PC0, PC1, PC2, PC3 - linie danych wyświetlacza PB1, PB2 - linie E i RS wyświetlacza PB3 ( OC2A ) - podświetlanie wyświetlacza PD4, PD5,...
Jeśli ta funkcja eeprom_write_block jest z atmelowej biblioteki to nie musisz na nic czekać.
Witam! Od wczoraj walczę z wewnętrznym EEPROMem w atmedze128L. Ogólnie problematyczna część programu działa następująco: na żadanie użytkownika dokonywana jest zmiana parametrów w pamięci (adres: IP, maska, brama sieciowa). Plik definiujący zmienne w pamięci: static uint8_t EEMEMconfigmem_static_ipaddr_msb; static uint8_t EEMEM configmem_static_ipaddr_hi;...
http://obrazki.elektroda.pl/4553573800_1... Przy tworzeniu projektów z mikrokontrolerami, oprócz uniwersalnych płytek stykowych, często przydają się gotowe moduły testowe, które można szybko podłączyć. Można kupić takie w wielu sklepach, ale ich ceny są na ogół absurdalne, np. w Kamami sprzedają płytkę z ATmega128 za 109 zł! Poniżej...
Witam, chciałbym wykorzystać pamięć EEPROM do zapisania jednej zmiennej. Ogólnie chodzi o to, że mam na płytce 5 diod LED i przycisk. Chciałbym aby po wciśnięciu zapały się kolejne diody, a po odłączeniu i ponownym podłączeniu zasilania powinny świecić się te same diody co przed odłączeniem. Stworzyłem sobie taki program ale nie działa. [syntax=c] #define...
C_rtd_i = eeprom_read_word(&C_rtd[i]); 4\/3!!
Tak funkcje są potrzebne lecz aby ich użyć należy albo je za linkować z zewnętrznej biblioteki "include ....." albo najpierw zadeklarować a potem używać (Ty akurat robisz to odwrotnie w najpierw próbujesz użyć a potem dopiero deklarujesz funkcję - przesuń funkcje przed main()"
No i właśnie lektura tego postu doprowadziła mnie do szczęśliwego zakończenia, bo układ działa (sprawdziłem). Teraz zapis i odczyt z EEPROMu. Dodano po 1 Zaczął się robić bałagan w programie, wiec utworzyłem sobie oddzielne pliki EEprom.h i EEprom.c i tam chcę też umieścić funkcje zapisu i odczytu. Po podłączeniu zasilania potrzebuje zrobić taką procedurę,...
ROX jeżeli procesor nie jest zabezpieczony przed odczytem, -a zakładam, że jest skoro to produkt komercyjny- to jak mawiają po francusku -marneszanse ;-) Jeżeli nie jest zabezpieczony przed odczytem to każdy programator szeregowy czy równoległy rozwiąże Twój problem. Szukaj informacji na temat programatorów ISP jest ich kilka na forum.
Sprawdzam albo przez eeprom_read_byte() albo zrzucam sobie zawartość eepromu do hex-a. Po prostu każde programowanie powoduje wyczyszczenie pamieci eeprom, bez wzgledu na stan bitu EESAVE.
Zapis do eeprom musi się odbywać inaczej. [syntax=c]void eeprom_write_block(const void *źródło, void *adres_w_EEPROM, size_t ilość);[/syntax]
Zbytnio mi ta odpowiedź nie pomogła... To chyba niezbyt dokładnie przeczytałeś(zrozumiałeś) dokumentację DS18B20 :cry: Przypatrz się tabelce i zobacz, gdzie znajduje się rejestr konfiguracyjny, w którym zapisane jest, z jaką rozdzielczością ma "pracować" nasz DS. http://obrazki.elektroda.net/29_12275171... Zakładając, że nie znamy wartości...
... A jak się sprawa przedstawia kiedy sam TWI wpisze tam 1, czy przerwanie nie powinno się wtedy wyzwolić?... Powinno , ale pod warunkiem że : flaga I w SREG=1 i flaga TWIE w TWCR=1.Przed opuszczeniem procedury przerwania , należy wyzerować(wpisać 1) do flagi TWINT w TWCR , by uniknąć kolejnego przerwania. Piotrek
Witam! Próbuję poradzić sobie z zapisem i odczytem zmiennej z EEPROM'u. Gdy po zapisaniu do pamięci zmiennej resetuję procka przy użyciu programatora to jest ona prawidłowo odczytywana. Gdy natomiast odłączę zasilanie to niestety procek odczytuje mi inną wartość. Ta źle odczytana wartość równa jest '1' czyli takiej wartości jaką wpisuję do EEpromu w...
Na razie próbuję to zrobić w tradycyjny, "Atmegowy" sposób, gdyż mam to już przećwiczone. Na razie procedurka sprawdza, czy w EEPROMie jest FF (lub FFFF dla 16 bitowych zmiennych) i ustawia wartości domyślne. Jednak po odczytaniu, wartości zmiennych nie sa na swoich miejscach. Wpisuję 5 danych typu uint8_t i 8-elementową tablicę uint_16 t. W której...
Witam, chciałbym spytać Was o poprawność zmiany rozdzielczości czujnika temperatury DS18B20 na 9-bit. Zmieniam to w nastepujący sposób: Zacznę od ostatniego pytania: To nie są bity - raczej bajty, i sa to tylko TH i TL i są wpisane tylko do Scratchpad. To by wystarczyło dopóki nie wyłączysz/reset processora. Musiałoby to pozostac częścią programu....
W helpie jest napisane, że domyślnie Timer0, opcjonalnie Timer2. Czyli zostaje odbiór RC5 z dodatkowej płytki. A już myślałem, że Atmega644 jest jakaś trudniejsza w opanowaniu - są z nią większe problemy. Przyznam, że jeśli przy tej samej konfiguracji sprzętowej można uzyskać ten sam efekt a nawet "wyciągnąć" więcej to C staje się co raz bardziej kuszące....
witam wszystkich. W jaki sposob moge zapisywac szereg zmiennych w eepromie avr'a pod jakas tam nazwa a potem je odczytywac. np. mam trzy akwaria "A" "B" "C" i w akwarium A mam trzy zmienne temperatura dawka jedzenia czas swiatla. kazde z tych trzech akwariow ma inne parametry i chodzi mi o to by po przeniesienu urzadzenia z akwarium A do akwarium B...
zamiast 24c512 zastosuj pamiec dataflash np at45db321 (32mb) jest mniej wiecej w tej samej cenie co eeprom ,ale zapis/odczyt bez limitu ,taki czytnik to na wieki ;) ,po za tym jest szybka (interfeis SPI )
Chodzi Ci o zapis do pamięci EEPROM? W wątku http://www.elektroda.pl/rtvforum/viewtop... zamieściłem plik lib_avr.zip, w nim znajdziesz odpowiedź na Twoje pytanie (jest tam biblioteka i przykładowy plik z krótkim programem.
Mój sposób nr 1: -zakładasz w jednej lub dwóch komórkach wskaźnik do bieżącej struktury roboczej, składającej się z licznika zapisów (3 bajty) oraz rejestru przechowującego zmienną (o dowolnym rozmiarze), -następnie tworzysz funkcje do zapisu oraz odczytu zmiennej. Fun do odczytu ustala za pomoca wskaznika poczatek struktury w EEPROM, a nastepnie odczytuje...
Raczej tak. [syntax=c]uint8_t eeSEast EEMEM = 00; uint8_t s; eeprom_write_byte(&eeSEast, s); // zapis do eepromu s = eeprom_read_byte(&eeSEast); // odczyt z eepromu [/syntax]
Pisałem że nie mam portu RS232 na kompie tylko mam przejściówkę USB RS232.Oczywiście sterownik do przejściówki jest zainstalowany, jak wyczytałem to jest powodem że nie mogę nic odczytać Dodano po 2 Witam. Układ 24C02 jest pamięcią eeprom, to nie jest żadna Atmega. Przepraszam tutaj się pomyliłem miało być Atmel.
bo niszczysz pamięć niepotrzebnie. Rozwiązanie jest prostsze niż myślisz, zwłaszcza gdy - jak mówisz wartość zmiennej to max 48. Zrób funkcję do odczytu tych zmiennych: uint8_t eeprom_get_var(...) { uint8_t var; var = eeprom_read_byte(...); if(var > 48) var = 0; return var; } I problem nie istnieje. 4\/3!!
No więc w ten sam sposób nie zapiszesz do zewnętrznej pamięci EEPROM. Po pierwsze, ona jakoś się komunikuje z procesorem, popularne interfejsy to SPI lub I2C. Taką zapewne pamięć masz. Więc musisz oprogramować komunikację z nią. Jak już będziesz miał komunikację z pamięcią to musisz napisać własne funkcje wyższego poziomu, realizujące zapis/odczyt struktur,...
Mi chodzi o to że wiekszość mikro kontrolerów ma piny kilku interfejsów (uart, spi, i2c, jtag) i chodzi mi o sytuacje w których uszkodzeniu ulega np Atmega w jakimś urządzeniu i zastępuję ją nową atmegą na którą chcę wgrać zawartość taką jak ta na uszkodzonej atmedze, więc do odczytu i zapisu eeprom i flash użyć można któregoś z tych interfejsów. Jeśli...
odczyt eeprom atmega odczyt pamięci eeprom atmega odczyt pamięć eeprom atmega
internet posiadać dialog sterowanie klimatyzacją arduino zamel odbiornik
siemens sl45i oświetlenie parkingu
Jak wymontować panel klimatyzacji w Peugeot 1007? Jak przyśpieszyć kursor myszki w Windows 10?