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

KURS HOME ASSISTANT

Chcesz zautomatyzować swój dom bez skomplikowanego kodowania?
Zastanawiasz się nad wyborem sprzętu, oprogramowania i aplikacji?
Od czego zacząć przygodę z HA w 2025? Co będzie najlepsze na start?

Nasz kurs Home Assistant nauczy Cię krok po kroku, jak łatwo zautomatyzować swój dom i oszczędzić na rachunkach za prąd i ogrzewanie. Bez chmur, bez zbędnych abonamentów. Twoja przygoda z Home Assistant zaczyna się tutaj!

↓↓↓

    Szanujemy Twoją prywatność. Możesz wypisać się w dowolnym momencie.




    Teraz jest 30 kwi 2025, o 03:49


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 15 ] 
    Autor Wiadomość
    PostNapisane: 4 gru 2012, o 23:22 
    Offline
    Użytkownik

    Dołączył(a): 29 paź 2012
    Posty: 45
    Pomógł: 0

    Chce napisać program który po czasie 20 sekundach zgasi diodę, poniższy program gasi po 14 sekundach i niemam pojęcia dlaczego
    Składnia: [ Pobierz ] [ Ukryj ] [ Zaznacz wszystko ]
    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: 4 gru 2012, o 23:25 
    Offline
    Moderator
    Avatar użytkownika

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

    A możesz mi powiedzieć dlaczego wszędzie stosujesz typ int ????

    _________________
    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: 4 gru 2012, o 23:30 
    Offline
    Użytkownik

    Dołączył(a): 29 paź 2012
    Posty: 45
    Pomógł: 0

    na początku stosowałem uint_8 ale był ten sam problem, zmieniłem na inta i tak zostało



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 4 gru 2012, o 23:35 
    Offline
    Użytkownik

    Dołączył(a): 18 paź 2012
    Posty: 244
    Pomógł: 2

    Sprawdź czy zgadzają Ci się fusebity z częstotliwością w Eclipse (lub innym używanym przez Ciebie środowisku)

    A już tak abstrahując od tematu, to dlaczego po 20 sekundach inkrementujesz minuty? :D



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 5 gru 2012, o 00:16 
    Offline
    Moderator
    Avatar użytkownika

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

    flisy2 napisał(a):
    na początku stosowałem uint_8 ale był ten sam problem, zmieniłem na inta i tak zostało


    ok ale wiesz do czego są typy zmiennych - czy tylko stosujesz je tak na "chybił trafił" a jak widać przy okazji "częściej nie trafił" :(

    postaraj się pisać program od podstaw (a właściwe dobieranie typów zmiennych to podstawa podstaw) dobrze i prawidłowo a co NAJWAŻNIEJSZE ze zrozumieniem - a nie że coś zadziała czy nie zadziała OK?

    Masz tę książkę?

    http://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: 5 gru 2012, o 08:31 
    Offline
    Użytkownik

    Dołączył(a): 16 maja 2012
    Posty: 349
    Lokalizacja: Legnica
    Zbananowany użytkownik

    Pomógł: 23

    Patrząc na kod typ zmiennych nie ma znaczenia. U kol. flisy2 minuta ma 20s a licznik minut przekręca się po doliczeniu do 65535 i to są rzeczy umowne. To tylko reszta świata umówiła się że minuta ma 60s a w godzinie minut również jest 60. A jeżeli _delay_ms(1000) czeka 0,7s to znaczy, że serduszko procka bije szybciej niż myśli sobie o tym procedura _delay_ms(). Ponadto zapalona dioda zgaśnie ale już się nie zapali.

    _________________
    sig off ;(



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 5 gru 2012, o 09:58 
    Offline
    Użytkownik

    Dołączył(a): 15 lut 2012
    Posty: 344
    Lokalizacja: Bydgoszcz
    Pomógł: 11

    Ja bym na twoim miejscu przyjrzał się ustawieniom optymalizacji kodu, ponieważ nie właściwa opcja może doprowadzić do złego działania funkcji delay_us, delay_ms itp. Kiedyś jak przerabiałem pewną bibliotekę do 1-wire i wtedy należało ustawić odpowiednią optymalizację by rzeczone funkcję opóźniające działały poprawnie.

    Teraz dokładnie nie pamiętam jaką opcję wybierałem ale zdaje się że to było -O2 albo -O0.

    Ścieżka dojścia do opcji: Project->Properties->C\C++ Build->Settings->ToolSettings->AVR Compiler->Optimization

    Swoją drogą do tego co robisz mógłbyś użyć timerów programowych, wtedy masz pewność że jest to dokładne i nie blokujące.

    Jeszcze jedno ja w pętli for zmieniłbym 61 na na 60 bo w twoim wypadku pętla obraca się więcej niż 60 razy.

    Pozdrawiam!



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 5 gru 2012, o 11:55 
    Offline
    Użytkownik

    Dołączył(a): 29 paź 2012
    Posty: 45
    Pomógł: 0

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

    Dioda gaśnie po 7 sekundach zamiast po 10.
    Zmiany w optymalizacji nic niedały
    MichalXY napisał(a):
    Swoją drogą do tego co robisz mógłbyś użyć timerów programowych, wtedy masz pewność że jest to dokładne i nie blokujące.


    Czy mógł byś zrobić taki prosty timer?
    Obrazek



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 5 gru 2012, o 12:49 
    Offline
    Użytkownik

    Dołączył(a): 18 paź 2012
    Posty: 244
    Pomógł: 2

    Podaj częstotliwość taktowania oraz typ procka.

    Chociaż z tego co dedukuje używasz taktowania 1MHz, napisz jeszcze jaki procek.



    Ostatnio edytowano 5 gru 2012, o 12:57 przez kiclaw, łącznie edytowano 1 raz

    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 5 gru 2012, o 12:55 
    Offline
    Użytkownik

    Dołączył(a): 29 paź 2012
    Posty: 45
    Pomógł: 0

    atmega32 8MHz



    Ostatnio edytowano 5 gru 2012, o 16:41 przez flisy2, łącznie edytowano 1 raz

    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 5 gru 2012, o 13:16 
    Offline
    Użytkownik

    Dołączył(a): 18 paź 2012
    Posty: 244
    Pomógł: 2

    Chyba 8MHz :]

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


    Pamiętaj żeby w mkAVR Calculator ustawić oscylator 8MHz, w Eclipse też ustaw 8MHz.

    To raz, a dwa, to wszystko co tu napisałem jest w niebieskiej książce. Doczytaj.


    Autor postu otrzymał pochwałę


    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 5 gru 2012, o 16:43 
    Offline
    Użytkownik

    Dołączył(a): 29 paź 2012
    Posty: 45
    Pomógł: 0

    a podstawowy program dlaczego po 7 sekundach a nie po 10 gasi diodę?? jak rozwiązać ten problem



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 5 gru 2012, o 18:39 
    Offline
    Użytkownik

    Dołączył(a): 18 paź 2012
    Posty: 244
    Pomógł: 2

    Wg. mnie jak wcześniej pisałem nie ustawiłeś poprawnie fusebitów, albo nie zadeklarowałeś poprawnej częstotliwości w Eclipse. Ja innej możliwości nie widzę zwłaszcza że ten pierwszy programik jest bardzo prosty.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 5 gru 2012, o 21:17 
    Offline
    Użytkownik

    Dołączył(a): 29 paź 2012
    Posty: 45
    Pomógł: 0

    Zmieniłem częstotliwość na 11059200 i zlicza poprawnie tylko nie wiem dlaczego właśnie ta częstotliwość mógł by to mi ktoś wytłumaczyć?



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 5 gru 2012, o 21:23 
    Offline
    Użytkownik

    Dołączył(a): 04 paź 2011
    Posty: 8615
    Pomógł: 338

    bo Mirek ma kilka ton takich kwarców i nie wie co z nimi zrobić :)

    a tak poważnie to wynika on z tabelki częstotliwości i komunikacji USART - przy takim kwarcu po prostu niema błędów transmisji

    _________________
    Zbuduj swój system [url=https://helion.pl/ksiazki/w-labiryncie-iot-budowanie-urzadzen-z-wykorzystaniem-ukladow-esp8266-i-esp32-andrzej-gromczynski,wlablo.htm#format/d]IOT[/url]



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

    Strefa czasowa: UTC + 1


    Kto przegląda forum

    Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 8 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:  
    cron
    Sitemap
    Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
    phpBB SEO