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
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
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
I jeszcze funkcja read_temp
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.