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



Teraz jest 29 gru 2024, o 02:53


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 14 ] 
Autor Wiadomość
PostNapisane: 8 lis 2019, o 21:47 
Offline
Nowy

Dołączył(a): 15 maja 2017
Posty: 13
Pomógł: 0

Witam. Poszukuje sposobu na uruchomienie dwóch led w trybie PWM o różnych czasach działania.
Led1/PWM1/PB0 - płynne rozjaśnianie 0-240 w czasie 60 sekund, ciągłe świecenie przez czas 120 sekund, płynne gaszenie 240-0 przez czas 60 sekund (w pętli)
Natomiast równolegle chcę by Led2/PWM2/PB1 się płynnie rozjaśniało 0-240 przez czas 90 sekund , płynnie wyłączało przez czas 50 sekund (pętla).
Niestety nie wiem jak się za to zabrać.

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 9 lis 2019, o 20:44 
Offline
Nowy

Dołączył(a): 15 maja 2017
Posty: 13
Pomógł: 0

Doczytałem się o timerze programowym. Jednak niewiem jak się za to zabrać.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 9 lis 2019, o 21:28 
Offline
Moderator
Avatar użytkownika

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

bobuss88 napisał(a):
Jednak niewiem jak się za to zabrać.

Proponuję zacząć od książki https://atnel.pl/mikrokontrolery-avr-jezyk-c.html

_________________
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: 10 lis 2019, o 10:33 
Offline
Użytkownik

Dołączył(a): 28 wrz 2016
Posty: 215
Pomógł: 14

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

Oczywiście i i j muszą być typu uint16_t, a dla drugiego kanału trzeba trochę pokombinować, by dopasować ściemnianie i rozjaśnianie do ilości kroków.
Czas obiegu pętli też nie jest idealny. Jeżeli ma być idealny, to można zastosować zamiast _delay_ms(240); while(jakas_zmienna) a w obsłudze przerwania dopisać zerowanie tej zmiennej

_________________
de gustibus non est disputandum



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 lis 2019, o 13:09 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 paź 2013
Posty: 1967
Lokalizacja: Lipsko
Pomógł: 125

Twoje zadanie najprościej byłoby chyba rozwiązać z użyciem switch-case. Prosta maszyna stanów dla każdego z led pozwoli na łatwiejsze zarządzanie czasami świecenia. Oczywiście bez timera programowego się raczej nie obejdzie.

_________________
http://www.sylwekkuna.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 lis 2019, o 13:38 
Offline
Nowy

Dołączył(a): 21 mar 2019
Posty: 3
Pomógł: 0

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


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


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


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


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


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


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: 11 lis 2019, o 00:38 
Offline
Nowy

Dołączył(a): 15 maja 2017
Posty: 13
Pomógł: 0

Dziękuję za zainteresowanie postem.
Potrzebowałbym jednak jeszcze zmianę czasów poprzez przełączniki na portach PB3 i PB4:

PB3 stan niski - przełącznik czasu Kanału 1 -płynne rozjaśnianie 0-240 przez czas 60 sekund, ciągłe świecenie przez czas 120 sekund, płynne wyłączenie przez czas 60 sekund.

PB3 stan wysoki - przełącznik czasu Kanału 1 -płynne rozjaśnianie 0-240 przez czas 90 sekund, ciągłe świecenie przez czas 120 sekund, płynne wyłączenie przez czas 90 sekund.

PB4 stan niski - przełącznik czasu Kanału 2 -Rozjaśnianie 0-240 przez czas 60 sekund, gaszenie przez czas 40 sekund.

PB4 stan wysoki - przełącznik czasu Kanału 2 -Rozjaśnianie 0-240 przez czas 90 sekund, gaszenie przez czas 50 sekund.

Oczywiście jak wyżej wspomniałem oba kanały pwm muszą pracować równolegle.

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 lis 2019, o 10:57 
Offline
Użytkownik

Dołączył(a): 28 wrz 2016
Posty: 215
Pomógł: 14

SylwekK napisał(a):
najprościej byłoby chyba rozwiązać z użyciem switch-case
Kolega ma na myśli coś takiego:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

SylwekK napisał(a):
bez timera programowego się raczej nie obejdzie

nie jestem przekonany czy w TYM konkretnym przypadku jest to niezbędne, choć jeżeli program ma być rozbudowywany to warto
lub też jeżeli czasy są krytyczne
bobuss88 napisał(a):
zmianę czasów poprzez przełączniki na portach PB3 i PB4:

a jaki to problem
ponieważ zmieniasz tylko czasy i tylko w zależności od stanu wejścia, to wystarczy stałe w warunkach zamienić na zmienne, których wartość będzie zależeć od stanu wejścia, np tak:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

_________________
de gustibus non est disputandum



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 lis 2019, o 11:30 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 paź 2013
Posty: 1967
Lokalizacja: Lipsko
Pomógł: 125

@Alef2, tak, mniej więcej o to chodzi. Wypadało by tylko uzależnić kroki rozjaśnianie/ściemnianie od czasu aby te kroki w zadanym czasie odliczyło. Można to zrobić na kilka sposobów. Timer programowy jest wygodny nawet jak przerwan do niczego innego nie wykorzystujemy :)

_________________
http://www.sylwekkuna.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 lis 2019, o 13:37 
Offline
Nowy

Dołączył(a): 15 maja 2017
Posty: 13
Pomógł: 0

Czy szkic programu jest obecnie poprawny?

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 lis 2019, o 22:42 
Offline
Nowy

Dołączył(a): 21 mar 2019
Posty: 3
Pomógł: 0

Having both instance of class outside implementation file and fully opaque pointer requires dynamic allocation which is to be avoided. Furthermore, I think that to implement inheritance subclass has to know all about superclass.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 lis 2019, o 22:50 
Offline
Nowy

Dołączył(a): 21 mar 2019
Posty: 3
Pomógł: 0

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


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


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


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


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


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


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


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


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


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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 lis 2019, o 23:42 
Offline
Nowy

Dołączył(a): 15 maja 2017
Posty: 13
Pomógł: 0

23:42:27 **** Incremental Build of configuration Release for project zzzz ****
make all
'Building file: ../button.c'
'Invoking: AVR Compiler'
avr-gcc -Wall -Os -fpack-struct -fshort-enums -ffunction-sections -fdata-sections -std=gnu99 -funsigned-char -funsigned-bitfields -mmcu=attiny13 -DF_CPU=9600000UL -MMD -MP -MF"button.d" -MT"button.o" -c -o "button.o" "../button.c"
In file included from ../button.c:3:0:
../led.h:17:5: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'typedef'
typedef struct LedConfigSet {
^
In file included from ../button.c:4:0:
../button.h:8:5: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'typedef'
typedef struct ButtonConfigSet {
^
../button.c:8:5: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'static'
static void doFunction(Button * const me);
^
../button.c: In function 'rawState':
../button.c:12:31: error: 'ButtonConfigSet' has no member named 'port'
return *me->config->port & me->config->mask;
^
../button.c:12:50: error: 'ButtonConfigSet' has no member named 'mask'
return *me->config->port & me->config->mask;
^
../button.c: In function 'Button_init':
../button.c:22:13: warning: implicit declaration of function 'doFunction' [-Wimplicit-function-declaration]
doFunction(me);
^
../button.c: At top level:
../button.c:47:10: warning: conflicting types for 'doFunction' [enabled by default]
void doFunction(Button * const me)
^
../button.c:22:13: note: previous implicit declaration of 'doFunction' was here
doFunction(me);
^
../button.c: In function 'doFunction':
../button.c:51:34: error: 'ButtonConfigSet' has no member named 'onFunction'
if(me->config->onFunction)
^
../button.c:52:41: error: 'ButtonConfigSet' has no member named 'onFunction'
(*me->config->onFunction)();
^
../button.c:56:34: error: 'ButtonConfigSet' has no member named 'offFunction'
if(me->config->offFunction)
^
../button.c:57:41: error: 'ButtonConfigSet' has no member named 'offFunction'
(*me->config->offFunction)();
^
../button.c: In function 'rawState':
../button.c:13:5: warning: control reaches end of non-void function [-Wreturn-type]
}
^
make: *** [button.o] Błąd 1

23:42:27 Build Finished (took 237ms)



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

Dołączył(a): 24 sty 2012
Posty: 1469
Pomógł: 56

Przy kopiowaniu zabrakło Ci jakiegoś nawiasu klamrowego }
Taki przynajmniej masz komunikat.
Sprawdź sobie jeszcze raz skopiowany kod.

_________________
Jestem początkujący i moje porady mogą być błędne



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

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 5 gości


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:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO