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 sie 2025, o 18:06


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 6 ] 
    Autor Wiadomość
    PostNapisane: 2 paź 2016, o 18:00 
    Offline
    Nowy

    Dołączył(a): 18 lip 2016
    Posty: 2
    Pomógł: 0

    Witam.
    Zaprojektowałem układ i programowałem atmegę 8, którą wymieniłem na 328 bo pamięci zaczęło brakować.
    Po przestudiowaniu datasheeta dla atmegi328p przerobiłem program tak, by wszystko działało.

    Jednak niestety, program nie ruszył. Pomyślałem, cóż, zdarza się, i zacząłem eliminować niektóre funkcje - bez efektu, aż doszedłem do wniosku, że należałoby sprawdzić czy w ogóle procek działa.

    Napisałem coś, co nie może nie działać:
    Kod:

    #include <avr/io.h>

    int main(void)
    {
       DDRB=0x00;
       DDRC=0x00;
       DDRD = 0x01;
       PORTD = 0x01;
       
       while(1);
       return 0;
    }


    Jakie było moje zdziwienie, gdy w po zaprogramowaniu procesora dioda podłączona do pD.0 miga!!!
    Ustaliłem za pomocą oscyloskopu, że po ustawieniu wartości pinu program działa jeszcze około 15ms i restartuje się dzięki czemu jest to miganie.

    Tak właściwie to procesor restartuje się po tych 15ms niezależnie od tego co bym umieścił w programie...

    Niestety nie mam innej sztuki megi328p. Czy może to być wada tej konkretnej sztuki? Spotkał się ktokolwiek z takim zachowaniem? Dodam, że AVRami bawię się już dosyć długo, elektroniką także...



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 2 paź 2016, o 18:16 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 01 lis 2015
    Posty: 1448
    Lokalizacja: okolice Warszawa
    Pomógł: 149

    hejka,
    Mam pytanie, : a co robisz w pętli nieskończonej while(1){}; ?
    Bo to co przed nią, jest wykonywane tylko raz.!
    DDRB- jako wejścia:
    DDRC- jako wejścia:
    DDRD- (PD0) jako wyjście, pozostałe jako wejścia.
    PORTD- stan wysoki na PD0;

    while(1){
    ......... /*nic. nic. nic.*/
    }
    return 0;



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 2 paź 2016, o 18:32 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 04 cze 2014
    Posty: 855
    Lokalizacja: pod Warszawą
    Pomógł: 58

    cześć

    a nie ustawiłeś przypadkiem bitu odpowiedzialnego za watchdog?

    _________________
    Pomóżcie mi stanąć na nogi



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 2 paź 2016, o 19:26 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 31 mar 2015
    Posty: 144
    Pomógł: 2

    U mnie dopiero jak wstawiłem przed 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 poźniej przed pętlą while(1):
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
    :
    A później 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.

    To przestał się resetować.


    Autor postu otrzymał pochwałę


    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 2 paź 2016, o 20:42 
    Offline
    Nowy

    Dołączył(a): 18 lip 2016
    Posty: 2
    Pomógł: 0

    lutekT. królu złoty,
    Kod:
    /* wyłączenie watchdoga (w tych mikrokontrolerach, w których watchdog
                 * ma możliwość generowania przerwania pozostaje on też aktywny po
                 * resecie) */

    Chyba ten komentarz wyczerpuje temat :)
    Jednak nie przestudiowałem datasheeta wystarczająco dokładnie, gdzieś umknęło.

    Watchdoga oczywiście będę używał więc nie ma potrzeby go wyłączać tylko na czas inicjalizacji wyświetlaczy itp ustawić na 8sekund...


    mczarny. byłeś blisko :)
    Daro69. pustej pętli while(1) się czasem używa, nawet częściej niż czasem :)



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 2 paź 2016, o 20:55 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 01 lis 2015
    Posty: 1448
    Lokalizacja: okolice Warszawa
    Pomógł: 149

    psaawkel napisał(a):
    lutekT. królu złoty,"]Kod:
    /* wyłączenie watchdoga (w tych mikrokontrolerach, w których watchdog
                 * ma możliwość generowania przerwania pozostaje on też aktywny po
                 * resecie) */

    No dzięki, - :D
    dzięki temu i ja coś więcej już wiem. ;)



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

    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