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



Teraz jest 12 kwi 2026, o 12:35


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 19 ] 
Autor Wiadomość
PostNapisane: 21 lut 2014, o 20:07 
Offline
Użytkownik

Dołączył(a): 25 lis 2013
Posty: 28
Pomógł: 0

Witam,
Panowie jak przerobić ten kod aby po przyciśnięciu przycisku światło powoli się zapaliło, a po przyciśnięciu kolejny raz tego samego przycisku powoli zgasło. A gdy podczas gdy jest światło włączone przyciśniemy jeszcze raz przycisk na dłużej niż jedną sekundę, wówczas światło zacznie się ściemniać (sciemnianie do 20% nie mniej) i rozjaśniać na przemian aż nie zwolnimy przycisku tym samym ustalając wartość natężenia światła. Układ na atmega8 8MHz, 8 kanałów, ale na razie kombinuję na jednym :)
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: 22 lut 2014, o 00:12 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 29 sty 2012
Posty: 777
Lokalizacja: Karpicko k. Wolsztyna
Pomógł: 197

Ja bym wykorzystał do obsługi klawisza funkcję Superdebounce.

W funkcji krótkiego wciśnięcia zmieniał bym stan jakiejś flagi a w pętli głównej w zależności od stanu tej flagi rozjaśniał lub ściemniał żarówkę. Rozjaśnianie i ściemnianie zrobiłbym na timerach programowych a nie na pętlach for po to żeby pętla główna wykonywała się z jak największa szybkością.

Natomiast naprzemienne rozjaśnianie i ściemnianie zrobiłbym w funkcji Repeat wywoływanej po wciśnięciu i przytrzymaniu przycisku.
Trzymając wciśnięty klawisz co określony czas zostaje wywoływana funkcja rep_proc(). W tej funkcji, co każde jej wywołanie, zmieniałbym poziom jasności. Rozjaśnianie i ściemnianie byłoby zależne od stanu zmiennej flagi. Stan flagi zmieniałby się po rozjaśnieniu i po ściemnieniu żarówki. W ten sposób żarówka wciąż by się rozjaśniała i ściemniała.
Szybkość zmian byłaby zależna od parametru rep_time, który ustala częstotliwość wywoływania funkcji rep_proc().

To tak w skrócie.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 lut 2014, o 00:27 
Offline
Użytkownik

Dołączył(a): 25 lis 2013
Posty: 28
Pomógł: 0

jacekk232 ale mnie zmuszasz do myślenia :) aż mi się w głowie gotuje... W języku drabinkowym na PLC nie miałbym z tym problemów, ale w C jestem bardzo początkującym :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 lut 2014, o 21:03 
Offline
Użytkownik

Dołączył(a): 25 lis 2013
Posty: 28
Pomógł: 0

Próbuję coś wykombinować z kodem z bloga Mirka o drganiach styków (reakcja na przyciśnięcie i puszczenie klawisza). Załączenie następowało by po wciśnięciu a wyłączenie po zwolnieniu klawisza. trzeba by było jakoś zabezpieczyć aby wyłączenie nie nastąpiło zaraz po wciśnięciu i zwolnieniu (jako zaświecenie światła - jedna operacja). Kolejne przyciśnięcie i przytrzymanie (jeżeli jest włączone światło - zmienna "wlacznik") powiedzmy 1s uruchamiałoby funkcję, która zmieniałaby wartość zmiennej "i" (procent(i)) zmniejsza i zwiększa w zakresie 20 - 100. Po tej czynność również nie mogłaby zadziałać reakcja na zwolnienie przycisku. Reakcja na zwolnienie mogłaby zadziałać tylko po krótkim przyciśnięciu i zwolnieniu przycisku jeżeli jest aktualnie włączone światło. Na razie powrzucałem wszystko do jednego "worka" i próbuję to jakoś poukładać. Podpowiedzcie proszę czy w dobrą stronę kombinuję.
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: 24 lut 2014, o 22:29 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 29 sty 2012
Posty: 777
Lokalizacja: Karpicko k. Wolsztyna
Pomógł: 197

llemar napisał(a):
W języku drabinkowym na PLC nie miałbym z tym problemów, ale w C jestem bardzo początkującym
No to zupełnie odwrotnie niż ja :-)

Ja myślałem żeby zrobić coś w tym stylu
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Kod funkcji SuperDebounce wziąłem z płyty DVD z lekcji 17_SuperDebounce.

W kodzie zakomentowałem nie używane fragmenty. Fragment kodu z Timerem3 i diodą LED nie jest potrzebny. Ale często w swoich projektach tak robię. Jeśli dioda miga to wiem że timery programowe działają a pętla główna nie ma zawiechy.

Kod pisany na szybko i nie jest zoptymalizowany. Chciałem pokazać ideę jak ja bym to mniej więcej zrobił aby wszystko działało w sposób nieblokujący.


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 lut 2014, o 14:12 
Offline
Użytkownik

Dołączył(a): 25 lis 2013
Posty: 28
Pomógł: 0

Dziękuję Jecekk232 :) jak będę w domu to się pobawię :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 lut 2014, o 23:22 
Offline
Użytkownik

Dołączył(a): 25 lis 2013
Posty: 28
Pomógł: 0

Kombinowałem i kombinowałem ...i chyba jednak musi być po mojemu :) Mam problem z fragmentem kodu do cyklicznego ściemniania i rozjaśniania (amplituda). Proszę o podpowiedzi :)
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 maja 2016, o 17:19 
Offline
Użytkownik

Dołączył(a): 02 cze 2014
Posty: 123
Pomógł: 0

Odświerze trochę temat nie będę zakładał nowego.
Wykonałem wspomniany w temacie regulator i mam problem tego typu ze mój AVR musi mierzyć jeszcze temperaturę z DS18B20. Jeśli jest wykonywany sam program regulacji mocy to jest wszystko OK. Jeśli jednak dołożę obsługę czujników DS to żarówka w chwili pomiaru czasami przygasa ma to związek z samą istotą działania programu dla obsługi DS. Nie wiem jak to pogodzić bo generalnie nie mogę na czas pomiaru wyłączać sterowania wyjściem 230V.

_________________
http://mojekonstrukcje.pl/



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 maja 2016, o 19:50 
Offline
Użytkownik

Dołączył(a): 04 cze 2013
Posty: 517
Pomógł: 26

llemar napisał(a):
Kombinowałem i kombinowałem ...i chyba jednak musi być po mojemu :) Mam problem z fragmentem kodu do cyklicznego ściemniania i rozjaśniania (amplituda). Proszę o podpowiedzi :)
]


Kolego zastąp delay flagami wyznaczonymi przez przerwanie. Bo przecież delay wstrzymuje ci cały program na określony czas a avr może wykonywać inne czynności w tym czasie zamiast odpoczywać

TomekTomek55 napisał(a):
Odświerze trochę temat nie będę zakładał nowego.
Wykonałem wspomniany w temacie regulator i mam problem tego typu ze mój AVR musi mierzyć jeszcze temperaturę z DS18B20. Jeśli jest wykonywany sam program regulacji mocy to jest wszystko OK. Jeśli jednak dołożę obsługę czujników DS to żarówka w chwili pomiaru czasami przygasa ma to związek z samą istotą działania programu dla obsługi DS. Nie wiem jak to pogodzić bo generalnie nie mogę na czas pomiaru wyłączać sterowania wyjściem 230V.


Kolego a może jakiś fragment kodu, gdzie co wstawiłeś ,ciężko wróżyć z fusów :)

_________________
Przewodnik|Sterownik akwariowy



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 maja 2016, o 20:03 
Offline
Użytkownik

Dołączył(a): 02 cze 2014
Posty: 123
Pomógł: 0

Nie chodzi o wróżenie z fusów wiadoma sprawa ale nie chciałem wstawiać na forum gotowych kodów Mirka. Mam jego bibliotekę do DS obslugi i do regulacji mocy 230 też. Jak ktoś jest wtajemniczony i ma te bibloteki to ja mam dokładnia tekie same więc wie o co chodzi. Dla testow w petni glownej mam tylko regulacje mocy z lekcji 18 i jak zrobie wywolanie funkcji pomiarowej to sie regulacja sypie. Mogę powiedzieć i potestowałem to ze jak zaremuje omine opóźnienie //_delay_us(480); w funkcji ow_reset(void) to jest ok.

_________________
http://mojekonstrukcje.pl/



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 maja 2016, o 20:16 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 17 mar 2015
Posty: 202
Pomógł: 15

Kolego nie chodzi byś wstawiał gotowe biblioteki lecz ich obsługę zawarta w pliku main

Wysłane z mojego HTC One_M8 przy użyciu Tapatalka



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 maja 2016, o 20:24 
Offline
Użytkownik

Dołączył(a): 02 cze 2014
Posty: 123
Pomógł: 0

Kod:
while(1)
{//petla nieskonczona

kanal1 = procent(40);   //funkcja regulacji mocy

if (FlagaDokonajPomiaru == true ) {  //co 1s ustawiana w przerwaniu
   FlagaDokonajPomiaru = false;
   Pomiar_temperatury(Sekundy); //     jak to zaremuje t jest ok
}




}//petla nieskonczona




_________________
http://mojekonstrukcje.pl/



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 maja 2016, o 20:46 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 17 mar 2015
Posty: 202
Pomógł: 15

A jednak to będą fusy. Po pierwsze naucz się prawidłowo wklejać kod. Po drugie nie chcesz chyba nam powiedzieć, że tak wygląda twój plik min???

Wysłane z mojego HTC One_M8 przy użyciu Tapatalka



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 maja 2016, o 20:50 
Offline
Użytkownik

Dołączył(a): 04 cze 2013
Posty: 517
Pomógł: 26

Kolego to co wkleiłeś to nadal wróżenie z fusów. Jeśli w twojej funkcji pomiar_temperatury jest delay a pewnie jest bo czujnik DS potrzebuje 750ms do konwersji temperatury więc dla tego ci się sypie program bo wstrzymujesz pracę AVR

Ps kod wklejamy za pomocą syntax C :) A kolega mnie uprzedził

_________________
Przewodnik|Sterownik akwariowy



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 maja 2016, o 21:15 
Offline
Użytkownik

Dołączył(a): 02 cze 2014
Posty: 123
Pomógł: 0

Wnętrze mojej funkcji "Pomiar_temperatury" to już Mirkowa funkcja pomiarowa korzystająca z jego bibliotek. I tak jak wspomniałem wczesniej to własnie tam jest opoznienie _delay_us(480); w funkcji ow_reset(void) i z tym mam problem jak to ominąć.

_________________
http://mojekonstrukcje.pl/



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 maja 2016, o 21:29 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 17 mar 2015
Posty: 202
Pomógł: 15

Coś kolego ciężko z komunikacją między nami. Jeszcze raz sprubuje. Nikt nie mówi byś publikował "Mirkowe" biblioteki, masz po prostu pokazać nam jak je obsługujesz. Najprawdopodobniej problem jest z delayami. Zmień kod w taki sposób by pomiar temperatury wykonywać poprzez tajmera a nie opóźniać go delayem.

Wysłane z mojego HTC One_M8 przy użyciu Tapatalka



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 maja 2016, o 21:39 
Offline
Użytkownik

Dołączył(a): 02 cze 2014
Posty: 123
Pomógł: 0

Kod:
void Pomiar_temperatury(uint8_t Sekunda)
{////////////////////////DS18B20 /////////////////////////////////////////
static uint8_t  StanPoprzedni;
  if( Sekunda != StanPoprzedni ) {   /* sprawdzanie flagi tyknięć timera programowego co 1 sekundę */
     StanPoprzedni = Sekunda;
         /* co trzy sekundy gdy reszta z dzielenia modulo 3 == 0 sprawdzaj ilość dostępnych czujników */
         if( 0 == (Sekunda%3) ) {
            uint8_t *cl=(uint8_t*)gSensorIDs;   // pobieramy wskaźnik do tablicy adresów czujników
            for( uint8_t i=0; i<MAXSENSORS*OW_ROMCODE_SIZE; i++) *cl++ = 0; // kasujemy całą tablicę
            czujniki_cnt = search_sensors();   // ponownie wykrywamy ile jest czujników i zapełniamy tablicę
         }
         /* co trzy sekundy gdy reszta z dzielenia modulo 3 == 1 wysyłaj rozkaz pomiaru do czujników */
         if( 1 == (Sekunda%3) )
         {
         DS18X20_start_meas( DS18X20_POWER_EXTERN, NULL );
         }
         /* co trzy sekundy gdy reszta z dzielenia modulo 3 == 2 czyli jedną sekundę po rozkazie konwersji
          *  dokonuj odczytu i wyświetlania temperatur z 2 czujników jeśli są podłączone, jeśli nie
          *  to pokaż komunikat o błędzie
          */
         if( 2 == (Sekunda%3) ) {
            uint8_t a;
             for (a = 0; a < 4; ++a) {
               if( DS18X20_OK == DS18X20_read_meas(gSensorIDs[a], &subzero, &cel, &cel_fract_bits) ){
                   CzujnikNr[a].TempLiczba = cel *10 + cel_fract_bits;
                   CzujnikNr[a].Blad = 0;
                   if(subzero) { //jesli temp jemna to zruj
                      cel = 0;
                      cel_fract_bits = 0;
                   }
               } else {CzujnikNr[a].Blad = 1;}  //Blad czujnika temp
            }


         }

         /* zerujemy flagę aby tylko jeden raz w ciągu sekundy wykonać operacje */
      } /* koniec sprawdzania flagi */

}   ////////////////////////DS18B20 ///////////////////////////////////////







Tak to wygląda w środku a delayus(480) jest juz w funkcji Mirkowej a NIE mojej.

_________________
http://mojekonstrukcje.pl/



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 maja 2016, o 21:55 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 17 mar 2015
Posty: 202
Pomógł: 15

I znowu po 1 kolego kod wklejamy syntax c. Po 2 sorry ale rozmawiasz z nami jak byś dzwonił do lekarza i powiedział mu "panie doktorze chory jestem" i oczekiwał, że po takim info doktorek poda ci diagnozę i przepisze leki. Nic z tego kolego wklejaj cały kod OBSŁUGI!! Mirkowych bibliotek wtedy coś poradzimy.

Wysłane z mojego HTC One_M8 przy użyciu Tapatalka



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 maja 2016, o 00:05 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 sty 2013
Posty: 1760
Pomógł: 196

Witam
W.g mnie jeśli kol.TomekTomek55 operuje gotowymi bibliotekami to posiada wszystkie projekty z BB. Co stoi na przeszkodzie wziąć "Projekt wielozadaniowy", wyrżnąć to co niepotrzebne i ma działać ( wyrżnąć a nie zarżnąć - to muszą być precyzyjne cięcia ). A jeśli nie, to przynajmniej popatrzeć jak bez _delay: ds, 7_LED, LCD i pozostałe bajery są zaprzęgnięte do pracy. To "śpiewa, tańczy i gotuje" i jeszcze mruga ;)

Pozdr.



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 10 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