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? 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 8 cze 2025, o 10:51


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 11 ] 
    Autor Wiadomość
    PostNapisane: 10 lis 2017, o 00:40 
    Offline
    Nowy

    Dołączył(a): 08 lis 2017
    Posty: 7
    Pomógł: 0

    ObrazekObrazekObrazek


    ---ATtiny85---
    Brak błędów.

    Witam Wszystkich,

    jestem całekiem nowy i spotkałem się z problemem. Programator firmy Atnel usbAsp 4.1 widzi i ładnie programuje, ale problem polega na tym , że po podłączeniu diody pod gnd i zaprogramowany pin , dioda miga z jednostajną zęśtotliwością pomimo zmiany kodu. Kod się zmienia , odczytywałem. Po podłączeniu pod GND i Vcc programatora rónież ten sam objaw.

    Próbowałem bez F_cpu również.

    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.



    z góry dziękuję za pomoc.
    Adam



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 10 lis 2017, o 02:17 
    Offline
    Moderator
    Avatar użytkownika

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

    Pomijam już, że to #define F_CPU w kodzie do masakra ...

    ale sam kod ... hmmm a czegóż się po nim spodziewasz , jeśli w pętli głównej programu wstawiłeś "return 0" ?

    polecam tobie książkę

    http://atnel.pl/mikrokontrolery-avr-jezyk-c.html

    warto od niej zacząć i pisać takie pierwsze kody z pełnym zrozumieniem - bo już na samym jej początku dotyczącym pierwszych programów na procka wyjaśniam co, jak i gdzie a także od czego zależy - do czego jest "return 0" i dlaczego się z tego nie korzysta w zasadzie w prockach - gdy stosuje się pętlę główną ..... ty zaś mieszasz to jak się tylko da

    ------------------------ [ Dodano po: 2 minutach ]

    krótko mówiąc wywal ten "return 0" ;) ale dalej kod nie będzie ci działać pewnie zgodnie z oczekiwaniem w pełni więc wywal też z kodu i nigdy nie używaj

    #define F_CPU ... chociaż to też tu nie jest problemem i kod dalej nie będzie działać pewnie tak jak chcesz - no ale będzie działać poprawnie ;)

    tobie za to łatwiej będzie go dalej rozbudowywać

    Za to PODSTAWĘ na miganie diodą LED znajdziesz ZAWSZE tutaj:

    http://mirekk36.blogspot.com/2015/07/ec ... ogram.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 2017, o 02:21 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 09 gru 2014
    Posty: 1540
    Pomógł: 269

    Na początek, któtka analiza tego co napisałeś.
    No to po kolei...

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

    Tej linijki kodu nigdy nie wpisujemy w kodzie, tylko ustawiamy we właściwościach projektu.

    Zerowanie więcej niż jednego bitu lepiej zapisać tak:
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

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


    Jeszcze przed pętlą główną ustawiasz PB3 i PB4 w rejestrze kierunku jako wyjścia.
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

    Następnie ustawiasz na nich stan niski. Z tego co widzę, masz podłączoną jedną diodę LED jej anodą do Vcc, więc by dioda ta się zaświeciła musisz podać stan niski na jej katodę. Stan wysoki natomiast podajesz na jej katodę, by je wyłączyć. W takim razie na samym początku teoretycznie (bo masz podłączoną tylko jedną diodę do chyba PB3) obie diody zostaną zapalone.
    Teraz program wchodzi do pętli głównej while(1) i napotyka na linijkę, która gasi diodę podłączoną do PB3:
    PORTB |= (1<<PB3);
    Następnie czeka sobie 1000ms.
    Po czym gasi drugą diodę podłączoną do PB4.
    PORTB |= (1<<PB4);
    Znowu czeka 1000ms.
    Po czym napotyka na instrukcję return.
    Instrukcja return powoduje wyjście, opuszczenie funkcji, więc program ten kończy swoje działanie.

    Jeżeli Twoim celem było napisanie programu, który ma zapalić diodę na PB3, po sekundzie zapalić diodę na PB4, przez kolejną sekundę diody te mają się świecić, po czym na sekundę mają zgasnąć i tak w kółko, to program ten mógłby wyglądać tak:
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    Widzisz dodałem jeszcze jednego delay'a, bo bez niego dioda PB3 będzie się cały czas świecić.
    Będzie tak dlatego, że po wykonaniu tej linijki kodu:
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

    program przeskoczy do tej na samym początku w pętli while:
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

    Nie będziesz w stanie zaobserwować jej zgaszenia.
    Natomiast dioda podłączona do PB4 będzie zapalała się na 1000ms i gasła na 1000ms.

    Osobiście polecam Ci zacząć przede wszystkim od książki:
    http://atnel.pl/mikrokontrolery-avr-jezyk-c.html
    i od poczytania bloga:
    http://mirekk36.blogspot.co.uk/2012/01/avr-porty-wewy-dir-podstawy.html
    http://mirekk36.blogspot.co.uk/2015/07/eclipse-start-plus-pierwszy-program.html
    http://mirekk36.blogspot.co.uk/2011/11/dlaczego-eclipse-zamiast-avr-studio.html

    Powodzenia! ;)

    O i Mirek mnie ubiegł! ;)


    Autor postu otrzymał pochwałę


    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 10 lis 2017, o 08:44 
    Offline
    Nowy

    Dołączył(a): 08 lis 2017
    Posty: 7
    Pomógł: 0

    Panowie,
    jesteście szybcy jak błyskawica. Jak tylko usiądę do lektury(książkę zamówię , ale blog zacznę jużdziś) i zweryfikuję moje błędy, będę raportował.

    dziękuję za odpowiedzi
    Adam



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 10 lis 2017, o 09:59 
    Offline
    Nowy

    Dołączył(a): 08 lis 2017
    Posty: 7
    Pomógł: 0

    anshar napisał(a):
    Na początek, któtka analiza tego co napisałeś.
    No to po kolei...

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

    Tej linijki kodu nigdy nie wpisujemy w kodzie, tylko ustawiamy we właściwościach projektu.

    Zerowanie więcej niż jednego bitu lepiej zapisać tak:
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

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


    Jeszcze przed pętlą główną ustawiasz PB3 i PB4 w rejestrze kierunku jako wyjścia.
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

    Następnie ustawiasz na nich stan niski. Z tego co widzę, masz podłączoną jedną diodę LED jej anodą do Vcc, więc by dioda ta się zaświeciła musisz podać stan niski na jej katodę. Stan wysoki natomiast podajesz na jej katodę, by je wyłączyć. W takim razie na samym początku teoretycznie (bo masz podłączoną tylko jedną diodę do chyba PB3) obie diody zostaną zapalone.
    Teraz program wchodzi do pętli głównej while(1) i napotyka na linijkę, która gasi diodę podłączoną do PB3:
    PORTB |= (1<<PB3);
    Następnie czeka sobie 1000ms.
    Po czym gasi drugą diodę podłączoną do PB4.
    PORTB |= (1<<PB4);
    Znowu czeka 1000ms.
    Po czym napotyka na instrukcję return.
    Instrukcja return powoduje wyjście, opuszczenie funkcji, więc program ten kończy swoje działanie.

    Jeżeli Twoim celem było napisanie programu, który ma zapalić diodę na PB3, po sekundzie zapalić diodę na PB4, przez kolejną sekundę diody te mają się świecić, po czym na sekundę mają zgasnąć i tak w kółko, to program ten mógłby wyglądać tak:
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    Widzisz dodałem jeszcze jednego delay'a, bo bez niego dioda PB3 będzie się cały czas świecić.
    Będzie tak dlatego, że po wykonaniu tej linijki kodu:
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

    program przeskoczy do tej na samym początku w pętli while:
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

    Nie będziesz w stanie zaobserwować jej zgaszenia.
    Natomiast dioda podłączona do PB4 będzie zapalała się na 1000ms i gasła na 1000ms.

    Osobiście polecam Ci zacząć przede wszystkim od książki:
    http://atnel.pl/mikrokontrolery-avr-jezyk-c.html
    i od poczytania bloga:
    http://mirekk36.blogspot.co.uk/2012/01/avr-porty-wewy-dir-podstawy.html
    http://mirekk36.blogspot.co.uk/2015/07/eclipse-start-plus-pierwszy-program.html
    http://mirekk36.blogspot.co.uk/2011/11/dlaczego-eclipse-zamiast-avr-studio.html

    Powodzenia! ;)

    O i Mirek mnie ubiegł! ;)




    Cytuj:
    #include <avr/io.h>
    #include <util/delay.h>

    int main(void)
    {
    DDRB |= (1<<PB3);
    PORTB |= (1<<PB3);

    while (1)
    {
    PORTB &= ~(1<<PB3); // zapalenie diody podłączonej jej katodą do PB3


    }
    }


    Proszę o wyjaśnienie ostatniego tematu, który nie daje mi spokoju.
    Uprościłem kod do minimum moich możliwości. Próbuję zapalić PB3 na stałe.


    Katoda diody na PB3 - Anoda diody na Vcc


    wynik poniżej :






    Proszę o wyjaśnienie.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 10 lis 2017, o 10:34 
    Offline
    Użytkownik

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

    Film jest niedostępny :-(
    Oczywiście diodę podłączyłeś przez rezystor?

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



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 10 lis 2017, o 10:51 
    Offline
    Nowy

    Dołączył(a): 08 lis 2017
    Posty: 7
    Pomógł: 0

    MirkoT napisał(a):
    Film jest niedostępny :-(
    Oczywiście diodę podłączyłeś przez rezystor?


    Dioda przez rezystor.


    Teraz Film powinien działać.

    [youtube]https://youtu.be/usVVs0XTTKc[/youtube]



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

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

    A może to jest migająca dioda? Są takowe...
    Podłącz ją tylko pod zasilanie (przez rezystor) bez procka.


    Autor postu otrzymał pochwałę

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



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 10 lis 2017, o 11:14 
    Offline
    Nowy

    Dołączył(a): 08 lis 2017
    Posty: 7
    Pomógł: 0

    MirkoT napisał(a):
    A może to jest migająca dioda? Są takowe...
    Podłącz ją tylko pod zasilanie (przez rezystor) bez procka.



    Ja piórkuje. No przecież!!! Tak właśnie jest.

    Zawiodlem na samym początku, nie te diody,.Co gorsza, nie sprawdziłem co wyciągam z pudła!!!

    Dziękuję wszystkim

    Bardzo spodobał o mi się forum i programowanie dzięki video Pana Mirka, ale użytkownicy forum sa rownie pomocni .

    Temat do zamknięcia

    Wszystko się ładnie programuje.



    Blad:

    Dioda sprawdzająca poprawność programowania niewłaściwa. !!!!migająca!!!



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 10 lis 2017, o 14:36 
    Offline
    Nowy

    Dołączył(a): 08 lis 2017
    Posty: 7
    Pomógł: 0

    mirekk36 napisał(a):
    Pomijam już, że to #define F_CPU w kodzie do masakra ...

    ale sam kod ... hmmm a czegóż się po nim spodziewasz , jeśli w pętli głównej programu wstawiłeś "return 0" ?

    polecam tobie książkę

    http://atnel.pl/mikrokontrolery-avr-jezyk-c.html

    warto od niej zacząć i pisać takie pierwsze kody z pełnym zrozumieniem - bo już na samym jej początku dotyczącym pierwszych programów na procka wyjaśniam co, jak i gdzie a także od czego zależy - do czego jest "return 0" i dlaczego się z tego nie korzysta w zasadzie w prockach - gdy stosuje się pętlę główną ..... ty zaś mieszasz to jak się tylko da

    ------------------------ [ Dodano po: 2 minutach ]

    krótko mówiąc wywal ten "return 0" ;) ale dalej kod nie będzie ci działać pewnie zgodnie z oczekiwaniem w pełni więc wywal też z kodu i nigdy nie używaj

    #define F_CPU ... chociaż to też tu nie jest problemem i kod dalej nie będzie działać pewnie tak jak chcesz - no ale będzie działać poprawnie ;)

    tobie za to łatwiej będzie go dalej rozbudowywać

    Za to PODSTAWĘ na miganie diodą LED znajdziesz ZAWSZE tutaj:

    http://mirekk36.blogspot.com/2015/07/ec ... ogram.html



    Dziękuję, powoli liniowo uczę się. Ma Pan jeszcze książki w magazynie?

    Największym problemem okazała się dioda migająca miast zwykłej, najzwyklejszej.

    Teraz kod działa jak powinien, aktualnie wygląda tak:
    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.



    Ledy zapalają się jedna po drugiej , gasną na 1 sek i od początku.

    Pozdrawiam
    Adam



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 11 lis 2017, o 15:15 
    Offline
    Użytkownik

    Dołączył(a): 25 lip 2013
    Posty: 2596
    Pomógł: 129

    Wejdź na stronę sklepu Atnel i sprawdź czy są książki na stanie.



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

    Strefa czasowa: UTC + 1


    Kto przegląda forum

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


    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