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



Teraz jest 24 mar 2026, o 01:53


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 7 ] 
Autor Wiadomość
PostNapisane: 8 lis 2014, o 17:33 
Offline
Użytkownik

Dołączył(a): 13 maja 2014
Posty: 25
Pomógł: 0

Witam wszystkich,
Tworzę pewien projekt sterownika oświetlenia który będzie miał następujące funkcje/podzespoły:
- procesor atmega32
- zegarek RTC DS1307 na I2C
- 2x temperatura na 1-wire
- wyświetlacz LCD HD44780
- sterowanie pilotem podczerwieni RC5
- sterowanie telefonem poprzez bluetooth
- kilka kanałów PWM do sterowania taśmami LED 12V (2-4 kanały)
- kilka kanałów do sterowania fazowego oświetleniem na 230V (2-4 kanały)
- czujnik ruchu - osobny moduł
- czujnik oświetlenia - fotorezystor na ADC.

Zrobiłem sobie prototypową płytkę i zaczynam to programować. Zacząłem oczywiście od obsługi LCD, potem zrobiłem programowe kanały do sterowania PWM, dodałem obsługę czujników temperatury na 1wire i mam problem. Temperaturę odczytuję co 2s w mainie, tak jak jest to pokazane w niebieskiej książce. I w trakcie odczytu temperatury widać wyraźne miganie taśmy LED, z czym nie mogę sobie poradzić. Do odczytu temperatury używam biblioteki z niebieskiej książki, znalazłem że w funkcji uint8_t ow_bit_io( uint8_t b ) wyłączane są przerwania.
Wydaje mi się, że czasy w odczycie z magistrali 1-wire są na tyle ważne, że nie da się ich wyznaczyć bez wyłączenia przerwania.
I teraz pytanie: czy zna ktoś sposób na jednoczesną obsługę magistrali 1-wire oraz programowego PWM?
Nie wiem czy szukać jakiegoś rozwiązania czy zmieniać koncepcję urządzenia.

Z góry dziękuję za odpowiedzi :)

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


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


I jeszcze funkcja read_temp
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: 8 lis 2014, o 18:14 
Offline
Moderator
Avatar użytkownika

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

jaguar963 napisał(a):
I teraz pytanie: czy zna ktoś sposób na jednoczesną obsługę magistrali 1-wire oraz programowego PWM?

Nie warto łączyć sobie programowego PWM, które musi zabierać MNÓSTWO czasu procka na obsługę tegoż PWM i jest bardzo wrażliwe na przerwy w przerwaniach że tak powiem, z obsługą 1wire, które z kolei MUSI mieć zapewnione chwile pracy z wyłączonymi przerwaniami żeby była prawidłowa czasówka ... W ogóle jak się robi programowy PWM to trzeba nieźle przemyśleć wiele innych zagadnień projektu. Pomyśl sobie sam z jaką częstotliwością odbywają się przerwania tego PWM'a i ile czasu one zabierają ...

obejrzyj sobie DOKŁADNIE ten poradnik: http://www.youtube.com/watch?feature=pl ... 82_Zop9cjE

odnośnie przerwań i jak się mają przerwania do czasu/zajętości programu głównego

jaguar963 napisał(a):
Nie wiem czy szukać jakiegoś rozwiązania czy zmieniać koncepcję urządzenia.

Ja wiem - szukać innego rozwiązania albo zmienić koncepcję. Albo skorzystaj ze sprzętowych PWM'ów i totalnie nagle odpadnie ci problem migania diod przy obsłudze 1wire .... a jeśli brak w procku sprzętowych wyjść PWM to zmień koncepcję i weź inny procek - większy - z większą ilością PWM, albo oddzielny mały procek który będzie tylko obsługą PWM się zajmował

_________________
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 2014, o 18:25 
Offline
Użytkownik

Dołączył(a): 13 maja 2014
Posty: 25
Pomógł: 0

O taką odpowiedź mi chodziło, zwłaszcza Pana :) Większość dostępnych procków ma max 6 wyjść PWM, jeśli chciałbym mieć 4 kanały w swoim urządzeniu to automatycznie tracę 2 Timery. Do obsługi RC5 potrzebuję jeden timer, do innych rzeczy kolejny, więc chyba odpada takie rozwiązanie. A co ze sterowaniem fazowym urządzeń na 230V? Takie sterowanie pewnie tak samo obciąża procesor, prawda?

Alternatywnym rozwiązaniem nad którym myślałem byłoby podłączenie wszystkiego co napisałem w moich założeniach (oprócz PWM i sterowania fazowego) do atmegi32, dołożenie do tego np atmegi168 do sterowania PWM i fazowego (4 kanały PWM sprzętowego, trzeci timer wykorzystać do sterowania fazowego, ewentualnie wtedy można sobie pozwolić na PWM programowy). Tylko czym połączyć te procesory? Poprzez SPI będzie ok?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 lis 2014, o 18:29 
Offline
Moderator
Avatar użytkownika

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

jaguar963 napisał(a):
A co ze sterowaniem fazowym urządzeń na 230V? Takie sterowanie pewnie tak samo obciąża procesor, prawda?

O wiele mniej - porównaj sobie ilość kodu w asm w takim przerwaniu w porównaniu do programowego PWM ... no ale jednak głowy nie dam trzeba by było zrobić próby - bo jednak być może czasem 1wire mógłby zakłócić co nieco

jaguar963 napisał(a):
Alternatywnym rozwiązaniem nad którym myślałem byłoby podłączenie wszystkiego co napisałem w moich założeniach (oprócz PWM i sterowania fazowego) do atmegi32, dołożenie do tego np atmegi168 do sterowania PWM i fazowego (4 kanały PWM sprzętowego, trzeci timer wykorzystać do sterowania fazowego, ewentualnie wtedy można sobie pozwolić na PWM programowy). Tylko czym połączyć te procesory? Poprzez SPI będzie ok?


SPI, I2C, RS232 - czymkolwiek - tylko najpierw przetrenuj sobie z kolei takie rozmówki międzyprocesorowe

_________________
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 2014, o 18:35 
Offline
Użytkownik

Dołączył(a): 13 maja 2014
Posty: 25
Pomógł: 0

W takim razie będę brał się za tworzenie nowego schematu płytki. RS232 mam zamiar wykorzystać do bluetootha, na I2C mam zegarek a więc luzem leży sobie SPI :) Tylko teraz kolejne pytanie: czy w połączeniu z programatorem dodawać od razu zworki na wszystkich liniach? Czy może da się programowo załatwić połączenie 2 mikrokontrolerów przez SPI, jednocześnie programując je również przez ten interfejs?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 lis 2014, o 18:37 
Offline
Moderator
Avatar użytkownika

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

jaguar963 napisał(a):
Czy może da się programowo załatwić połączenie 2 mikrokontrolerów przez SPI, jednocześnie programując je również przez ten interfejs?

No tu już trzeba pokombinować ;)

_________________
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 2014, o 18:47 
Offline
Użytkownik

Dołączył(a): 13 maja 2014
Posty: 25
Pomógł: 0

W takim razie muszę przemyśleć, czy zejść z wymaganiami do 2xPWM sprzętowego, tak żeby zostały mi 2 timery do obsługi 230V i odbiornika IR.
Jeszcze raz dziękuję za pomoc :)



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

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