Hejto.pl
Dodaj post

Wpisz coś do wyszukania (minimum 2 znaki)

Wpis użytkownika myoniwy w Programowanie

Fanatyk

w Programowanie

23piorunów

Elo mordziaki, jak ludzie potrzebują pomocy z to zgłaszają się do 
No to teraz sprawa się odwraca. Ja potrzebuję pomocy, pośrednio związanej z . A dokładniej to 
Do rzeczy. Mam pestkę DS1971+F5 (PDF), komunikacja po 1Wire. Wewnątrz siedzi między innymi pamięć DS2430A (PDF).
Udało mi się odczytać adres tej pestki oraz zawartość pamięci.
>Data: B9 39 0 1 1 70 3 9B 10 77 0 0 0 0 39 7
>R=2 79 2 79 0 C1 0 0 0 0 3E F4 80 FF [... dużo znaków ...] F 10 1 41 56 52 20 49

Użyłem do tego kodu znalezionego gdzieś w czeluściach internetu.
> <OneWire.h>
>OneWire ds(2);                   // OneWire bus on digital pin 2
>void setup() {
> Serial.begin (115200);
>}
>
>void loop() {
> byte i;                        // This is for the for loops
> boolean present;               // device present var
> byte data[16];                 // container for the data from device
> byte addr[64];                  // adress
>
> present = ds.reset();          // OneWire bus reset, always needed to start operation on the bus, returns a 1/TRUE if there's a device present.
> ds.skip();                     // Skip ROM search
>
> if (present != 0){          // We only try to read the data if there's a device present
>   //Serial.println("DS1971 device present");
>   ds.write(0xF0,1);       // Read data command, leave ghost power on
>   ds.write(0x00,1);       // LSB starting address, leave ghost power on
>   ds.write(0x00,1);       // MSB starting address, leave ghost power on
>
>   Serial.print("Data: ");  // For the printout of the data
>   for ( i = 0; i < 16; i++) {   // Now it's time to read the EEPROM data itself, each page is 32 bytes so we need 32 read commands
>     data[i] = ds.read();        // we store each read byte to a different position in the data array
>     Serial.print(data[i], HEX);      // printout in ASCII
>     Serial.print(" ");          // blank space
>   }
>   Serial.println();
>   Serial.print("R=");
>    for( i = 0; i < 64; i++) {
>   Serial.print(addr[i], HEX);
>   Serial.print(" ");
> }
>   Serial.println();
>   delay(1000);                   // Delay so we don't saturate the serial output
> }
> else {                          // Nothing is connected in the bus
>   //Serial.println("Non connesso");
>   delay(1000);
> }
>}
I teraz jest sprawa do ludzi bardziej obcykanych w programowaniu. Co zrobić by zmienić zawartość poszczególnych komórek pamięci?
Niby biblioteka OneWire.h ma komendę ds.write_bytes ale jak bym nie kombinował to albo błąd kompilacji albo nic się nie dzieje.
Ktoś ma pomysł jak to zrobić?

Komentarze (8)

Fanatyk0piorunów

Tylko wciąż mam problem. Bo dane niby się zapisują. Ale w czasie odczytu zmieniaja się tylko dwa przedostatnie bajty. Może to jest suma kontrolna?

Mimo że wgram np 0x34, 0x65, 0x65, 0x60, 0x30 to nigdzie później w ciągu odczytanych danych nie ma takich wartości.

Osobistość4piorunów

Wszystko masz napisane w https://www.analog.com/media/en/technical-documentation/data-sheets/DS2430A.pdf
Najpierw piszesz do scratchpada 0x0F, podajesz adres zapisu, a potem lecisz z kolejnymi bajtami danych. Układ sam sobie inkrementuje wskaźnik swojej pamięci. Jak zapiszesz za dużo danych to się zapętli i będzie pisał od początku. Potem master, czyli Ty wysyła reset (czyli pewnie sygnał końca transmisji). A potem przepisujesz dane ze scratchpada do pamięci - copy scratchpad 0x55.

Fanatyk0piorunów

@cec Jak już ma się przykład który można skonfrontować z danymi z pdfa to znacznie łatwiej idzie przyjmowanie tel wiedzy. A czytałem tego pdfa ze 3 razy, o nie kumałem co to za adres 0Fh lub AAh. Teraz już jest łatwiej.

Osobistość0piorunów

piorun dla zasiegu

Gruba ryba3piorunów

@myoniwy nie mam pojęcia, grzmot dla zasięgu, ale;

> Użyłem do tego kodu znalezionego gdzieś w czeluściach internetu.

musiałeś wpisać w google jakąś frazę. Próbowałeś wpisać tę frazę w ChatGPT z prośbą o napisanie kodu takiego jak potrzebujesz? Nie spodziewam się za bardzo że się uda, ale też nie mam lepszej propozycji.

Fanatyk2piorunów

@wombatDaiquiri wcześniej nie używałem gpt. A teraz o dziwo napisał dosyć szybko kod który nawet działa, ale z małym zastrzeżeniem.