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



Teraz jest 23 kwi 2025, o 23:25


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 9 ] 
Autor Wiadomość
PostNapisane: 8 lut 2014, o 14:19 
Offline
Użytkownik

Dołączył(a): 29 lis 2012
Posty: 1074
Lokalizacja: Sochaczew
Pomógł: 21

Mam takie pytanie jedno do Was.
Mam układ CD4051 sterowany przez kontroler. Dwa wejścia ADC odczytują stan z potencjometrów i na tej podstawie trzeba odpowiednio wysterować układ 4051 tak by osobno sterował dwiema sekcjami po 4 diody.
Reasumując pokazuję prosty algorytm:
- odczyt adc1
- odczyt adc2
- jeśli adc1 wynosi x to ustaw na wejściach danych układu 4051 dany adres do wyświetlenia stanu za pomocą pierwszych czterech diod
- jeśli adc2 wynosi y to ustaw na wejściach danych układu 4051 dany adres do wyświetlenia stanu za pomocą drugich czterech diod

I tu leży kłopot. Jeśli włącza mi poprawnie diodę z pierwszej czwórki to z drugiej już nie, albo wszystko się miesza i z drugiej czwórki wyświetla się dopiero jak ADC1 jest w odpowiedniej pozycji.
Programu nie będę przedstawiał bo jest banalny i polega na sprawdzaniu ADC1 i ADC2 oraz odpowiedniej interpretacji wyniku na podstawie tych pomiarów za pomocą instruckji warunkowych If...then.

Oczywiście piszę w bascomie. Nadmienię że dla prostego sprawdzania działania programu dodawałem też opóźnienia o różnej długości.

Pytanie czy się da to ogarnąć w ten sposób który sobie wymyśliłem?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 lut 2014, o 21:36 
Offline
Użytkownik
Avatar użytkownika

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

Pokaż może jak to masz podłączone. Kod też by jednak było dobrze pokazać. Bo w tej sytuacji trudno cokolwiek doradzić.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 lut 2014, o 21:48 
Offline
Użytkownik

Dołączył(a): 29 lis 2012
Posty: 1074
Lokalizacja: Sochaczew
Pomógł: 21

Podłączenie jest banalne. Podłączam na płytce EvbAVR04. Pinologia dowolna bo dowolnie można podłączyć na tej płytce jak na zestawie ATB. Sam kod na początku opierał się o wybór za pomocą If..then ale nie zdawało to rezultatu więc pomyślałem że zrobię to na select case. I jakoś poszło tylko mam migotanie.

W tej chwili mam coś takiego:
- skok do podprogramu adc_1
- zdefiniowanie jaka zostanie przyjęta wartość select case w zalezności od pomiaru adc1
- skok do podprogramu ustawienia danych na szynę układu 4051
to samo w stosunku do adc2

Kod wygląda jak poniżej i działa. Wszystkiemu winna była obsługa wyświetlania wyników ADC którą teraz zaremowałem.

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


Teraz pytanie, jak zapobiec migotaniu podczas wyświetlania danych na wyświetlaczu ?
Czy użycie timera i obsługa wszystkiego w przerwaniu coś pomoże ?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 lut 2014, o 21:13 
Offline
Użytkownik
Avatar użytkownika

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

Próbowałeś może zmniejszyć opóźnienia w podprogramach pomiar_adc?

A nie myślałeś żeby zamiast 4051 zastosować jakiś rejestr przesuwny? Bo za pomocą 4051 możesz zaświecić tylko jedna diodę naraz. A żeby świeciły dwie to trzeba je włączać na przemian. A w rejestrze przesuwnym można zaświecać kilka diod naraz.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 lut 2014, o 21:19 
Offline
Użytkownik

Dołączył(a): 29 lis 2012
Posty: 1074
Lokalizacja: Sochaczew
Pomógł: 21

Jeśli chodzi o zmniejszanie czasu trwania wait to działa nawet z wait1 ale jeśli nie obsługuję wyświetlania. Jeśli tylko chcę coś wyświetlić to zaczyna się migotanie.

Co do rejestru to rzeczywiście chyba to będzie lepsze rozwiązanie. Gdzieś Mirek opisywał używanie rejestru. Co to był za rejestr ?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 lut 2014, o 21:43 
Offline
Użytkownik
Avatar użytkownika

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

To był 74595. Poradnik jest u Mirka na blogu http://mirekk36.blogspot.com/2013/09/re ... stawy.html

Gdybyś miał problemy z przełożeniem tego na bascoma to chętnie pomogę.

Z rejestrów przesuwnych używałem też 4094. Dane wysyłałem w prościutkiej procedurze
Składnia: [ Pobierz ] [ Ukryj ]
język basic4gl
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 lut 2014, o 22:03 
Offline
Użytkownik

Dołączył(a): 29 lis 2012
Posty: 1074
Lokalizacja: Sochaczew
Pomógł: 21

A powiedz co znaczy ten kawałek kodu bo nigdy tego nie używałem:
Składnia: [ Pobierz ] [ Ukryj ]
język basic4gl
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Rozumiem że zmienna Dane przyjmuje wartość zmiennej lokalnej Value, a po co parametr .i ? Co robi kropka oraz i ?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 lut 2014, o 22:28 
Offline
Użytkownik
Avatar użytkownika

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

Może trochę niefortunnie dobrałem tą nazwę. Poniżej trochę poprawione
Składnia: [ Pobierz ] [ Ukryj ]
język basic4gl
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Data_in to wejście danych rejestru 4094.
Linia
Składnia: [ Pobierz ] [ Ukryj ]
język basic4gl
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
wystawia na to wejście kolejne bity zmiennej Value. Wystawianie rozpoczyna się od bitu nr 0 do bitu nr 7. Po każdym wystawionym bicie trzeba machnąć linią Clk aby ten bit został zapisany do rejestru. Po wysłaniu całego bajtu zmiana na linii Strobe powoduje, że wysłany bajt pojawia się na wyjściach rejestru.

A co do tego zapisu
Składnia: [ Pobierz ] [ Ukryj ]
język basic4gl
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
to w ten sposób można dostać się do poszczególnych bitów dowolnej zmiennej. Mamy np. zmienna bajtową Stan.
Zapis
Składnia: [ Pobierz ] [ Ukryj ]
język basic4gl
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
ustawi nam bit nr 0.
A np. zapis
Składnia: [ Pobierz ] [ Ukryj ]
język basic4gl
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
wyzeruje ostatni bit zmiennej.


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 lut 2014, o 22:32 
Offline
Użytkownik

Dołączył(a): 29 lis 2012
Posty: 1074
Lokalizacja: Sochaczew
Pomógł: 21

Dzięki. Rozkmina jak złoto. Teraz czekam na gls'a w wersji lila-róż i muszę dokupić ATB Shield I/O



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

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