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



Teraz jest 22 sty 2026, o 07:44


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 25 ] 
Autor Wiadomość
 Tytuł: 1WIRE + ATMEGA8
PostNapisane: 13 paź 2013, o 17:13 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 wrz 2013
Posty: 33
Lokalizacja: Lubartów
Pomógł: 0

Witam

Mam problem z uruchomieniem 1wire na Atmega8, siedzę już dłuższy czas i nie mogę dojść. Wgrywam program Mirka który kiedyś odpalałem na zestawie ATB i chodził a teraz lipa. Non stop mi wyświetla error czujników.

Co zrobiłem i sprawdziłem:
1. Zasilenie czujników ds18b20 i połączenie z prockiem - sprawne 100%, magistrala 3 przewodowa +/-/dane z podciągniętym rezystorem 4,7kohm do vcc
2. Sprawdziłem w onewire.h porty - zgodne z moim podłączeniem PD5
3. Podłączałem drugi czujnik - może uszkodzony ale to samo
4. Zmieniałem konfiguracje timera bo mirka program byl na Atmega32 i 11Mhz - ale to działa raczej dobrze bo zrobiłem zwiększanie o 1 i wyświetlanie na lcd i dodawało mi co 1s

Nie wiem, może jakiś mały szczegół ominąłem, może któryś z kolegów by świeżym okiem rzucił, poniżej kody źródłowe. Jak by coś trzeba więcej to podeśle...
Atmega działa prawidłowo wyświetla itd.., do czujnika mam podpięte +5v i GNd a linie danych do PD5, jak trzeba narysuje schemat ale chyba wszystko jasne


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


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




Zmieniłem linie danych 1wire z PD7 na PC4 i wyświetla temperaturę ale tylko na początku po chwili wyskakuje cyfra wykrytych czujników i zamiast tempratury error

_________________
Pozdrawiam
t0mek
gg: 2275292



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 paź 2013, o 22:13 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 wrz 2013
Posty: 33
Lokalizacja: Lubartów
Pomógł: 0

Siadłem do noty atmega8 i znalazłem błędnie skonfigurowany timer... poprawiłem i wszystko działa.

_________________
Pozdrawiam
t0mek
gg: 2275292



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 paź 2013, o 22:17 
Offline
Moderator
Avatar użytkownika

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

a już miałem pisać ;) że trzeba sobie takie coś testować panie kochany - testować

masz jakąś diodę LED pod ręką ? chyba masz

to co za kłopot ją podłączyć i np zmieniać jej stan w każdym z IFów - już oczami byś widział czy ci timer działa czy nie - czy dobrze czy nie

zapamiętaj sobie ten sposób

DEBUGER na jednej diodzie LED

_________________
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: 13 paź 2013, o 22:23 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 wrz 2013
Posty: 33
Lokalizacja: Lubartów
Pomógł: 0

dziwne tylko, bo zamiast diody wyświetlałem sekundy na lcd i wszystko grało! Leciały jak w zegarku.

_________________
Pozdrawiam
t0mek
gg: 2275292



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 sty 2014, o 20:35 
Offline
Użytkownik

Dołączył(a): 12 mar 2012
Posty: 38
Pomógł: 0

Mi po kompilacji programu z książki wyświetla dużo errorów , próbuje właśnie "przełożyć" program na Atmega 8 na zewnętrznym kwarcu 8 Mhz

Obrazek

Później podmieniłem wpisy tam gdzie wskazywało błędy na fragmenty z zawartego programu w poście

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


oraz

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


Po kompilacji nie ma już błędów , wyświetlacz wyświetla T1 85 C a T2 error podłączyłem tylko 1 czujnik 1 Wire a zadeklarowałem 2

Jak ustawić ten timer na kwarc 8 Mhz lub na ten kwarc 11... żeby czujnik prawidłowo działał a nie wyświetlało 85 C

Gdzie zmienić "odświeżanie" wyniku ? Chodzi mi o to aby pomiar dokonywany był np co 5 s

pozdrawiam



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 sty 2014, o 20:41 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

Timer0 w atmedze 8 jest okrojony więc słusznie zmieniłeś na timer2.
Błędny pomiar może wynikać z tego, że odczytujesz wynik zanim skończy się konwersja temperatury.
Aby ustawić timer dzielisz częstotliwość taktowania przez preskaler i przez częstotliwość z jaką mają pojawiać się przerwania(100Hz w tym przykładzie), czyli dzielisz 8000000/1024/100 = 78 odejmujesz jeszcze 1, bo timer liczy od 0 i należy wpisać wartość 77 (<255 czyli OK) i ustawić preskaler na 1024. Żeby zmienić odświeżanie w trzech miejscach zmień sobie sekundy%3 na sekundy%5

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 sty 2014, o 23:13 
Offline
Użytkownik

Dołączył(a): 12 mar 2012
Posty: 38
Pomógł: 0

Zanim napisałeś posta przeczytałem troszkę jeszcze o 1wire (czas konwersji) i zacząłem dalej kombinować w programie zmieniłem wpis OCR2 = 156 na OCR2 = 200 i zaczął czujnik działać tylko nie byłem pewien czy dobry wynik podaje ale w pokoju miałem 23 stopnie jak ścisnąłem czujnik w palcach wyszło jakieś 31 stopni powinno być dobrze . Nie do końca rozumiem skąd wzięło się 1024 i 100 Hz ? Ja mam preskaler 256 hm czyli mamy 8000000/256/100 = ~~ 311 hm ? Która wartość odpowiada za przerwanie do tego by ustawić odpowiedni czas konwersji dla 1wire ?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 sty 2014, o 23:43 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

cocaine2012 napisał(a):
Nie do końca rozumiem skąd wzięło się 1024 i 100 Hz ?

Na końcu jest funkcja przerwania, która w zamyśle ma być uruchamiana co 10ms (z częstotliwością 100Hz) wtedy zmienna sekundy zmienia się dokładnie co sekundę. Jak inaczej ustawisz timer to będzie się zmieniać co inny okres czasu.
cocaine2012 napisał(a):
Ja mam preskaler 256 hm czyli mamy 8000000/256/100 = ~~ 311 hm ?

To preskaler jest za mały i nie możesz ustawić 100Hz. A licząc od drugiej strony jak wpisałeś 200 przy preskalerze 256 to wychodzi częstotliwość 8000000/256/(200+1) = 155Hz. Czyli sekunda u ciebie zmienia się co 0,6432s.
cocaine2012 napisał(a):
Która wartość odpowiada za przerwanie do tego by ustawić odpowiedni czas konwersji dla 1wire ?

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

I w twoim przypadku co 3*0,6432s masz wysłany rozkaz, a za 0,6432s odczytujesz wynik pomiaru (teoretycznie to trochę mało bo wynik jest gotowy po 750ms, ale to zależy jaka dokładność nas interesuje)

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 9 sty 2014, o 23:28 
Offline
Użytkownik

Dołączył(a): 12 mar 2012
Posty: 38
Pomógł: 0

Przejrzałem to jeszcze raz wszystko teraz już rozumiem . Autor użył chyba celowo kwarcu 11 0592 żeby łatwiej było obliczyć 100 Hz a rejestr OCR2 służy do dodatkowego podziału.
Dopasuje sobie wartości preskalera i OCR2 żeby wartość czasu odczytywania z DS18B20 była powyżej 0,8 s zależy mi na dokładności .

Mam takie jeszcze pytanie Timer 2 to w atmedze 8 timer 16 bitowy . Ostatnio rozebrałem drukarkę i znalazłem tam silniczek z tarczą w paski i wokół niej fotoelementy . Szukałem w książce coś na temat tego jak użyć licznik po prostu do zliczania impulsów (licznik zdarzeń) ? Chciałem zmierzyć ilość obrotów silnika na minutę lub ilość innych zdarzeń jakiś impulsów itp.

Ps. Mam tez problem z PWM sprzętowym w atmedze 8 topic839.html

dziękuje pozdrawiam



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 9 sty 2014, o 23:41 
Offline
Moderator
Avatar użytkownika

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

cocaine2012 napisał(a):
Przejrzałem to jeszcze raz wszystko teraz już rozumiem . Autor użył chyba celowo kwarcu 11 0592 żeby łatwiej było obliczyć 100 Hz a rejestr OCR2 służy do dodatkowego podziału


Ło Matko ;) a toś pan fajny wniosek wyciągnął tylko że troszkę z kosmosu ;) bo co za różnica jaki kwarc / taktowanie ?

tzn że przy 8MHz albo przy 16MHz albo przy 20MHz czy innej częstotliwości nie da się obliczyć 100 Hz ? ;) ... oj oj ... proszę poczytać dokładniej książkę (Bluebooka) a SZCZEGÓLNIE rozdział o multipleksowaniu LED - tak często pomijany przez czytelników - głównie ze względu na to że wydaje im się jakobym ja namawiał kogoś na używanie po wsze czasy takiego wyświetlacza .... Panie drogi - w tym rozdziale akurat przekazuję sporo ważnych rzeczy na temat programowania w C a szczególnie o timerach i gdybyś go przeczytał to nigdy byś do takiego dziwnego wniosku nie doszedł a za to potrafiłbyś z dowolnej częstotliwości zrobić sobie 100 Hz - o proszę ;)

8 MHz / 1024 (prescaler) / 100 Hz = 78 (wartość OCRx)

16 MHz / 1024 (prescaler) / 100 Hz = 156 (wartość OCRx)

20 MHz / 1024 (prescaler) / 100 Hz = 195 (wartość OCRx)

i co nie da się ? ;) ... przecież przez całą książkę pokazuję jak korzystać z dobrodziejstw możliwości dowolnej zmiany taktowania

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

cocaine2012 napisał(a):
Mam takie jeszcze pytanie Timer 2 to w atmedze 8 timer 16 bitowy


posłuchaj - a może jednak WARTO zajrzeć do noty PDF tak starego już procka jak Babcia ATmega8 ? ;) .... bo coś mi się wydaje, że mijasz się z prawdą - jak to lubią mówić politycy :lol:

------------------------ [ Dodano po: 6 minutach ]

cocaine2012 napisał(a):
Szukałem w książce coś na temat tego jak użyć licznik po prostu do zliczania impulsów (licznik zdarzeń) ?


Nie znajdziesz książki w której ktoś opisze ci jak zrobić licznik na taśmie którą ty akurat sobie wykręciłeś z jakiejś drukarki ;) nie tędy droga - i nie po to są książki ...

ale jakbyś poczytał ją na prawdę chociaż RAZ - JEDEN RAZ w całości to gwarantuję ci że zobaczyłbyś opisane mechanizmy - które z powodzeniem można do tego zastosować - chociażby obsługa RC5 i możliwość obsługi przerwania ICP ....

no ale jak się czyta książkę na wyrywki albo szukając w niej rozdziałów o liczniku na twoim pasku z drukarki - to nie dziw się - że ciężko idzie :(

cocaine2012 napisał(a):
Ps. Mam tez problem z PWM sprzętowym w atmedze 8 topic839.html


no ładnie - tam prosisz o poprawny kod na forum - a rozumiem, że mi się tylko wydawało że poprawny kod na sprzętową obsługę PWM umieściłem w książce tak ? ;)

na prawdę bez żadnej ironii i podśmiewania się - polecam - weź ty usiądź na spokojnie i przeczytaj tą książkę od deski do deski JEDEN raz - to nie boli - a zobaczysz ile pomysłów ci potem przyjdzie do głowy nie mówiąc już ile rzeczy ci się w tej głowie wyjaśni ok?

a jak będziesz miał jakieś pytania bo czegoś nie będziesz rozumiał to wtedy śmiało pisz

_________________
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: 16 mar 2014, o 17:13 
Offline
Użytkownik

Dołączył(a): 22 lut 2014
Posty: 52
Pomógł: 0

Witam.

Też borykam się z problemem jak moim przedmówcy. Próbuję przerobić program Pana Mirka na Atmege8. W zasadzie to zmieniłem tylko co opisywane było powyżej.

main.c
Kod:
int main(void) {
   /* ustawienie TIMER0 */
   TCCR2 |= (1<<WGM21);            // tryb CTC
   TCCR2 |= (1<<CS21) | (1<<CS22);     //prescaler = 256
   OCR2 = 156;                     // dodatkowy podział przez 156 (rej. przepełnienia) */
   TIMSK |= (1<<OCIE2);            // zezwolenie na przerwanie CompareMatch */


onewire.h
Kod:
/* Wybór PINu oraz PORTu na magistralę 1Wire */
#define OW_PIN  PD1
#define OW_IN   PIND
#define OW_OUT  PORTD
#define OW_DDR  DDRD


Pozostały kod pozostawiłem bez zmian. Nie wiem czy mam jeszcze coś zmienić?
Nie wiem co z tymi fragmentami kodu:
Kod:
/* czekamy 750ms na dokonanie konwersji przez podłączone czujniki */
   _delay_ms(750);

Kod:
if(++cnt>99) {   /* gdy licznik ms > 99 (minęła 1 sekunda) */


Mam Atmege8 z kwarcem wewnętrznym ustawiony na 1Mhz.
Po dokonaniu zmian jakie opisałem powyżej czujnik działa i wydaje się pokazywać dość realną temperaturę. Problem pojawia się gdy chce podłączyć dwa czujniki. Jeden czujnik czyta zawsze przy drugim zawsze jest error. Obydwa czujniki są na pewno sprawne. Czy jeśli dołączam drugi czujnik muszę zastosować do niego rezystor 4.7k? Przy podłączeniu kolejnych czujników każdy musi mieć rezystor? Co może być przyczyną nie wyświetlania drugiej temperatury?

_________________
www.electrobot.pl



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 mar 2014, o 18:09 
Offline
Użytkownik

Dołączył(a): 01 lut 2013
Posty: 28
Lokalizacja: okolice Koszalina
Pomógł: 1

Jeśli chcesz uzyskać przerwanie co 10ms (100Hz), to OCR2 musisz dać 38
mirekk36 napisał(a):
8 MHz / 1024 (prescaler) / 100 Hz = 78 (wartość OCRx)

16 MHz / 1024 (prescaler) / 100 Hz = 156 (wartość OCRx)

20 MHz / 1024 (prescaler) / 100 Hz = 195 (wartość OCRx)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 mar 2014, o 08:18 
Offline
Nowy

Dołączył(a): 19 lut 2014
Posty: 3
Pomógł: 0

Witam serdecznie, jestem tu nowy i początkujący, mam nadzieje że nie popełniam żadnej zbrodni ;) Chciałbym się podpiąć do tematu tylko z trochę inna kwestią. Korzystam z bibliotek Mirka, wszystko mi ładnie działa. Chce dokonywać sterowania przekaźniczkami za pomocą temperatury czytanej z dsa i tu zaczynają sie schody. Zaglądałem do bluebooka i jeżeli wszystko dobrze zrozumiałem to jedno-bajtowa zmienna cel przetrzymuje dziesiętna część temp. która jest wyświetlana na LCD po konwersji liczby całk. na string. Próbuję za pomocą prostej instrukcji warunkowej if ( cel > 30) PK1_ON; ustawić stan wysoki na jednym z portów aby zadziałał przekaźnik,jednak powyżej temperatury 30c nic sie nie dzieje. Bardzo proszę chociaż o jakąś podpowiedź ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 mar 2014, o 09:24 
Offline
Moderator
Avatar użytkownika

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

ramad napisał(a):
mam nadzieje że nie popełniam żadnej zbrodni Chciałbym się podpiąć do tematu tylko z trochę inna kwestią.


no zbrodni nie - ale zobacz sam - zdecydowanie przydałoby się założyć nowy wątek bo to całkiem inne pytanie, więc na przyszłość proszę pamiętaj o tym ok ?

ramad napisał(a):
Próbuję za pomocą prostej instrukcji warunkowej if ( cel > 30) PK1_ON; ustawić stan wysoki na jednym z portów aby zadziałał przekaźnik,jednak powyżej temperatury 30c nic sie nie dzieje. Bardzo proszę chociaż o jakąś podpowiedź


No ale sam to przeczytaj i teraz pomyśl - ja ale pewnie inni też chcieliby pomóc - tylko jak ? :( przecież nie pokazujesz ANI kawałka swojego programu, ani schematu - a może masz coś źle podłączone w stosunku do programu ...

no jak mówię pomyśl sam - jak można odpowiedzieć na tak zadane pytanie ok?

więc je uzupełnij przede wszystkim

_________________
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: 17 mar 2014, o 15:41 
Offline
Użytkownik

Dołączył(a): 22 lut 2014
Posty: 52
Pomógł: 0

Kombinowałem z częstotliwościami, próbowałem na zewnętrznym kwarcu 8Mhz, wydaje mi się, że dobrze dobierałem wartości OCR2. Działa spoko ale na jednym czujniku. Drugiego nie chce wyczytać. Sprawdzałem jeszcze raz oba czujniki i są dobre, pokazują taka samą temperaturę. Tylko problem bo nie chcą działać obydwa na raz... Podłączałem to na płytce stykowej na parę sposobów i nic. Nie wiem dalej jak jest poprawnie, czy mam przed każdym czujnikiem dawać rezystor 4.7 czy wystarczy tylko przy jednym. Ma ktoś jakiś pomysł co może być nie tak?

VCC - czerwony; GND - czarny; DQ - biały
Obrazek


Układ już działa. Dziękuje za pomoc!

_________________
www.electrobot.pl



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 wrz 2014, o 12:25 
Offline
Użytkownik

Dołączył(a): 22 lut 2014
Posty: 52
Pomógł: 0

Witam.

Mam jeszcze jeden problem z czujnikiem DS18B20, a dokładnie to z wyświetlaniem temperatur odczytanych przez niego. Sprawa pewnie prosta ale jakoś nie mogę wpaść na rozwiązanie tego problemu. W kodzie od Pana Mirka wyświetla T1 i T2, a pod spodem temperatury. T1 i T2 są w jednej linii i pod nimi wartości temperatur też w jeden linii obok siebie. Ja chciałbym aby temperatury wyświetlały się jedna pod drugą. W pierwszej linii jedna temperatura, pod spodem następna... Tylko nie wiem jak to zrobić ponieważ void display_temp(uint8_t x) robi mi trochę zamieszania i nie wiem jak to zmodifikować...

U Pana Mirka to wygląda tak, ale tutaj jest na sztywno określone, że wszystkie temperatury mają się wyświetlać w drugiej linii. Ja chciałbym żeby temperatury wyświetlały się pod sobą czyli parametr y nie może być sztywny...

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

_________________
www.electrobot.pl



Ostatnio edytowano 10 wrz 2014, o 16:43 przez mateusz_dan, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 wrz 2014, o 17:04 
Offline
Użytkownik

Dołączył(a): 01 lut 2013
Posty: 28
Lokalizacja: okolice Koszalina
Pomógł: 1

Przykład:
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: 16 wrz 2014, o 14:28 
Offline
Użytkownik

Dołączył(a): 22 lut 2014
Posty: 52
Pomógł: 0

Ponownie muszę wrócić do tego tematu... Eh... Czujnik działał pięknie, wszystko było OK, zacząłem wprowadzać zmiany związane z wyświetlaniem temperatury na LCD i zmiany w podłączeniu. Testowałem tryb normal i parasite. Nie wiem dlaczego ale czujnik nie chce nic pokazywać... Nie wiem gdzie szukać problemu? Podmieniłem czujnik na inny, zmieniłem przewody połączeniowe, wgrałem nowy kod i nic... Nie wykrywa mi czujnika... Cały czas na wyświetlaczu pokazuje error. Czy ktoś ma jakiś pomysł co mogę sprawdzić?


Problem rozwiązany. Źle ustawiłem fuse bity...

_________________
www.electrobot.pl



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 maja 2015, o 20:52 
Offline
Użytkownik

Dołączył(a): 09 mar 2015
Posty: 31
Pomógł: 0

Mam Atmega8 domyślnie ustawioną na 1MHz i przy ustawieniu
Kod:
     
TCCR2 |= (1<<WGM21);
TCCR2 |= (1<<CS22)|(1<<CS21)|(1<<CS20);
OCR2 = 8;
TIMSK |= (1<<OCIE2);


Pierwszy odczyt
Kod:
if( DS18X20_OK == DS18X20_read_meas(gSensorIDs[0], &subzero, &cel, &cel_fract_bits) ) display_temp(11);

jeszcze przed pętlą while(1) pojawia się odrazu
kolejne odczyty z kodu
Kod:
           if(s1_flag) {   
              if( 0 == (sekundy%3) ) czujniki_cnt = search_sensors();
              if( 1 == (sekundy%3) ) DS18X20_start_meas( DS18X20_POWER_EXTERN, NULL );
              if( 2 == (sekundy%3) ) {
                 if( DS18X20_OK == DS18X20_read_meas(gSensorIDs[0], &subzero, &cel, &cel_fract_bits) ) display_temp(10);
                 }                 
              s1_flag=0;
           }


pojawiają się: pierwszy po około 1-2s a każde kolejne po około 50s.
Chciał bym uzyskać odczyt jak najczęściej. Jak mam to ustawić ?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 maja 2015, o 06:36 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 17 sie 2013
Posty: 3797
Lokalizacja: Grudziądz
Pomógł: 143

S1_flag odpowiada za start odczytu a zmienna sekunda odczytuje w 3 krokach. Na moje sie nie da gdyż ok 750 ms trwa odczyt z tego co pamiętam.

Namazane ze smarta.

_________________
Usługi druku przestrzennego - www.drumik.pl



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 gru 2016, o 18:54 
Offline
Nowy
Avatar użytkownika

Dołączył(a): 07 cze 2014
Posty: 6
Pomógł: 0

Witam,

Odkopię stary temat ponieważ nie chcę zakładać nowego.
Korzystam z biblioteki 1wire z bluebook, która wyżej była przedstawiana. Mam z nią dziwny problem na Atmega8. Wszystko działa jak należy przy taktowaniu 8Mhz z wewnętrznego oscylatora. Jednak gdy zmniejszam (4, 2, 1Mhz) częstotliwość, czujnik nie odpowiada. Oczywiście zmieniam odpowiednio timer dla każdej częstotliwości. Dołożyłem dodatkową zmienną, która zmienia się co sekundę na wyświetlaczu, aby mieć pewność, że zliczanie jest ok. Fuse bity i FCPU w programie też odpowiednio są ustawiane. Dodam, że korzystam z Eclipse w wersji Kepler.

Spotkał się ktoś z podobnym problemem ?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 gru 2016, o 19:11 
Offline
Użytkownik

Dołączył(a): 26 lut 2014
Posty: 288
Lokalizacja: Gdańsk
Pomógł: 13

Polecam mimo wszystko założyć swój temat, wstaw zmienione fragmenty kodu (twoje zmiany)...
Możesz sprawdzić debugerem na led, może coś wyjdzie



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 gru 2016, o 17:02 
Offline
Nowy
Avatar użytkownika

Dołączył(a): 07 cze 2014
Posty: 6
Pomógł: 0

Udało się rozwiązać problem. W ruch poszedł nawet oscyloskop ;). Kłopoty stwarzał Eclipse. Z jakiegoś powodu zmiana zegara w projekcie nie miała żadnego wpływu na program. Kompilator ciągle widział 8MHz. Eclipse Gadget widział taką wartość jak ustawiałem w projekcie,także też kłamał. Dopiero stworzenie nowego projektu pomogło. Może to wina, że używam wersji Kepler ? Nie mniej bardzo irytujący problem. To co bierze się za pewnik, niestety zawodzi. Na szczęście już jestem do tego przyzwyczajony, po codziennym obcowaniu z elektroniką :P



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 gru 2016, o 17:06 
Offline
Moderator
Avatar użytkownika

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

Cyklonus napisał(a):
To co bierze się za pewnik,

Nic się nie bierze za pewnik - tylko ZAWSZE - ale to ZAWSZE zagląda się do okienka CONSOLE po kompilacji i nie ma siły - tam ZAWSZE ZOBACZYSZ z jakim taktowaniem jest ustawiony projekt tzn z jakim się kompiluje

bo owszem takie zaciachy się czasem zdarzają gdy się uszkodzi workspace i ja szczególnie miałem z tym do czynienia w keplerze ... Mnie na dzisiaj najlepiej pasuje Eclipse MARS

poza tym - gdy masz jakiś problem to ZAWSZE możesz skorzystać do testów chociażby z tego lekkiego i zwinnego programiku ;) MkCLIPSE

topic16986.html

sprawdź sam i zobacz ;)

_________________
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: 12 gru 2016, o 17:15 
Offline
Nowy
Avatar użytkownika

Dołączył(a): 07 cze 2014
Posty: 6
Pomógł: 0

CONSOLE też pokazywał 1MHz, tam zawsze zaglądam. Oscyloskop niestety był innego zdania.

Dzięki za rady. Muszę wypróbować.

Też mam Eclipse Mars wypakowany, ale jakoś nie używam :P. Po tych problemach odpaliłem Eclipse Neon i działa. Ale może jednak przesiądę się na mars skoro przetestowany w boju ;)



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

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 3 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