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



Teraz jest 25 mar 2026, o 02:38


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 27 ] 
Autor Wiadomość
PostNapisane: 7 lis 2016, o 21:31 
Offline
Nowy

Dołączył(a): 18 sty 2015
Posty: 7
Pomógł: 0

Od dłuższego czasu borykam się z pewnym problemem, a mianowicie potrzebuję przy pierwszym uruchomieniu procesora wpisać do pamięci eeprom czas trwania impulsu.
Pomyslałem, że skoro po nowym zaprogramowaniu procesora całą pamięć mam wymazaną (w każdej komórce jest 0xFF), to wystarczy mi sprawdzenie warunku.
W sekcji main umieściłem warunek "jezeli w komórce nr. x jest wartość 0xFF odczytaj czas trwania impulsu i zapisz do tej komórki).
Niby proste i logiczne (tak mi się wydawało) jednak problem w tym, że tak naprawdę pierwsze uruchomienie następuje zaraz po zaprogramowaniu procesora i w komórkę w którą ma się zapisać dana wartość zapisują się losowe liczby - to logiczne bo nie mam możliwości programować układu z podanym impulsem na dany pin :)

Czy ktoś ma pomysł jak to ugryźć ?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 lis 2016, o 21:48 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 04 cze 2014
Posty: 855
Lokalizacja: pod Warszawą
Pomógł: 58

cześć

a jakbyś dał przed główną funkcją programu małe opóźnienie? W niczym to nie wpłynie na sam program ale start nastąpi po pewnym czasie.

pozdrawiam

_________________
Pomóżcie mi stanąć na nogi



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 lis 2016, o 22:14 
Offline
Nowy

Dołączył(a): 18 sty 2015
Posty: 7
Pomógł: 0

Musiałbym wtedy pilnować, aby odłączyć procesor zaraz po programowaniu, ale przetestuje to rozwiazanie.
Dzięki

Wysłane z mojego ALE-L21 przy użyciu Tapatalka



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 lis 2016, o 22:28 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27450
Lokalizacja: Szczecin
Pomógł: 1045

zycior napisał(a):
Pomyslałem, że skoro po nowym zaprogramowaniu procesora całą pamięć mam wymazaną (w każdej komórce jest 0xFF), to wystarczy mi sprawdzenie warunku.
W sekcji main umieściłem warunek "jezeli w komórce nr. x jest wartość 0xFF odczytaj czas trwania impulsu i zapisz do tej komórki).
Niby proste i logiczne (tak mi się wydawało) jednak problem w tym, że tak naprawdę pierwsze uruchomienie następuje zaraz po zaprogramowaniu procesora i w komórkę w którą ma się zapisać dana wartość zapisują się losowe liczby - to logiczne bo nie mam możliwości programować układu z podanym impulsem na dany pin


Nie obraź się ale to mi przypomina taką starą ludową piosnkę śmieszną ;)

"Jadą goście jadą, kele mego sadu, do mnie nie zajadą, bo jo ni mom sadu!" :lol:

No ale tak jest troszkę z tym co napisałeś - bo zaczynasz od tego, że komórki w pamięci EEPROM mają wartość 0xFF, okeeej ... (to jest twój sad z tej piosenki)

No to zrobisz warunek IF czy jest wartość 0xFF .... oookej (jadą goście)

po czym piszesz że ...
zycior napisał(a):
że tak naprawdę pierwsze uruchomienie następuje zaraz po zaprogramowaniu procesora i w komórkę w którą ma się zapisać dana wartość zapisują się losowe liczby - to logiczne bo nie mam możliwości programować układu z podanym impulsem na dany pin

(no ale do ciebie goście nie zajadą ;) bo ty jednak nie masz sadu - czyli nie masz wartości 0xFF w EEPROM)
No to jak to w końcu jest ? ;)

.... a za to już końcówka zdania że coś tam jest logiczne bo nie masz możliwości programować układu z podanym impulsem na dany pin to już przekracza moją percepcję - co autor miał na myśli

----------------------------------------

to tak pół żartem pół serio - i nie obrażaj się - za to postaraj się lepiej przemyśleć jak zadać pytanie i opisać problem - żeby uzyskać poprawną odpowiedź albo jakąś pomoc, poradę ....

Ponieważ nie wiem kompletnie o co chodzi tzn jaki masz problem to podpowiem tylko - że

1. dobrze myślałeś że po skasowaniu w EEPROM powinno być i jest 0xFF w każdej komórce
2. dobrze myślałeś że można sprawdzić czy jest w niej 0xFF i wtedy coś zapisać

ale równie dobrze w kodzie mogłeś spaskudzić milion rzeczy - więc bez pokazania swojego kodu to wygląda jeszcze bardziej blado

ale ok - nie ważne - chcesz wiedzieć jak się postępuje z pamięcią EEPROM ?

obejrzyj to:

https://www.youtube.com/watch?v=W7f0EnDzS_M
https://www.youtube.com/watch?v=ix0EBtdiviY

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 lis 2016, o 22:49 
Offline
Nowy

Dołączył(a): 18 sty 2015
Posty: 7
Pomógł: 0

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


Mirku, z całym szacunkiem... ale nie może to być aż tak nielogiczne skoro Twój przedmówca zrozumiał w czym rzecz.

Ale do rzeczy... kod jak kod. Jak widać, aby wklepać wartość zmiennej czas do pamięci eeprom musi wystąpić na pinie PB0 stan niski lub w komórce "&dlugosc_impulsu_ee" musi być wartość FF.
Oczywiście przy stanie niskim na pb0 wszystko działa tak jak bym sobie tego życzył.
Przy pierwszym uruchomieniu procesora (w zasadzie gotowego układu), chciałbym aby wartość "czas" zapisać w pamieci eeprom. Problem w tym, że tak faktycznie pierwsze uruchomienia procesora jest zaraz po jego zaprogramowaniu, czyli do pamięci wpisana zostanie losowa liczba.

Mam nadzieję, że teraz będzie to dla Ciebie nieco bardziej czytelne.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 lis 2016, o 23:14 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 15 wrz 2013
Posty: 74
Lokalizacja: Sierakowice/Gdańsk
Pomógł: 9

Gdybyś napisał jeszcze coś o części sprzętowej. Czy programujesz mikrokontroler umieszczony w docelowym układzie? A może dopiero później montujesz go gdzieś? Skąd pochodzi ten nieszczęsny impuls? Czy sam pomiar długości impulsu (bez zapisywania go do eeproma) działa poprawnie? Może wystarczy programowo podciągnąć wejście do VCC.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 lis 2016, o 23:19 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 sty 2013
Posty: 1760
Pomógł: 196

Witam
To może dać na końcu dać flagę - gdy program do niej dojdzie to ustawić wtedy "zezwolenie na liczenie". Albo coś na wzór liczenia ilości naciśnieć ( jest taki przykład w BB) - Ty reagowałbyś od drugiego.
A tak nawiasem mówiąc trochę dziwny ten kod; m.in.: chyba powinno być PINB0.

Pozdr.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 lis 2016, o 23:34 
Offline
Nowy

Dołączył(a): 18 sty 2015
Posty: 7
Pomógł: 0

wojtekr51 napisał(a):
Gdybyś napisał jeszcze coś o części sprzętowej. Czy programujesz mikrokontroler umieszczony w docelowym układzie? A może dopiero później montujesz go gdzieś? Skąd pochodzi ten nieszczęsny impuls? Czy sam pomiar długości impulsu (bez zapisywania go do eeproma) działa poprawnie? Może wystarczy programowo podciągnąć wejście do VCC.

Fakt, to dosyć ważne informacje.
Procesor programuję "na zewnątrz", już zaprogramowany trafia do docelowego układu.
Sam układ działa bez zastrzeżeń, tak samo jak zapisanie wartości do eeproma po podaniu "zera" na pb0.

Po prostu, dla ułatwienia sobie życia po montażu urządzenia chciałem, przy pierwszym odpaleniu tego ustrojstwa, aby zapisać czas trwania impulsu do pamięci, abym fizycznie nie musiał zawierać pinu pb0 do masy.
Przy montażu kilku, kilkunastu urządzeń w ciągu dnia, robi się to upierdliwe :-)

Wysłane z mojego ALE-L21 przy użyciu Tapatalka



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 lis 2016, o 23:54 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 wrz 2014
Posty: 1530
Lokalizacja: Warszawa
Pomógł: 55

Jeśli czyścisz EEPROM przy programowaniu, to masz tam FF. Małem różne jazdy z eepromem, ale jeśli go czyściłem, to było tam FF, bez względu na to kiedy czytałem.
Ja bym dał prostego if-a - jak jest FF to leć dalej, mierz impuls i zapisuj jego długość. Raz tylko jest tem impuls? Czy się powtarza?

_________________
--... ...-- - --- -- . -.-



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 lis 2016, o 00:45 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 15 wrz 2013
Posty: 74
Lokalizacja: Sierakowice/Gdańsk
Pomógł: 9

Nadal jeszcze trudno mi zrozumieć, jak ma odbywać się ten pomiar czasu trwania impulsu. Napisz jak w układzie wygląda podawanie impulsu/sygnału. Jakie długości może przyjmować mierzony impuls? A może jego czas jest znany i wystarczyłoby bezpośrednio wpisać znaną wartość do eeproma?
zycior napisał(a):
Po prostu, dla ułatwienia sobie życia po montażu urządzenia chciałem, przy pierwszym odpaleniu tego ustrojstwa, aby zapisać czas trwania impulsu do pamięci, abym fizycznie nie musiał zawierać pinu pb0 do masy.
W twojej odpowiedzi zawarta jest chyba następna zwrotka wspomnianej wcześniej ludowej przyśpiewki ;) . Możnaby zrozumieć, że chcesz zmierzyć długość impulsu nie podawając go fizycznie na wejście. Czy może chciałeś napisać że teraz ręcznie jakoś zwierasz to wejście do masy?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 lis 2016, o 08:56 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 sty 2013
Posty: 1760
Pomógł: 196

Witam
Być może kol.zycior jest trochę poirytowany że nie możemy załapać, ale dobrze by było gdyby opisał w jaki sposób działa ten program; kiedy następuje to nieszczęsne zwieranie a kiedy ma być jego pomiar. Na razie jest to opisane niby prosto a zagadkowo. Trochę to przypomina film "Nie lubię poniedziałku" gdzie gościu szuka treblinki do kombajnu, ale tylko on wie jak to wygląda.

Pozdr.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 lis 2016, o 09:55 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27450
Lokalizacja: Szczecin
Pomógł: 1045

zycior napisał(a):
Mirku, z całym szacunkiem... ale nie może to być aż tak nielogiczne skoro Twój przedmówca zrozumiał w czym rzecz.

Czy teraz już widzisz, że nie dość że ja nie zrozumiałem to wciąż pozostali mają problem ze zrozumieniem ?

Ja wciąż nie wiem na przykład czy ty masz problem z jakimś tam impulsem bliżej nie wiadomego pochodzenia czy ty masz problem z zapisem do EEPROM? ... Ale ok to nie istotne, że ja nie rozumiem ...

gorsze jest to, że nie tylko ja już chyba napisałem tobie, że po zaprogramowaniu procka masz w pamięci EEPROM same wartości 0xFF - wręcz przyznałem rację tobie - twoim założeniom słusznym zresztą ....

Za to ty dalej z uporem godnym podziwu - wciąż piszesz że niby jest 0xFF po to by za chwilę pisać, że przecież to logiczne że po zaprogramowaniu procka w pamięci EEPROM są śmieci ... Nie nie - panie kolego to ani nie jest logiczne ani nie ma żadnych śmieci w pamięci EEPROM. Za to ty mógłbyś postarać się wyizolować i opisać swój problem.

ale nie na zasadzie opisywania jakiegoś impulsu - bo co impuls ma wspólnego z pamięcią EEPROM ? NIC

ot zrobić prosty test zapisu odczytu do i z EEPROM a gdy ci coś nie będzie wychodzić to zadać pytanie - tymczasem wrzucasz jakiś temat dziwnego impulsu i niektórzy zamiast skoncentrować się na EEPROM - poszukują rozwiązania problemu z impulsem ;) .... czyli pewnie nie tego o co chodzi ...

No chyba że ja rzeczywiście - tylko ja - wciąż niczego nie rozumiem - to ok

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 lis 2016, o 10:33 
Offline
Użytkownik

Dołączył(a): 19 paź 2012
Posty: 79
Zbananowany użytkownik

Pomógł: 1

Nie wiem czy dobrze kombinuje - ale kolega ma jakiś układ który cos tam ma zapisywac - dlugosc impulsu, czas whatever. Domniemam, że ten czas dla każdego układu jest inny i służy czemuś, nie wiem - może jakiejś kalibracji ?

Procek kolega programuje poza układem - a że po programowaniu procek sie uruchamia z automatu to i program zapisuje do eepromu jakiegos losowego smiecia nie mającego nic wspólnego z wartością jaka by była gdyby programował procek w układzie.

Kiedy wklada go do ukladu to procek defacto nie uruchamia sie po raz pierwszy tylko po raz drugi od momentu zaprogramowania...

tak to zrozumiałem czytając - "musiałbym szybko odłączyć procek po programowaniu" na zaproponowany delay miedzy zapisem do eepromu. Czyli by zdazyc po programowaniu, zanim zapis nastapi.

Pytanie - do czego ta wartosc mierzona zapisana do eepromu ma służyć ? Może zapisuj ją przy drugim uruchomieniu procka ? :P



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 lis 2016, o 10:46 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27450
Lokalizacja: Szczecin
Pomógł: 1045

VDR napisał(a):
Procek kolega programuje poza układem - a że po programowaniu procek sie uruchamia z automatu to i program zapisuje do eepromu jakiegos losowego smiecia nie mającego nic wspólnego z wartością jaka by była gdyby programował procek w układzie.

Starałem się autora od początku na to naprowadzić - a kolega od razu ;)

VDR napisał(a):
Pytanie - do czego ta wartosc mierzona zapisana do eepromu ma służyć ?

To chyba najmniej istotne ;)

VDR napisał(a):
Może zapisuj ją przy drugim uruchomieniu procka ?


Tak, a później nastąpi chociażby przypadkowy reset i co ? później przy trzecim? ... czwartym ? ;)

W swoim pierwszym poście podpowiedziałem jak warto posługiwać się pamięcią EEPROM no ale autor jak widać - całkowicie to .... że tak powiem ;) ma w głębokim poważaniu.

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 lis 2016, o 11:10 
Offline
Użytkownik

Dołączył(a): 19 paź 2012
Posty: 79
Zbananowany użytkownik

Pomógł: 1

mirekk36 napisał(a):

VDR napisał(a):
Pytanie - do czego ta wartosc mierzona zapisana do eepromu ma służyć ?

To chyba najmniej istotne ;)


Niby tak, choć może całkowicie niepotrzebne jest to zapisywanie po pierwszym uruchomieniu i można znaleźć jakiś inny warunek, który spowoduje, że ta wartość zostanie zapisana. Ot sprowadzić zadanie do "jak wykryć, że procek jest we właściwym układzie aby zmierzyć i zapisać długość sygnału" ;)

mirekk36 napisał(a):
VDR napisał(a):
Może zapisuj ją przy drugim uruchomieniu procka ?

Tak, a później nastąpi chociażby przypadkowy reset i co ? później przy trzecim? ... czwartym ? ;)


A to już zależne od reżimu pracy :lol: :lol: :lol: Nie wiem czy dobrze zrozumiałem ale, kolega programuje proca, wrzuca go do układu, wystawia sygnał niski na pin i nastepuje zapisanie tej wartosci do eepromu. Kolega chciałby pominąć to dodatkowe podawanie sygnału na pin bo i nużące i pracochłonne wiec wymyślił sprawdzanie czy pamięć jest "czysta", jesli tak, to znaczy ze to nowe uruchomienie i ma nastąpić to zapisanie bez podania stanu niskiego na pin ;)

Być może obrał w ogóle błędną drogę do rozwiązania zadania ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 lis 2016, o 11:28 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27450
Lokalizacja: Szczecin
Pomógł: 1045

VDR napisał(a):
Niby tak, choć może całkowicie niepotrzebne jest to zapisywanie po pierwszym uruchomieniu

No ja staram się od początku to wyjaśnić - chociaż - jak to ja - po prostu naprowadzam ... ale dobrze, że ktoś inny też to dostrzega i w końcu klaruje to przejrzyście

------------------------ [ Dodano po: 1 minucie ]

VDR napisał(a):
Być może obrał w ogóle błędną drogę do rozwiązania zadania

Moim zdaniem na pewno - choć .... no mogę się mylić bo być może chodzi o caaaałkiem co innego, jakiś ważny projekt i zależności - ale tego przecież nie wiemy.

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 lis 2016, o 12:36 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 paź 2013
Posty: 1988
Lokalizacja: Lipsko
Pomógł: 125

A ja tam wcale problemu nie widzę :)
zycior napisał(a):
Po prostu, dla ułatwienia sobie życia po montażu urządzenia chciałem, przy pierwszym odpaleniu tego ustrojstwa, aby zapisać czas trwania impulsu do pamięci, abym fizycznie nie musiał zawierać pinu pb0 do masy.

Przecież rozwiązanie jest w powyższym cytacie!
Jaki problem badać zwarcie w programie??? Krótko... jeśli EEPROM=$FF to sprawdź czy PIN=LOW, jeśli oba warunki spełnione to znaczy, że zaczyna się impuls i można go zmierzyć po czym zapamiętać jeśli nie to pozostań w pętli. Wszystko! Przy kolejnym uruchomieniu procesora warunek już nie będzie spełniony, bo EEPROM<>$FF.

_________________
http://www.sylwekkuna.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 lis 2016, o 17:29 
Offline
Nowy

Dołączył(a): 18 sty 2015
Posty: 7
Pomógł: 0

Witajcie

Przepraszam, że odzywam się dopiero teraz. Niestety w pracy nie miałem dziś dostępu do internetu.
Jeszcze raz postaram się od początku do końca wyjaśnić w czym rzecz, chociaż kolega VDR trafnie "rozszyfrował" moje intencje.

Cytuj:
Nie wiem czy dobrze kombinuje - ale kolega ma jakiś układ który cos tam ma zapisywac - dlugosc impulsu, czas whatever. Domniemam, że ten czas dla każdego układu jest inny i służy czemuś, nie wiem - może jakiejś kalibracji ?
Procek kolega programuje poza układem - a że po programowaniu procek sie uruchamia z automatu to i program zapisuje do eepromu jakiegos losowego smiecia nie mającego nic wspólnego z wartością jaka by była gdyby programował procek w układzie.
Kiedy wklada go do ukladu to procek defacto nie uruchamia sie po raz pierwszy tylko po raz drugi od momentu zaprogramowania...
tak to zrozumiałem czytając - "musiałbym szybko odłączyć procek po programowaniu" na zaproponowany delay miedzy zapisem do eepromu. Czyli by zdazyc po programowaniu, zanim zapis nastapi.


Na wejście PB3 podaję sygnał pwm. W zależności od jego wypełnienia (mierzę czas trwania stanu wysokiego w tym sygnale) wyjście PB4 załącza układ wykonawczy. Jeżeli stan H w sygnale pwm trwa dłużej niż (załóżmy) 3ms ustaw stan wysoki na PB4, jeżeli krótszy - stan L (czyli włącza i wyłącza, załóżmy, diodę led). W związku z tym, że każde z urządzeń potrzebuje różnego czasu (w jednym są to 3ms, w innym 10ms, jeszcze w innym 1,5ms) tak więc każdy muszę zaprogramować z osobna. Ten właśnie czas zapisuję w pamięci eeprom.
Do tej pory, aby zaprogramować ten czas, zwierałem pin PB0 do masy podczas uruchamiania urządzenia.
to jest ten zapis:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

W związku z tym, iż czasem, w ciągu dnia muszę zbudować kilka bądź kilkanaście takich układów, monotonne zwieranie końcówki procesora jest po prostu męczące i zajmuje trochę czasu.

Pomyślałem więc, że warto dopisać kod, który będzie zapisywał ten czas bez mojej ingerencji, przy pierwszym rozruchu urządzenia.
Stąd też wziął się zapis w if'ie:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


No i tutaj zaczęły się "schody". Procesor programuję poza docelowym układem, tak więc w zasadzie pierwsze uruchomienie urządzenia nie jest pierwszym startem procesora. Zaraz po programowaniu procesor startuje, a w związku z tym, że na pinie na którym odczytuje sygnał pwm są bliżej nie ustalone stany, do pamięci eeprom trafiają przypadkowe liczby.

I to w zasadzie jest cała bolączka mojego układu.

Kolega mczarny zasugerował wprowadzenie opóźnienia przed startem układu, co w zasadzie wydaje się prostym i skutecznym rozwiązaniem,
mogę dopisać warunek, if ( dlugosc_impulsu == 0xFF) { delay (ileśtam) następnie pomiar impulsu i zapis do eeprom} co pozwoli mi na wyciągnięcie układu z programatora zanim nastąpi odczytanie długości impulsu i zapis do eeprom.

sq5rix napisał(a):
Jeśli czyścisz EEPROM przy programowaniu, to masz tam FF. Małem różne jazdy z eepromem, ale jeśli go czyściłem, to było tam FF, bez względu na to kiedy czytałem.
Ja bym dał prostego if-a - jak jest FF to leć dalej, mierz impuls i zapisuj jego długość. Raz tylko jest tem impuls? Czy się powtarza?

Myślę, że to już wyjaśniłem chwilę wcześniej - nie mogę dać tam prostego if'a bo w momencie programowania nie ma tego impulsu, który mierzę.

wojtekr51 napisał(a):
Nadal jeszcze trudno mi zrozumieć, jak ma odbywać się ten pomiar czasu trwania impulsu. Napisz jak w układzie wygląda podawanie impulsu/sygnału. Jakie długości może przyjmować mierzony impuls? A może jego czas jest znany i wystarczyłoby bezpośrednio wpisać znaną wartość do eeproma?

Nie ma żadnego znaczenia jak odbywa się pomiar, wynik pomiaru trafia do zmiennej którą trzeba zapisać w pamięci. Nie ma też znaczenia jakie długości on przyjmuje - wszak co za różnica czy do komórki pamięci zapiszę 2 czy 102.
Co prawda czas jest znany, ale w każdym układzie inny. Owszem, można by zaprogramować osobno pamięć eeprom wpisując odpowiednią wartość do komórki, ale to znowu marnowanie czasu, równie dobrze mógłbym za każdym razem edytować wartość zmiennej i osobno kompilować wsad do każdego procesora.

kicajek napisał(a):
Witam
Być może kol.zycior jest trochę poirytowany że nie możemy załapać, ale dobrze by było gdyby opisał w jaki sposób działa ten program; kiedy następuje to nieszczęsne zwieranie a kiedy ma być jego pomiar. Na razie jest to opisane niby prosto a zagadkowo. Trochę to przypomina film "Nie lubię poniedziałku" gdzie gościu szuka treblinki do kombajnu, ale tylko on wie jak to wygląda.

Gdybym obawiał się czyjegoś poirytowania udzielając się na tym czy innym forum, pewnie wypierdzielił bym już dawno komputer przez okno :) Rozumiem, że łatwiej jest coś pojąć kiedy się to widzi, czy obie strony wiedzą dokładnie o czym rozmawiają. W tym przypadku ja wiem co chcę powiedzieć... ale nie umiem :D

mirekk36 napisał(a):
ot zrobić prosty test zapisu odczytu do i z EEPROM a gdy ci coś nie będzie wychodzić to zadać pytanie - tymczasem wrzucasz jakiś temat dziwnego impulsu i niektórzy zamiast skoncentrować się na EEPROM - poszukują rozwiązania problemu z impulsem ;) .... czyli pewnie nie tego o co chodzi ...
No chyba że ja rzeczywiście - tylko ja - wciąż niczego nie rozumiem - to ok...

No ja staram się od początku to wyjaśnić - chociaż - jak to ja - po prostu naprowadzam ... ale dobrze, że ktoś inny też to dostrzega i w końcu klaruje to przejrzyście...

VDR napisał(a): Być może obrał w ogóle błędną drogę do rozwiązania zadania

Moim zdaniem na pewno - choć .... no mogę się mylić bo być może chodzi o caaaałkiem co innego, jakiś ważny projekt i zależności - ale tego przecież nie wiemy...

W swoim pierwszym poście podpowiedziałem jak warto posługiwać się pamięcią EEPROM no ale autor jak widać - całkowicie to .... że tak powiem ;) ma w głębokim poważaniu.

Drogi Mirku, cały czas twierdzisz, że nie rozumiesz o co mi chodzi (i tu się z Tobą zgodzę, bo przecież nie musisz), a za chwilę piszesz, że starasz się mnie od początku naprowadzić.
Może, skoro nie potrafię opisać sensownie swojego problemu, to może również nie potrafię zrozumieć Twojego wierszoklectwa? (troszeczkę ironizuję ;) )
Następnie twierdzisz, że NA PEWNO obrałem złą drogę, choć nadal nie wiesz do czego zmierzam.
To trochę tak jakbyś usiłował wytłumaczyć mi drogę, nie wiedząc dokąd chcę jechać.
Oczywiście nie twierdzę, że nie masz racji, może faktycznie nie tędy droga i trzeba pomyśleć nad innym rozwiązaniem, ale pewny tego możesz być dopiero w momencie kiedy zrozumiesz mój problem.

Mam nadzieję, że teraz będzie łatwiej zrozumieć "o co walczę".
Tym czasem zaprogramuję procesor ze zwłoką czasową, o której była mowa na początku i sprawdzę czy takie rozwiązanie będzie wystarczające.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 lis 2016, o 17:53 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 wrz 2014
Posty: 1530
Lokalizacja: Warszawa
Pomógł: 55

To ja się pogubiłem całkiem :(
Rozumiem że na na PB3 podajesz z zewnątrz sygnał PWM.
Rozumiem, że mierzysz ile czasu upływa miedzy zboczem narastającym a opadającym.
Podejmujesz decyzję - jeśli ten czas jest krótszy niż np. 3ms to coś robisz, jak dłuższy to robisz coś innego.

I teraz - czy te 3ms wynikają z pomiaru jakiegoś impulsu?

_________________
--... ...-- - --- -- . -.-



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 lis 2016, o 17:56 
Offline
Użytkownik

Dołączył(a): 25 lip 2013
Posty: 2605
Pomógł: 129

A moze by tak reagowac na drugi restart? Choc osobiście uważam że powinno się programować pewne stałe konkretnym jumperkiem lub via rs/bootloader.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 lis 2016, o 17:58 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27450
Lokalizacja: Szczecin
Pomógł: 1045

sq5rix napisał(a):
To ja się pogubiłem całkiem

A ponoć tylko ja nie rozumiem ;)

zycior napisał(a):
Drogi Mirku, cały czas twierdzisz, że nie rozumiesz o co mi chodzi (i tu się z Tobą zgodzę, bo przecież nie musisz), a za chwilę piszesz, że starasz się mnie od początku naprowadzić.
Może, skoro nie potrafię opisać sensownie swojego problemu, to może również nie potrafię zrozumieć Twojego wierszoklectwa? (troszeczkę ironizuję )

ok ok ... spokojnie już nic nie mówię ...

Z podziwu jednak wychodzę - jak można pomimo próśb również innych użytkowników którzy chcą pomóc - nie określić jasno jednego problemu

1. czy masz problem z EEPROM ? a jeśli tak to jaki?
2. czy masz problem z jakimś tam tajemniczym impulsem ? i to jeszcze impulsem co? który nadchodzi TYLKO w trakcie programowania procka ?

Dodam, żebyś za chwilę kolejnych rzeczy mi nie zarzucał - ja tego nie piszę ironicznie .... ani żeby ci dogryźć ... Rzeczywiście ani ja nie mogę cię zrozumieć ani ty mnie więc jak pisałem - znikam z wątku. Tylko ty też pomyśl - bo albo nie czytasz wszystkich postów albo nie zauważasz, że inni też nie rozumieją z czym masz problem.

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 lis 2016, o 18:19 
Offline
Użytkownik

Dołączył(a): 29 lip 2014
Posty: 195
Pomógł: 44

Witam,

Kolego zycior, wydaje mi się że naprawdę doszukujesz się problemu tam, gdzie go nie ma. Przecież masz rozwiązanie, które jest pewne i powtarzalne. Montujesz w układzie listwę GoldPin 1x2, zakładasz jumper, po restarcie układ wchodzi w tryb "kalibracji", w trakcie pracy ( jak już ten Twój PWM się ustalił) zdejmujesz ten jumper - wtedy następuje zapis do EEPROM-u i po kłopoce. Przecież założenie i zdjęcie jumpera to może ze 2 sekundy, gdzie Ty szukasz jakichś oszczędności czasowych???? Coś się zmieni, dojdziesz do wniosku, że jednak ten PWM jest inny, niż zakładałeś - powtarzasz całą procedurę.

Pozdrawiam, QuadMan.

Dopisane: teraz widzę, że w zasadzie zdublowałem to co Koledzy już wcześniej napisali.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 lis 2016, o 18:52 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 paź 2013
Posty: 1988
Lokalizacja: Lipsko
Pomógł: 125

Ja wciąż problemu nie widzę :)

Teraz jeszcze wiem, że podawany sygnał jest PWM. Skoro jest podawany cały czas na wejście to nawet przy pierwszym uruchomieniu urządzenia nie powinno mieć znaczenia utrata jednego, dwóch czy nawet trzech impulsów. Po prostu program bada (a przy okazji mierzy od razu długość trwania tego co napłynęło) czy w ciągu kilkunastu ms były zmiany stanu na wejściu i jeśli były to zapamiętuje zmierzoną wcześniej długość impulsu i po sprawie. Dalej już jak w moim poprzednim poście :)

_________________
http://www.sylwekkuna.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 lis 2016, o 19:35 
Offline
Nowy

Dołączył(a): 18 sty 2015
Posty: 7
Pomógł: 0

micky napisał(a):
A moze by tak reagowac na drugi restart? Choc osobiście uważam że powinno się programować pewne stałe konkretnym jumperkiem lub via rs/bootloader.


Właśnie przetestowałem to rozwiązanie, zapisuję dane przy 2 restarcie.
Sprawdziłem też opcję z opóźnieniem czasowym, zarówno jedna jak i druga opcja rozwiązuje "moją bolączkę", tak więc nie będę dalej ciągnął tematu, gdyż nie wiem jak to logicznie wytłumaczyć aby dla wszystkich było zrozumiałe.

mirekk36 napisał(a):
A ponoć tylko ja nie rozumiem ;)

czepiasz się :D

mirekk36 napisał(a):
ok ok ... spokojnie już nic nie mówię ...

Z podziwu jednak wychodzę - jak można pomimo próśb również innych użytkowników którzy chcą pomóc - nie określić jasno jednego problemu

1. czy masz problem z EEPROM ? a jeśli tak to jaki?
2. czy masz problem z jakimś tam tajemniczym impulsem ? i to jeszcze impulsem co? który nadchodzi TYLKO w trakcie programowania procka ?

Dodam, żebyś za chwilę kolejnych rzeczy mi nie zarzucał - ja tego nie piszę ironicznie .... ani żeby ci dogryźć ... Rzeczywiście ani ja nie mogę cię zrozumieć ani ty mnie więc jak pisałem - znikam z wątku. Tylko ty też pomyśl - bo albo nie czytasz wszystkich postów albo nie zauważasz, że inni też nie rozumieją z czym masz problem.


Mirku masz rację, ani Ty mnie ani ja Ciebie nie mogę zrozumieć. Cóż, zdarza się... może nie wiem jak przekazać swoją wizję, może pomijam rzeczy dla mnie oczywiste stąd brak zrozumienia, nie wiem, nie ważne. Nie traktuj tego jako atak na Twoją osobę.
W zasadzie dzięki BB w końcu udało mi się nieco okiełznać C, wcześniej pisałem w bascomie, później trochę arduino. Konieczność realizacji pewnych projektów na małych procesorach (attiny 10, 13) niejako zmusiły mnie do przesiadki na mniej "zasobożerne" języki. Początki C były dla mnie drogą przez mękę, aż wpadła mi w łapy Twoja książka. Oczywiście jeszcze daleka droga przede mną, ale można powiedzieć, że to co sobie wymyślę, jestem w stanie zaprogramować. Czasem to trwa, czasem spędzam na tym forum długie godziny (choć to mój pierwszy post), ale jakoś to idzie.

Wracając do tematu, choć to już nie istotne, bo problem rozwiązany... postaram się ostatni raz co nieco wyjaśnić.
1. nie mam problemu z epromem - zapisuje i odczytuje to co chce
2. nie mam tez problemu z "tajemniczymi impulsami" wiem jak i kiedy go zmierzyć i jak go przetworzyć
Zapomnijmy o wcześniejszych opowiadaniach... nie ma pamięci nie ma sygnały pwm ani tych tajemniczych impulsów.
Potrzebuję do pamięci eeprom wpisać, raz jeden jedyny, wartość pochodzącą z jakiegoś czujnika (obojętnie co to będzie, załóżmy że to będzie dana z ADC). Wpis ten ma nastąpić w trakcie pierwszego uruchomienia układu (gotowego układu, zmontowanego na pcb). I koniec kropka :)
Wiem jak odczytać tą wartość, wiem jak zapisać ją do pamięci... ale jak rozpoznać, że układ jest uruchomiony po raz pierwszy, aby właśnie w tej chwili, przy tym pierwszym uruchomieniu zapisać tę wartość?


Dziękuję wszystkim za cierpliwość i poświęcony czas.
Mam nadzieję, że następnym razem pójdzie Nam łatwiej :)

------------------------ [ Dodano po: 4 minutach ]

QuadMan napisał(a):
Witam,

Kolego zycior, wydaje mi się że naprawdę doszukujesz się problemu tam, gdzie go nie ma. Przecież masz rozwiązanie, które jest pewne i powtarzalne. Montujesz w układzie listwę GoldPin 1x2, zakładasz jumper, po restarcie układ wchodzi w tryb "kalibracji", w trakcie pracy ( jak już ten Twój PWM się ustalił) zdejmujesz ten jumper - wtedy następuje zapis do EEPROM-u i po kłopoce. Przecież założenie i zdjęcie jumpera to może ze 2 sekundy, gdzie Ty szukasz jakichś oszczędności czasowych???? Coś się zmieni, dojdziesz do wniosku, że jednak ten PWM jest inny, niż zakładałeś - powtarzasz całą procedurę.

Pozdrawiam, QuadMan.

Dopisane: teraz widzę, że w zasadzie zdublowałem to co Koledzy już wcześniej napisali.


Generalnie masz rację, jest tylko jedno (a może 2) ale... nie mam miejsca na zamontowanie jumpera (układ wchodzi "na styk" do konkretnej maszyny), poza tym wiązało by to się z zaprojektowaniem i zrobieniem nowych płytek... a "starych" leży przeszło 200.

------------------------ [ Dodano po: 8 minutach ]

SylwekK napisał(a):
Ja wciąż problemu nie widzę :)

Teraz jeszcze wiem, że podawany sygnał jest PWM. Skoro jest podawany cały czas na wejście to nawet przy pierwszym uruchomieniu urządzenia nie powinno mieć znaczenia utrata jednego, dwóch czy nawet trzech impulsów. Po prostu program bada (a przy okazji mierzy od razu długość trwania tego co napłynęło) czy w ciągu kilkunastu ms były zmiany stanu na wejściu i jeśli były to zapamiętuje zmierzoną wcześniej długość impulsu i po sprawie. Dalej już jak w moim poprzednim poście :)


To fakt, właśnie o tym nie pomyślałem, sprawdzić czy następuje zmiana stanów na wejściu, w określonym czasie, krótko mówiąc czy pwm jest na wejściu czy go nie ma.

Raz jeszcze wszystkim dziękuję i pozdrawiam.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 lis 2016, o 19:47 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 paź 2013
Posty: 1988
Lokalizacja: Lipsko
Pomógł: 125

No to tak na koniec dorzucę jeszcze jedno :lol:
zycior napisał(a):
ale jak rozpoznać, że układ jest uruchomiony po raz pierwszy, aby właśnie w tej chwili, przy tym pierwszym uruchomieniu zapisać tę wartość?

...bardzo prosto 8-) Wykorzystaj drugą komórkę EEPROM. Po zaprogramowaniu (czyli tym pierwszym uruchomieniu wsadu) wyzeruj wspomnianą drugą komórkę, ba...(!) - nawet tą samą! Wpisz tam po prostu zero (długość impulsu nie może trwać przecież zero czegoś więc nie będzie to miało znaczenia... :) ) i przy kolejnym uruchomieniu sprawdź czy jest ...zero, jeśli tak to zapisz w jego miejsce długość impulsu :)
Rozwiązań problemu zawsze jest dużo tylko podstawą jest jasne określenie warunków pracy.

_________________
http://www.sylwekkuna.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 lis 2016, o 20:30 
Offline
Nowy

Dołączył(a): 18 sty 2015
Posty: 7
Pomógł: 0

SylwekK napisał(a):
No to tak na koniec dorzucę jeszcze jedno :lol:
zycior napisał(a):
ale jak rozpoznać, że układ jest uruchomiony po raz pierwszy, aby właśnie w tej chwili, przy tym pierwszym uruchomieniu zapisać tę wartość?

...bardzo prosto 8-) Wykorzystaj drugą komórkę EEPROM. Po zaprogramowaniu (czyli tym pierwszym uruchomieniu wsadu) wyzeruj wspomnianą drugą komórkę, ba...(!) - nawet tą samą! Wpisz tam po prostu zero (długość impulsu nie może trwać przecież zero czegoś więc nie będzie to miało znaczenia... :) ) i przy kolejnym uruchomieniu sprawdź czy jest ...zero, jeśli tak to zapisz w jego miejsce długość impulsu :)
Rozwiązań problemu zawsze jest dużo tylko podstawą jest jasne określenie warunków pracy.


Dopadła mnie jakaś niemoc twórcza :D



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

Dołączył(a): 26 sty 2016
Posty: 1188
Lokalizacja: Kraków
Pomógł: 95

Może trochę puźno, ale możesz np. w układzie, w którym programujesz, zewrzeć jeden z wolnych wyprowadzeń do masy, a w programie ustawić ten pin jako wejście z podciągnięciem wewnętrznym do Vcc.
I jako jeden z warunków sprawdzasz, co masz na tym pinie. Jeżeli 0, to nie zapisujesz do EEPROM. Jeżeli 1, zapisujesz długość trwania impulsu.
Zrozumiałem, że jednego wyprowadzenia nie używasz w programie (warunek zapisu do EEPROM po zwarciu wejścia do masy). Więc możesz go użyć



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: 27 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

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


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