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



Teraz jest 30 lis 2024, o 00:35


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 15 ] 
Autor Wiadomość
 Tytuł: 1 Wire + SEG
PostNapisane: 9 sty 2016, o 19:38 
Offline
Użytkownik

Dołączył(a): 08 kwi 2014
Posty: 30
Pomógł: 0

Mam taki problem. W ramach ćwiczeń chciałem sobie wyświetlić temperaturę z czujnika ds18b20 jednocześnie na Wyśw Segmentowym oraz LCD.(dodam, że oddzielnie oba programy działają jak należy - dowolnie wybrane cyferki na Seg sie zapalają i 1-wire pięknie pokazuje temeperaturę.

Na początek chciałem, żeby na Seg zapalała się cyfra a temp pokazywała na LCD - wyświetleniem temp na SEG zajmę się później....

Żeby nie obciążać procedury przerwania, rozdzieliłem sobie dwie biblioteki , do dwóch timerów (0,2).
Wyświetlacz działa, na czujnikach errory...Domyślam się, że coś tam się dzieję nie tak z czasem pobrania temperatury i pewnie jest to jakiś prosty błąd, ale może za długo nad tym siedzę i nie widzę gdzie.

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


Procesor Atmega32 Wewn 1Mhz (OCR0 i OCR2 skonfigurowane dla 200 i 100 Hz - samodzielnie działają dobrze)

Pomożecie ?:)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 9 sty 2016, o 20:01 
Offline
Użytkownik

Dołączył(a): 24 sty 2012
Posty: 1469
Pomógł: 56

Po
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
wstaw sobie miganie diodą i zobacz jak szybko miga

_________________
Jestem początkujący i moje porady mogą być błędne



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 9 sty 2016, o 21:20 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 mar 2014
Posty: 1475
Pomógł: 167

Czy także error pojawia się przy starcie programu, czyli przed włączeniem przerwań i wejściem do pętli while (1)?

--
Pozdrawiam,
Robert

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

Cytuj:
Mnie bardziej zastanawia dlaczego kolega ma wartości do wyświetlacza zapisane w pamięci FLASH przez co w przerwaniu od multipleksowania trzeba korzystać z funkcji pgm_read() - nie warto oszczędzać tych 10 bajtów pamięci RAM kosztem takiego czegoś. Nawet sprawdziłem w BB i jest tam z ramu pobierane.

Korzystanie z pamięci flash jest wykonywane jedną instrukcją asemblera LPM, więc nie jest wcale znacznie dłuższe od korzystania z RAMu. Aby mieć to w RAMie to i tak musi znaleźć się w flashu i dodatkowo być załadowane potem do RAMu.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 9 sty 2016, o 22:29 
Offline
Użytkownik
Avatar użytkownika

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

Witam
"Twoja" sekunda trwa 0.82s czasu ziemskiego.

Pozdr.



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

Dołączył(a): 08 kwi 2014
Posty: 30
Pomógł: 0

[quote="rskup"]Czy także error pojawia się przy starcie programu, czyli przed włączeniem przerwań i wejściem do pętli while (1)?

Po starcie programu temperatura wyświetla się i po chwili pojawiają się errory...

To dlaczego samodzielnie program śmiga dla wartości OCR2=9, a połączone razem już nie....gdzie ten błąd?


Podłączyłem LEDa i ładnie mruga co 1 sekundę.....



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 sty 2016, o 13:24 
Offline
Użytkownik

Dołączył(a): 08 kwi 2014
Posty: 30
Pomógł: 0

kicajek napisał(a):
Witam
"Twoja" sekunda trwa 0.82s czasu ziemskiego.

Pozdr.



Według MkAvrCalculator Timer2 - 1Mhz - 100Hz - tryb CTC Prescaler 1024 - OCR2 = 8


!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
DZIAŁA......coś mnie tknęło, żeby zmienić pin odpowiadający za czujniki na inny niż port gdzie podłączone są anody wyświetlaczy i zadziałało......

Czyli wychodzi, że coś nie tak z maskowaniem portu Anod....chyba, że były jakieś erraty nowsze (mam BB wyd IIpopr i uzup)???

------------------------ [ Dodano po: 48 minutach ]

Mam jeszcze jeden mały problem.

cy1 = (subzero == 1 ? 21 : 22); /* jeżli subzero==1 wyświetla znak minus (21) (temp. ujemna), gdy inaczej puste miejsce (22) */
cy2 = (cel < 10 ? 22 : cel/10); /* jeżeli temp<10 stopni to puste miejsce (22), gdy inaczej dziesiątki temperatury */
cy3 = ((cel) % 10) + 10; // jedności temperatury (cy2 z kropką)
cy4 = (cel_fract_bits); // część dziesiętna stopnia
[/syntax]

Pierwsza i trzecia cyfra pokazują dobrze. Problem jest z drugą (pewnie coś nie tak z kropką)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 sty 2016, o 22:50 
Offline
Użytkownik

Dołączył(a): 08 kwi 2014
Posty: 30
Pomógł: 0

Żeby nie zakładać nowego tematy, napiszę tutaj.

Stworzyłem sobie wyświetlacz 7seg za pomocą rejestrów przesuwnych 74hc595. Wyświetla pięknie wszystkie cyferki. Nie mogę natomiast poradzić sobie z wygaszeniem wyświetlacza....próbowałem na różne sposoby i nie wiem.

Dodam, że jeżeli zakomentuje przerwanie i wyślę komendę
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

, to wyświetlacz gaśnie.

Pomoże ktoś?? :) Pozdrawiam.

Wrzucam kod
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 sty 2016, o 00:55 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 29 sty 2012
Posty: 777
Lokalizacja: Karpicko k. Wolsztyna
Pomógł: 197

W tablicy segment[] ostatnia komórka ma wartość 0xff. Wystarczy tą wartość wysłać na piny segmentów żeby je zgasić.
Wpisz wartość 10 do zmiennych cy1-cy4 jeśli chcesz wszystkie wygasić. Wtedy w przerwaniu wartość 0xff zostanie wysłana na piny segmentów.


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 sty 2016, o 12:57 
Offline
Użytkownik

Dołączył(a): 08 kwi 2014
Posty: 30
Pomógł: 0

Forumowicze, mam jeszcze jeden ostatni problem.....

Po podłączeniu 1-Wire oraz wyświetlacza 7-seg przez 2 rejestry 74HC595 (jeden do segemntów,drugi anody przez tranzystory) oraz połączeniu dwóch programów, temperatura wyświetla się na 3 wyświetlaczach. Tyle, że na 1 pierwszym wyświetlaczu (tam gdzie powinien zapalać się minus, lub nic) pojawiają się krzaki. Problem mam też, z kropką na 3 wyświetlaczu. O ile przy połączeniu tranzystorów sterujących anodami wyświetlacza do pinów mikrokontrolera wystarczyło umieścić w przerwaniu taką linijkę
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

(PA7 to kropka), tak przy wysyłaniu przez SPI nie wiem jak wysłać te dodatkowe bity....

Domyślam się natomiast, że problem z pierwszym wyświetlaczem może być tutaj:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


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


Przyznaje się bez bicia, że taki sposób znalazłem gdzieś na forum, ale skoro do poprzednich ćwiczeń działało bezbłędnie, więc bałem się tego zapisu ruszać....

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


Pomoże ktoś??



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 sty 2016, o 19:27 
Offline
Użytkownik

Dołączył(a): 08 kwi 2014
Posty: 30
Pomógł: 0

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


...,pozostał temat wyświetlenia kropki na 3 wyśw.

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


pomocy ;)



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

Dołączył(a): 29 sty 2012
Posty: 777
Lokalizacja: Karpicko k. Wolsztyna
Pomógł: 197

Jeśli chcesz wyświetlić kropkę tylko na 3 wyświetlaczu to spróbuj zrobić tak
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Jeśli kropka miałby być wyświetlana na dowolnym wyświetlaczu to trzeba by zrobić np. tak jak opisałem w tym temacie topic7744.html?hilit=Kropka%20na%20wy%C5%9Bwietlaczu#p87600


Autor postu otrzymał pochwałę


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

Dołączył(a): 11 mar 2014
Posty: 1475
Pomógł: 167

Kropkę musisz dodać w momencie wystawiania cyfry w przerwaniu TIMER0_COMP (dla licznik == 2).

--
Pozdrawiam,
Robert

------------------------ [ Dodano po: 5 minutach ]

O nie byłem pierwszy :(

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

więc warto z tego skorzystać z tej definicji i dać pobierania z segment
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


--
Pozdrawiam,
Robert


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 31 sty 2016, o 13:02 
Offline
Użytkownik

Dołączył(a): 08 kwi 2014
Posty: 30
Pomógł: 0

Witam ponownie....

Testując sobie dalej 1 Wire, pomyślałem, że zrobię dwa DS18b20, które wyświetlane są na jednym wyświetlaczu 7-seg. Wyświetlanie temp zmieniałbym za pomocą przycisku.

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


Działa w takim stopniu: temperatura się wyświetla i jeżeli nacisnę przycisk to wyświetla się minus.

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

zamiast tego minusa i już nie działa....
Próbowałem różne kombinacje i już zaczynam się zniechęcać....

Czy ten sposób jest w ogóle prawidłowy, czy trzeba jakiś inny wykombinować?
Próbował ktoś robić coś podobnego?Podrzucicie jakieś metody?
Pomożecie? :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 31 sty 2016, o 13:57 
Offline
Użytkownik

Dołączył(a): 10 lip 2015
Posty: 334
Pomógł: 32

Może przedstaw, co napisałeś w programie.
Napisz, co to oznacza, że nie działa.
Zmienne cel itp. non stop są nadpisywane.
Ja bym to zrobił tak:
- odczyt z 1 czujnika
- przypisanie odczytanych wartości z "cel" itp. do zmiennych np. "temp1_cel" etc.
-odczyt z 2 czujnika
- przypisanie odczytanych wartości z "cel" itp. do zmiennych np. "temp2_cel" etc.
-wyświetlenie danych dla temp1 lub temp2 w zależności od wciśnięcia przycisku.


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 31 sty 2016, o 19:32 
Offline
Użytkownik

Dołączył(a): 08 kwi 2014
Posty: 30
Pomógł: 0

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

.....teraz sytuacja wygląda tak: temperatura z czujnika 2 wyświetla się w momencie naciśnięcia przycisku. (co nawet mi odpowiada)...martwi mnie natomiast, że temperatura z czujnika 1 "nie aktualizuje się"....

co do kodu: te zmienne a,b,c...to tak na chwile, później bedą zmienione na odpowiednie nazwy



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

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:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO