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 24 maja 2025, o 09:13


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 4 ] 
    Autor Wiadomość
    PostNapisane: 17 lip 2022, o 15:00 
    Offline
    Nowy

    Dołączył(a): 28 paź 2021
    Posty: 6
    Pomógł: 0

    Witam wszystkich forumowiczów,
    Zbudowałem mały projekt na płytce stykowej, gdzie użyłem wyświetlacz 7 segmentowy(anoda), dioda led i chip attiny2313.
    Założenie było takie, aby dioda led, migała z daną częstotliwością w tym samym czasie co wyswietlacz.
    Wyświetlacz pokazuje cyfry w pętli od 0 do 9 z częstotliwością do 1 sek. Dioda natomiast nie miga, a jest w stanie wysokim - świeci.
    Wyświetlacz jest podpięty do całego portu PORTB, dioda natomiast do pinu PD2, gdzie jest również przerwanie INT0.
    Próbowałem różnych opcji, gdzie np kabelek od PD2 wpiąłem do PB0 i wtedy dioda migała, ale robiła dwa mignięcia na cały przebieg cyfr to jest od 0....9. I tak w kółko. Wówczas code w ISR nie był brany pod uwagę.

    Oto code:

    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: 17 lip 2022, o 16:53 
    Offline
    Moderator
    Avatar użytkownika

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

    pętla while(1) {} w przerwaniu ?????? To tak jakbyś sobie założył pętlę na szyję a drugą część sznura przywiązał do wysokiej gałęzi i skoczył w dół a później się dziwił dlaczego ci oczy na wierzch wychodzą i jakoś tak duszno się robi ....

    sorki ale ten kod w ogóle nie ma prawa działać - przynajmniej to co w pętli głównej

    ------------------------ [ Dodano po: kilkunastu sekundach ]

    poza tym co to za jakieś ustawianie portów, pinów - niestety masakra
    avatar12345 napisał(a):
    DDRB = 0xff;
    PORTB = 0x00;
    DDRD = 0x04;
    PORTD = 0x04;


    ------------------------ [ Dodano po: 1 minucie ]

    avatar12345 napisał(a):
    unsigned char binary_pattern[]

    w avr gcc masz do tego prosty typ uint8_t a nie jakieś tam kocie unsigned char

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

    pomijam już fakt że nigdzie nie ma inicjalizacji dla przerwania INT0

    ------------------------ [ Dodano po: 3 minutach ]

    avatar12345 napisał(a):
    cli();

    jeśli nigdzie wcześniej w kodzie nie dawałeś sei() to pisanie cli() jest kolejnym nieporozumieniem i w ogóle niepotrzebne

    ------------------------ [ Dodano po: 4 minutach ]

    avatar12345 napisał(a):
    for(int i=0; i < 10; i++){


    w takiej pętli stosuje się typ uint8_t jeśli zmienna iteracyjna ma zliczać tylko w tak małym zakresie 0-9

    ------------------------ [ Dodano po: 4 minutach ]

    avatar12345 napisał(a):
    void Miganie(){
            _delay_ms(1000);
    }


    jaki sens ma ta funkcja skoro to żadne miganie tylko zwykły delaj - kompletnie niepotrzebna funkcja

    ------------------------ [ Dodano po: 5 minutach ]

    avatar12345 napisał(a):
    return 0;


    jak masz pętlę główną while to return 0; nigdy nie jest potrzebne

    ------------------------ [ Dodano po: 6 minutach ]

    Ja bym polecił tobie naprawdę zacząć od książki

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

    ona jest stworzona właśnie dla początkujących i nigdy nie pisałbyś w ten sposób programów dzięki niej - polecam - poważnie

    _________________
    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: 17 lip 2022, o 17:49 
    Offline
    Nowy

    Dołączył(a): 28 paź 2021
    Posty: 6
    Pomógł: 0

    Hej,
    Jak wpiszę tak:
    DDRB |= 0xff;
    PORTB |= 0x00;
    Wyświetlacz nie działa
    Jak wpiszę tak:
    DDRB = 0xff;
    PORTB = 0x00
    Wyświetlacz działa

    Wiele poradników przeczytalem i wiele filmików obejrzałem odnośnie c i avr i nikt nie powiedział, zebym nie stosował 'return 0' jak jest pętla.
    Wzrowałem się na pańskim odcinku o przerwaniach na youtubie, na 1 odcinku, pisał pan na tablicy. Inny wektor pan zastosował, bo inny chip. U mnie nie działa, a w tym przykładzie u pana zadziałało?

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

    [syntax=c//#define F_CPU 1000000L
    #include <avr/io.h>
    #include <util/delay.h>
    #include <avr/interrupt.h>



    void Miganie(void){
    volatile unsigned int del = 100000;
    while(del--);
    }

    int main(void){


    uint8_t binary_pattern[] = {0x40, 0x79, 0x24, 0x30, 0x19, 0x12, 0x02, 0x78, 0x00, 0x10};

    DDRB = 0xff;
    PORTB = 0x00;
    DDRD |= 0x04;
    PORTD |= 0x04;


    sei();
    while(1){

    for(uint8_t i=0; i < 10; i++){

    PORTB = binary_pattern[i];
    Miganie();

    }

    }



    }

    ISR(INT0_vect)
    {
    static uint8_t i;

    i++;
    if(i>99){
    i=0;

    PORTD ^= (1<<PD2);
    }


    /*
    GIMSK |= ((1<<INT0)|(1<<INT0));

    MCUCR |= ((1<<ISC01)|(0<<ISC00));
    TCNT0 |= ((1<<CS02)|(0<<CS01)|(1<<CS00));
    TIMSK |= (1<<OCIE1A);
    TCCR0A |= ((1<<COM0A1)|(1<<COM0A0));
    */

    }









    ][/syntax]

    ------------------------ [ Dodano po: 42 minutach ]

    muszę też stwierdzić, że posiada pan w sobie żarty iście z piekła rodem



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 17 lip 2022, o 19:14 
    Offline
    Nowy

    Dołączył(a): 28 paź 2021
    Posty: 6
    Pomógł: 0

    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.

    Temat rozwiązany



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

    Strefa czasowa: UTC + 1


    Kto przegląda forum

    Użytkownicy przeglądający ten dział: Bing [Bot] 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:  
    Sitemap
    Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
    phpBB SEO