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



Teraz jest 19 mar 2026, o 13:41


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 19 ] 
Autor Wiadomość
PostNapisane: 2 lis 2014, o 09:39 
Offline
Użytkownik

Dołączył(a): 05 lut 2014
Posty: 252
Lokalizacja: obok Częstochowy
Pomógł: 14

Witam. Na płytce ATB 1.04 z Atmega 644 i kwarc 18,432 mam już zainstalowane multipleksowanie 4 wyświetlaczami czteropozycyjnymi poprzez 3 rejestry przesuwne 74HC595 za pomocą SPI, Jest też uruchomiony wyświetlacz LCD, sterowanie menu przez IR, zegar DS3231, odczyt z 3 czujników temp. DS18b20+ jeden z DS3231.
Postanowiłem dołożyć jeszcze moduł Atb-Ethernet, aby na stronie wyświetlać np. temperatury z czujników. Efekt jest taki, że cyferki wyświetlacza LED radośnie sobie pomrugują jakby SPI się nie wyrabiało, a stronę internetową raz załaduje, a raz nie(z naciskiem na nie). Bez obsługi LEDów moduł ethernet działa dobrze. Jest możliwe pogodzenie ethernetu i multipleksowania na jednej magistrali SPI ?
Z tego co czytałem obsługa Modułu ethernetowego ma spore wymagania- szybki kwarc i magistrala SPI ustawiona na max.
Pin SS dla sterowania zatrzaskiem rejestrów zmieniłem na PC7, a dla karty zostawiłem na PB4.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 lis 2014, o 10:20 
Offline
Moderator
Avatar użytkownika

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

Rafał555 napisał(a):
Jest możliwe pogodzenie ethernetu i multipleksowania na jednej magistrali SPI ?

Pewnie, że jest możliwe - po to są sygnały CS (Chip Select) na tej magistrali do wybranych układów ... A jeśli ci coś nie gra to nie szukaj przyczyn w sprzęcie tzn w sensie w tym że coś się nie wyrabia rzekomo sprzętowo bo niby eth potrzebuje tam dużego taktowania itp ...

Panie taktować możesz jak chcesz - i z taką samą szybkością możesz taktować równie dobrze SCK do rejestrów przesuwnych bo co to im zaszkodzi ? ;)

W takich przypadkach (o ile oczywiście dobrze to wszystko po podłączałeś - a tego nie wiemy bo przecież schematu nie pokazujesz "lubię" takie pytania ;) )..... to w 99% zwykle chodzi o problem w kodzie programu ....

_________________
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: 2 lis 2014, o 15:21 
Offline
Użytkownik

Dołączył(a): 05 lut 2014
Posty: 252
Lokalizacja: obok Częstochowy
Pomógł: 14

Schematu nie posiadam jeszcze, bo opieram się na zestawie ATB 1.04. Moduł ethernetowy wpięty jest w gniazdo programatora, a sygnał CS połączony zworką do PB4. Wyświetlacze z rejestrami są na osobnej płytce, a schemat zaginął po zmianie systemu, ale jest oparty o ten z Elektrody:
Obrazek

i działa poprawnie ponad pół roku (podłączony bezpośrednio do pinów procesora na zestawie).
Coś mi się widzi, że ja nie rozumiem jak ma działać sterowanie tymi sygnałami CS.
No, bo przecież LEDy są multipleksowane w przerwaniu z częstotliwością ok. 800 Hz dla 16 wyświetlaczy i CS na PC7 działa jako zatrzask (oparte na bibliotece z BB). Natomiast ATB Ethernet steruje sobie swoim CS na PB4 i najwyraźniej blokuje i sądząc po efektach i migotkach wysyła swoje dane na LEDy. Właśnie nie mogę zakumać jak poprawnie sterować tymi sygnałami CS. Biblioteka do modułu ethernet również jest z książki.



Ostatnio edytowano 15 lis 2014, o 18:52 przez Rafał555, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 lis 2014, o 17:16 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 03 mar 2014
Posty: 580
Lokalizacja: Jastrzębie-Zdrój
Pomógł: 71

Kolega sygnały CS od wyświetlaczy musisz mieć na osobnym pinie, od ATB-Ethernetu osobny. W przypadku rejestrów i potrzeby wrzucenia używasz ten co jest podłączony do Latch Clock, a w przypadku modułu do ATB osobny.

Podobne sterowanie masz pokazane na Atnelowskich wyświetlaczach OLED z dodatkowym pinem.
Jak sterować masz w poradnikach o OLEDach.

z Niebieskim pozdRowieniem,
Doman89


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

Możesz zawsze zrobić też tak, aby rejestry do których są podłączone LEDy, miały wsuwane te same dane podczas dodawania danych od ATB-Ethernet.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 lis 2014, o 19:40 
Offline
Użytkownik

Dołączył(a): 05 lut 2014
Posty: 252
Lokalizacja: obok Częstochowy
Pomógł: 14

No mam osobne piny CS dla LED i karty sieciowej. Już chyba zatrybiłem o co chodzi. Muszę tylko bardziej dogłębnie
poznać jak ta karta wysyła dane znaczy się jak często.
Bo chodzi chyba o to, że jak wysyłam dane do rejestrów sterujących wyświetlaczami to nie mogę w tym samym czasie wysyłać danych do karty?
Może dać karcie ethernet pełną swobodę ( korzystam z gotowych bibliotek pana Mirka), natomiast dla LEDów zwiększyć
częstotliwość odświeżania, żeby miały większą szansę wstrzelić się z odczytem własnych danych, bo będę musiał na czas pracy karty zablokować jakąś flagą odświeżanie.
I teraz tak sobie myślę, że odświeżanie LEDów trzeba chyba wyrzucić z przerwania timera, bo pewnie wcina się to przerwanie jak karta sieciowa robi swoje.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 lis 2014, o 19:50 
Offline
Moderator
Avatar użytkownika

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

Rafał555 napisał(a):
I teraz tak sobie myślę, że odświeżanie LEDów trzeba chyba wyrzucić z przerwania timera, bo pewnie wcina się to przerwanie jak karta sieciowa robi swoje.

O widzisz i teraz to sobie dobrze kombinujesz ....

_________________
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: 6 lis 2014, o 10:41 
Offline
Użytkownik

Dołączył(a): 05 lut 2014
Posty: 252
Lokalizacja: obok Częstochowy
Pomógł: 14

No i zrobiłem jak mówiłem. Teraz karta sieciowa działa i nie ma wpływu na multipleksowanie. Natomiast ma wpływ przerwanie od INT0 sterowane z DS3231 co 1 sekundę. W przerwaniu wykonywane jest dodawanie sekund i ustawianie flagi, czyli tyle co nic. Między flagami natomiast co 30 sek. szukanie, rozkaz pomiaru i odczyt z trzech DS18b20, co sekundę odświeżanie LCD, odczyt temperatury i czasu z DS3231, wysłanie na terminal jednej temperatury. Może poczekać z tym do czasu zmontowania układu na docelowej płytce ? Teraz to trochę taka pajęczynka, długie przewody i wygląda to tak:
Obrazek

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


Wszystko wykonywane jest liniowo jak widać, wszystko wyrzucone z przerwań.

Największa zwiecha jest podczas odczytu temperatur z z trzech DS18b20.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 lis 2014, o 11:12 
Offline
Moderator
Avatar użytkownika

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

Rafał555 napisał(a):
Największa zwiecha jest podczas odczytu temperatur z z trzech DS18b20.

To może pokaż jak ty to robisz w kodzie

bo na razie to nie widać tego

_________________
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: 6 lis 2014, o 11:50 
Offline
Użytkownik

Dołączył(a): 05 lut 2014
Posty: 252
Lokalizacja: obok Częstochowy
Pomógł: 14

plik pomiar.c z funkcją pomiar(), która wykonywana jest co jedną sekundę w pętli głównej:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


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


I tak przy okazji chciałem zapytać jak poprawnie używać flagi sprzętowej. Tak mam ustawiony Timer0:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


A tak używam flagi w pętli głównej:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


i wyświetlacze nie działają. Jak ustawiam flagę "led_flag" (teraz zakomentowaną)to działa.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 lis 2014, o 21:21 
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

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

i odpowiednia funkcja obsługi przerwania (ISR). To pierwsze co procesor robi po ustawieniu tej flagi przerwania to skok do funkcji obsługi przerwania, a tam flaga zostaje automatycznie wyzerowana i po powrocie do pętli głównej jest już nieaktywna i dlatego to nie działa. Jak chcesz ją sam zerować to nie zezwalaj na przerwanie i wtedy funkcja obsługi przerwania nie jest potrzebna, bo i tak się nie wykona.

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 lis 2014, o 12:32 
Offline
Użytkownik

Dołączył(a): 05 lut 2014
Posty: 252
Lokalizacja: obok Częstochowy
Pomógł: 14

No właśnie doczytałem już to automatyczne zerowanie flagi.
Ale nijak to nie działa. Jak wpiszę zanegowane sprawdzenie to przepuszcza warunek z prędkością pętli, a jak sprawdzam tak:

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


to przepuszcza co jakiś czas pojedynczą cyferkę.
Jakiś babol siedzi u mnie w programie i pewnie to ma wpływ na beznadziejną pracę wyświetlacza LED.
W przerwaniu dodaję sekundy to go nie wyłączam.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 lis 2014, o 21:45 
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

Rafał555 napisał(a):
W przerwaniu dodaję sekundy to go nie wyłączam.

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

zwiększasz sekundy. Dlatego proponowałem usunięcie linii:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

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

?

_________________
Dragonus Cracovus: Biomagia



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

Dołączył(a): 05 lut 2014
Posty: 252
Lokalizacja: obok Częstochowy
Pomógł: 14

Ano tak, ale w timer0 mam timery programowe:

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


i ustawiam flagę w której multipleksuję wyświetlacze funkcją multiled().


EDIT;
Wywaliłem zezwolenie na przerwanie, skasowałem funkcję przerwania i działa, ale z ręcznym zerowaniem flagi.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 lis 2014, o 14:02 
Offline
Użytkownik

Dołączył(a): 08 mar 2014
Posty: 398
Lokalizacja: Głogów
Pomógł: 11

Miałem bardzo podobny problem, kombinowałem na wszystkie sposoby a pomogło dopiero jak dałem procedurę multipleksacji wyświetlaczy led w przerwanie oddzielnego timera. Wtedy jak ręką odjął wszystkie problemy z mruganiem wyświetlaczy itp. Innej opcji nie widzę jak to zrobić aby wyświetlanie nie było w przerwaniu.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 lis 2014, o 16:41 
Offline
Użytkownik

Dołączył(a): 05 lut 2014
Posty: 252
Lokalizacja: obok Częstochowy
Pomógł: 14

Wcześniej miałem w przerwaniu i było też w porządku. Ale do układu dołączyłem moduł ethernetowy, również na SPI.
Zbyt częste przerwania 800Hz gryzły się z modułem i działał w kratkę. W sumie to przerwanie dalej sobie działa, ale teraz jest krótkie bez wysyłania na SPI.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 lis 2014, o 18:48 
Offline
Użytkownik

Dołączył(a): 08 mar 2014
Posty: 398
Lokalizacja: Głogów
Pomógł: 11

A z jaką częstotliwością pracuje multipleksacja wyświetlacza led?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 lis 2014, o 09:10 
Offline
Użytkownik

Dołączył(a): 05 lut 2014
Posty: 252
Lokalizacja: obok Częstochowy
Pomógł: 14

Ja liczę 50Hz na wyświetlacz. Czyli w moim przypadku 16*50=800Hz.
F_CPU 18432000,
preskaler 1024,
porównanie w OCR 23 (dałem 20, bo kątem oka widoczne było lekkie migotanie).



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 lis 2014, o 09:58 
Offline
Użytkownik

Dołączył(a): 08 mar 2014
Posty: 398
Lokalizacja: Głogów
Pomógł: 11

Można by się jeszcze pokusić o sterowanie anod wyświetlaczy z układu CD4017, a do taktowania tego układu wykorzystać generator na LM555. Wtedy sygnał taktowania tego układu doprowadzić do procesora na przerwanie i tylko w tym przerwaniu ustawiać odpowiednie wartości portu z danymi do segmentów wyświetlacza. Dodatkowo można użyć konwersji BCD i wtedy do sterowania segmentów wyświetlaczy mikroprocesor będzie sterował tylko 4 pinami. Robiłem kiedyś taki układ jeszcze w bascomie na attiny2313 gdzie brakowało mi wolnych pinów, program był sporo odciążony dzięki takiemu podejściu.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 lis 2014, o 10:09 
Offline
Użytkownik

Dołączył(a): 05 lut 2014
Posty: 252
Lokalizacja: obok Częstochowy
Pomógł: 14

Jak nie znajdę innego rozwiązania to właśnie planuję samą multipleksację zrobić na osobnym małym procku, tylko dane podsyłać będę przez UART np..



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

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