Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 18 sie 2026, o 02:35


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 6 ] 
Autor Wiadomość
PostNapisane: 9 cze 2016, o 22:34 
Offline
Użytkownik

Dołączył(a): 22 lut 2015
Posty: 61
Pomógł: 0

Witam kolegów, zdaje sobie sprawy że temat już był wałowany kilkakrotnie ale mimo to nie mogłem znaleźć rozwiązania,
mam problem związany z eepromem napisałem sobie program, sterownik solara. Zapisuje sobie dwa parametry temperatura histerezy załączania i wyłączania, korzystam ze typu strukturalnego tak jak to pokazał Mirek w swoim poradniku no i problem mam taki iż po odłączeniu zasilania pierwszy parametr thw jest odczytany z EE prawidłowo ale drugi thz to już losowo wczytuje wartość 255 czasmi kilka razy wczyta dobrze. Jeszcze nie ogarniam tego wszystkiego za dobrze więc proszę o podpowiedz co jest nie tak. Poniżej przedstawiam kod
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


tutaj wrzucam pliki wydzielone common.h
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

oraz common.c
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 cze 2016, o 07:27 
Offline
Użytkownik

Dołączył(a): 25 lip 2015
Posty: 140
Zbananowany użytkownik

Pomógł: 18

Co robi ten fragment w funkcji void check_and_load_defaults( void ) ?
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

W jaki sposób weryfikujesz zawartość pamięci EEPROM? Odczytujesz ją za pomocą programatora?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 cze 2016, o 08:02 
Offline
Użytkownik

Dołączył(a): 22 lut 2015
Posty: 61
Pomógł: 0

Ten fragment ma za zadanie sprawdzić czy zawartość pamięci EE to same 255 jeśli tak to to wczytaj wartości zapisane w pamięci
flash. jeśli chodzi o weryfikacje samej pamięci EE to nie robiłem tego wrócę z pracy to sprawdzę co tam się zapisuje, dobry pomysł :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 cze 2016, o 09:42 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 09 gru 2014
Posty: 1540
Pomógł: 269

Sprawdzałem ten twój kod, ale bez obsługi czujników temperatury. No niestety nie posiadam biblioteki: DS18B20/ds18b20_v1.h ;)
Oczywiście po za komentowaniu kilku linijek związanych z tą biblioteką i wgraniu do procka, wszystko jest OK. To znaczy obydwie zmienne thw i thz wyświetlane są na wyświetlaczu LCD prawidłowo. Po zmianie ich wartości przyciskami g1-g3 i resecie procka, zmienne te odczytywane są prawidłowo.
Wniosek nasuwa mi się taki, że coś musisz mieć nie tak z tą biblioteką lub jej obsługą.
Sprawdź sam, za komentuj tą bibliotekę, wyskoczy masa błędów, za komentuj więc te linijki kodu, gdzie te błędy występują, skompiluj i wgraj do procka. Zobaczysz, że odczyt i zapis do EEPROM'a działa w porządku.
Pozdrawiam.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 cze 2016, o 09:56 
Offline
Użytkownik

Dołączył(a): 22 lut 2015
Posty: 61
Pomógł: 0

Wrócę z pracy to sprawdzę to w taki sposób, najdziwniejsze jest to że kilka razy też dobrze wczyta a z którymś razem thz 255.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 cze 2016, o 19:51 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 27 mar 2015
Posty: 44
Pomógł: 2

Ja to widzę tak (i sądzę że w tych linijkach siedzi problem ) nie mam atmegi 8 i nie mam możliwości sprawdzić .
chodzi mi o struktury takie jak

main.c
Kod:
 
  // inicjalizacja ustawień fabrycznych w pamięci Flash                                   * ?  a gdzie dane zapisane do struktury? *
 
  const TCFG pgm_cfg __attribute__((__progmem__))={
                Thw,
                Thz,
 
  };                                                                                                                  * tu napisze dalej w opisie *

                    * te 2 linie pominę one powinny być raczej  w camoon.h *
                                                                                                   
  TCFG eem_cfg EEMEM;                   // dane w pamięci EEPROM
  TCFG ram_cfg;   


common.c
Kod:

typedef struct {
        uint8_t thw;
        uint8_t thz;
 
} TCFG;
 
 
 
// ustawienia domylne (fabryczne)
#define Thw 6               //                               *  coś tu chyba nie tak jest? *
#define Thz 12                  //                            *  coś tu chyba nie tak jest? *
 


a czy deklaracja z main.c nie powinna być w common.h ?

a w miejsce linijek które mogą ci mieszać i to bardzo w kodzie
nie lepiej w strukturze umieszczonej w PROGMEM zapisać na stałe te wartości zamiast
Kod:
#define Thw 6     
#define Thz 12


przecież i tak nie masz możliwości ich zmiany ? a po
Kod:

void check_and_load_defaults( void ) {
        uint8_t i, len = sizeof( ram_cfg );
        uint8_t * ram_wsk = (uint8_t*)&ram_cfg;
 
        copy_eem_to_ram();
        for(i=0; i<len; i++) {
                if( 0xff == *ram_wsk++ ) continue;
                break;
        }
 
        if( i == len ) {
                load_defaults();                                           *   chodzi mi o to co tu się wyrabia  :)  *
        }
 
}


a dokładniej TU
Kod:

void load_defaults( void ) {
        copy_pgm_to_ram();                   * OO tu  tu *
        copy_ram_to_eem();
}


czym zapełniasz dane z pgm ? przecież w odwołaniach do struktur pre-procesor już ci po podmieniał dane po # definach

// *** Pomieszał a ja jeszcze bardziej ***// :( dopiero zauważyłem pomylone opisy plików common.c <-> common.h

nie będę zmieniał tylko 1 linijkę wrzucę

Kod:

extern const TCFG pgm_cfg __attribute__((__progmem__));         // dane w pamięci FLASH

a skąd ci się to wzięło ?
nie # include main.c skąd ma wiedzieć kompilator co to jest ?
rozumiał bym jak by struktura była w cammon.c zamiast w main.c

Według mnie tu masz takie zagwozdki które mogą powodować małe / lub / spore kłopoty sprawdź je reszta niby ok
nie mam procka ani bibliotek ds18b20 do których się odwołujesz



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 6 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 1 gość


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO