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



Teraz jest 23 lut 2025, o 00:11


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 12 ] 
Autor Wiadomość
PostNapisane: 11 lis 2012, o 15:33 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 lip 2012
Posty: 306
Pomógł: 0

Witam. Dotarły do mnie książki i mogę dalej się szkolić z tego zakresu.
na początek zacząłem od wyświetlacza 7-segmentowego - multipleksowanie. Które w 90% wydaje mi się ze rozumiem.
Teraz chciałem wykorzystać czujnik temperatury i daną temperaturę eksponować na tym wyświetlaczu, a nie na LCD jak jest w książce. Na razie jestem na etapie przerabiania kodu ale zastanawia mnie dlaczego w przykładzie wykorzystano _delay_ms(750) jak wszyscy zalecają unikania tego. czy nie można tu zastosować pętli i taimera w tym przypadku ?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 lis 2012, o 15:35 
Offline
Moderator
Avatar użytkownika

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

A gdzie ty tam widzisz ten _delay_ms(750) ? ;) może przed pętlą główną - co ma swoje uzasadnienie - ale w pętli głównej działają już timery programowe więc coś musiało ci się pomylić :(

_________________
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: 11 lis 2012, o 15:49 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 lip 2012
Posty: 306
Pomógł: 0

Nie w pętli głównej tego nie ma jest tylko w main
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

A to znaczy że tylko w pętli głównej nie może te opóźnienie wystąpić ?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 lis 2012, o 16:01 
Offline
Moderator
Avatar użytkownika

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

Źle zrozumiałeś - pętla główna to dopiero najważniejsza część programu w której najlepiej nie korzystać z delayów. I dlatego w niej ich nie ma.... Opóźnienia są panie kochany wtedy realizowane przez timery programowe i jest to opisane w tym rozdziale - może coś ci umknęło ?

A to że przed pętlą główną raz użyłem delay'a nie ma żadnego znaczenia - przecież on nie zakłóca w żaden sposób obiegu pętli głównej czyli głównego programu, a to jest NAJWAŻNIEJSZE - teraz jaśniej ?

_________________
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: 11 lis 2012, o 17:01 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 01 lis 2011
Posty: 266
Lokalizacja: Szczecin
Pomógł: 9

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


Kolegę mogło zmylić słówko main, które nie oznacza głównej pętli programu :)

_________________
www.gryfsmart.pl



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

Dołączył(a): 28 lip 2012
Posty: 306
Pomógł: 0

Wiedziałem gdzie jest pętla główna, nie zmyliła mnie funkcje main tylko myślałem że zalecane jest w ogóle nie korzystać z opóźnień delay
Ale teraz wszystko jasne w tym zakresie :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 lis 2012, o 17:23 
Offline
Moderator
Avatar użytkownika

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

z funkcjami delay jest jak z alkoholem, czyli są dla ludzi ale trzeba wiedzieć kiedy, ile i gdzie ich użyć aby nie przesadzić ;)

_________________
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: 11 lis 2012, o 17:40 

Pomógł: 0

Mówiąc jeszcze prościej to co dzieje się przed główna pętlą programu jest inicjacją. W tym przypadku po włączeniu zasilania procesor jest dużo szybciej gotowy niż czujniki, więc musi poczekać. Równie dobrze można by w tym czasie zrobić jakaś animacje na wyświetlaczu która zajmuje ok sekundy.

Podobnie rozwiązane miałem w zadaniu nr6 zmianę trybu działania programu, przed pętlą główną umieściłem warunek sprawdzający stan czujnika. I tak przed pętlą był jeszcze umieszczony delay celem ustabilizowania rezystorów pociągających wewnątrz procesora, ale Mirek już o tym pisał. Jak widzisz czasem czas, który ustawiasz w fusach jest za krótki by wszystkie zewnętrzne komponenty były gotowe do działania.



Góra
  
cytowanie selektywne  Cytuj  
PostNapisane: 11 lis 2012, o 19:34 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 lip 2012
Posty: 306
Pomógł: 0

A mam taki problem z moim pomiarem temp.
Raczej pomiar i wyświetlanie działa tylko głowie się jak tu zrobić kropkę (jako przecinek) na 3 cyfrze.

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


Jak mogę zrobić by przy 3 cyfrze świeciła się cały czas kropka. Już różne sposoby próbowałem i nic :(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 lis 2012, o 20:35 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

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

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 lis 2012, o 10:19 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 lip 2012
Posty: 306
Pomógł: 0

Dziękuje @Krauser pomoglo.

Mam jeszcze jeden dylemat. Do mojego układu podłączyłem drugi termometr.
tylko że mam 4x wyświetlacz 7segmentowy to wyświetlam tylko jedną temperaturę w danej chwili.
A druga temperatura wyświetla się po wciśnięciu przycisku.
Układ działa tak że jak przycisnę przycisk i trzymam to co około 3s miga.
Nie jest to raczej spowodowane drganiami styku, tylko że w złym miejscu wstawiłem ten warunek sprawdzający przycisk?
Kod:
   /* pętla nieskończona */
   while(1) {

      if(s1_flag) {   /* sprawdzanie flagi tyknięć timera programowego co 1 sekundę */

         /* co trzy sekundy gdy reszta z dzielenia modulo 3 == 0 sprawdzaj ilość dostępnych czujników */
         if( 0 == (sekundy%3) ) czujniki_cnt = search_sensors();

         /* co trzy sekundy gdy reszta z dzielenia modulo 3 == 1 wysyłaj rozkaz pomiaru do czujników */
         if( 1 == (sekundy%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 == (sekundy%3)) {
            if(~KEY_DOWN)
            if (DS18X20_OK == DS18X20_read_meas(gSensorIDs[0], &subzero, &cel, &cel_fract_bits)) display_temp(0);
            else {
                  cy1=E;
                  cy2=r;
                  cy3=r;   
                  cy4=NIC;   
            
            }
            if(KEY_DOWN)
            if (DS18X20_OK == DS18X20_read_meas(gSensorIDs[1], &subzero, &cel, &cel_fract_bits)) display_temp(9);
            else {
                  cy1=E;
                  cy2=r;
                  cy3=r;   
                  cy4=NIC;
            
            }
         }

         /* zerujemy flagę aby tylko jeden raz w ciągu sekundy wykonać operacje */
         s1_flag=0;
      } /* koniec sprawdzania flagi */
   } /* koniec pętli nieskończonej */
}



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 lis 2012, o 12:42 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

A jak przycisk jest puszczony to nie miga co 3 sekundy? Nie przedstawiłeś nam swojej wersji funkcji display_temp
Zamiast if(~KEY_DOWN) daj if(1), a zamiast if(KEY_DOWN) daj if(0) i zobacz co będzie.

_________________
Dragonus Cracovus: Biomagia



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

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 3 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