Witam,
Chciałem zrobić sterownik do podświetlania schodów. Mam 18 stopni i do każdego stopnia puściłem osobny kabelek. Chciałbym żeby stopnie zaświecały i rozjaśniały się po kolei, to znaczy
1 krok - 1 stopień 10%
2 krok - 1 stopień 20% - 2 stopień 10%
3 krok - 1 stopień 30% - 2 stopień 20% - 3 stopień 10%
Czy da radę zrobić to programowym PWM ? pewnie tak tylko nie za bardzo wiem jak przypisać do danego portu żeby na nim było wypełnienie PWM o zadanej wartości.
Programowy PWM na 18-tu kanałach
-
Zbyszek
- Posty: 96
- Rejestracja: 30 lis 2017, 17:12
- niveasoft
- Posty: 1313
- Rejestracja: 17 sie 2015, 12:13
- Kontakt:
Re: Programowy PWM na 18-tu kanałach
Da się na pewno. Napisałem juz taki sterownik na 21 stopni. Do tego wiele efektów do wyboru. Poniżej wideo z testów.
On ma też zapalać tak słabo skrajne stopnie żeby było wiadomo po ciemku gdzie są schody. Schody mają wejście na czujniki, ale nie zapalaja sie w dzień.
Do tego regulowane czasy. mam nawet do tego płytkę
Mogę pomóc z programowym PWM, ale te efekty to sam opracujesz
On ma też zapalać tak słabo skrajne stopnie żeby było wiadomo po ciemku gdzie są schody. Schody mają wejście na czujniki, ale nie zapalaja sie w dzień.
Do tego regulowane czasy. mam nawet do tego płytkę
Mogę pomóc z programowym PWM, ale te efekty to sam opracujesz
-
Zbyszek
- Posty: 96
- Rejestracja: 30 lis 2017, 17:12
Re: Programowy PWM na 18-tu kanałach
Efekty nie są mi potrzebne, wystarczy tak jak opisałem w 1 poście, dwa wejścia atmegi były by zarezerwowane jako załącz / wyłącz schody. Chciałem to zrobić na czujnikach zbliżeniowych sharpa ( z czujnikami to nie problem ). Tylko jak w bascomie przypisać wypełnienie xx % do danego portu. Wystarczyła by mi wtedy Atmega 8 albo 328 jak by brakło pamięci. 1 i ostatni stopień też nie muszą się świecić. Sygnał z 1 czujnika - powoli się rozświetlają, a sygnał z 2 czujnika - powoli przygasają.
Podpowiesz jak przypisać wypełnienie xx % do danego portu ?
Efekt ma być taki jak na samym początku filmu.
Podpowiesz jak przypisać wypełnienie xx % do danego portu ?
Efekt ma być taki jak na samym początku filmu.
- niveasoft
- Posty: 1313
- Rejestracja: 17 sie 2015, 12:13
- Kontakt:
Re: Programowy PWM na 18-tu kanałach
Najpierw zajrzyj na moją stronę -> https://bart-projects.pl/rozne.html
Tam, gdy przewiniesz niżej jest temat i kod "Programowe PWM na ośmiu kanałach na Attiny2313 i każdym innym - Soft PWM Bascom"
Jak coś będzie niejasne to pisz dalej śmiało
Tam jest pętla For-Next która nie jest za szybka, ale to tam było na jednym porcie.
Można to rozpisac na linijki dla kazdego pinu i bedzie nawet szybciej.
Tam, gdy przewiniesz niżej jest temat i kod "Programowe PWM na ośmiu kanałach na Attiny2313 i każdym innym - Soft PWM Bascom"
Jak coś będzie niejasne to pisz dalej śmiało
Tam jest pętla For-Next która nie jest za szybka, ale to tam było na jednym porcie.
Można to rozpisac na linijki dla kazdego pinu i bedzie nawet szybciej.
- niveasoft
- Posty: 1313
- Rejestracja: 17 sie 2015, 12:13
- Kontakt:
Re: Programowy PWM na 18-tu kanałach
Tu jest kawałek kodu tych schodów. 24 kanały. Atmega32 przy 16MHz
Code: [Zaznacz cały] [Rozwiń/Zwiń]
- '*** Timer0 Config for Software PWM 24 channel ***
- Config Timer0 = Timer , Prescale = 8 , Compare = Disconnect , Clear_timer = 1
- Enable Compare0 : On Compare0 Timer0_isr Nosave : Compare0 = 150
Code: [Zaznacz cały] [Rozwiń/Zwiń]
- Timer0_isr:
- $asm
- !PUSH R16
- !PUSH R20
- !PUSH R24
- !PUSH R26
- !PUSH R27
- !in R24, sreg
- !PUSH R24
- $end Asm
- Incr Licznik 'zwieksz Licznik o jeden
- If Licznik = 100 Then Licznik = 1 'jesli Licznik = 100 to wyzeruj
- If Licznik > Pwm_val(1) Then Reset Portc.7 Else Set Portc.7
- If Licznik > Pwm_val(2) Then Reset Portc.6 Else Set Portc.6
- If Licznik > Pwm_val(3) Then Reset Portc.5 Else Set Portc.5
- If Licznik > Pwm_val(4) Then Reset Portc.4 Else Set Portc.4
- If Licznik > Pwm_val(5) Then Reset Portc.3 Else Set Portc.3
- If Licznik > Pwm_val(6) Then Reset Portc.2 Else Set Portc.2
- If Licznik > Pwm_val(7) Then Reset Portc.1 Else Set Portc.1
- If Licznik > Pwm_val(8) Then Reset Portc.0 Else Set Portc.0
- If Licznik > Pwm_val(9) Then Reset Portd.7 Else Set Portd.7
- If Licznik > Pwm_val(10) Then Reset Portd.6 Else Set Portd.6
- If Licznik > Pwm_val(11) Then Reset Portd.5 Else Set Portd.5
- If Licznik > Pwm_val(12) Then Reset Portd.4 Else Set Portd.4
- If Licznik > Pwm_val(13) Then Reset Portd.3 Else Set Portd.3
- If Licznik > Pwm_val(14) Then Reset Portd.2 Else Set Portd.2
- If Licznik > Pwm_val(15) Then Reset Portd.1 Else Set Portd.1
- If Licznik > Pwm_val(16) Then Reset Portd.0 Else Set Portd.0
- If Licznik > Pwm_val(17) Then Reset Portb.7 Else Set Portb.7
- If Licznik > Pwm_val(18) Then Reset Portb.6 Else Set Portb.6
- If Licznik > Pwm_val(19) Then Reset Portb.5 Else Set Portb.5
- If Licznik > Pwm_val(20) Then Reset Portb.4 Else Set Portb.4
- If Licznik > Pwm_val(21) Then Reset Portb.3 Else Set Portb.3
- If Licznik > Pwm_val(22) Then Reset Portb.2 Else Set Portb.2
- If Licznik > Pwm_val(23) Then Reset Portb.1 Else Set Portb.1
- If Licznik > Pwm_val(24) Then Reset Portb.0 Else Set Portb.0
- ' Tuned with NoSave Tool
- $asm
- !POP R24
- !out sreg, r24
- !POP R27
- !POP R26
- !POP R24
- !POP R20
- !POP R16
- $end Asm
- Return
