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 4 cze 2025, o 17:56


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 11 ] 
    Autor Wiadomość
    PostNapisane: 29 maja 2013, o 18:36 
    Offline
    Użytkownik

    Dołączył(a): 29 maja 2013
    Posty: 33
    Pomógł: 0

    Witam, miałbym prośbę o małą pomoc przy kodzie do programu sterującego diodą RGB (niebieskiej książki jeszcze nie posiadam, bo wydatki na rozpoczęcie pracy z elektroniką pochłonęły 200zł co lekko zachwiało moim budżetem).
    Przez dwa dni poszukiwań znalazłem tylko to:

    Kod:
    #include<avr/io.h>
    #include<inttypes.h>
    #include <avr/interrupt.h>
    #define F_CPU 8000000U
    #include<util/delay.h>

    int volatile i = 0;
    SIGNAL (SIG_OVERFLOW1){
       OCR1A = i;
    }

    int main(void)
    {

       DDRB = 0xff;
       PORTB = 0xff;
       TCCR1A = _BV(COM1A1) | _BV(COM1A0) | _BV(COM1B1) | _BV(COM1B0);
       TCCR1A |= _BV(WGM10);
       TCCR1B = _BV(CS10);

       OCR1A=0;

       TIMSK |= (1 << TOIE1);
       sei();
       while(1)
       {
          for(i=0;i<255;i++)
          {
             _delay_ms(10);
          }
          _delay_ms(50);
          for(i=255;i>0;i--)
          {
             _delay_ms(10);
          }
          _delay_ms(50);
       }
    }


    Ten kod powoduje, że dioda ma płynne przejścia, ale tylko koloru czerwonego.

    Znalazłem jeszcze inne kody, ale polegały one na tym, że kolor diody zmieniał się po naciśnięciu przycisku, a ja bym chciał, aby wszystko działało zaraz po włączeniu zasilania.

    Dioda jest podłączona do pinów PB0, PB1 i PB2 procesora Atmega8 o taktowaniu wew. oscylatora na 8MHz.

    Chciałem ten temat umieścić w dziale rybnym, ale nie wiem czemu nie mogę założyć nowego wątku (nie ma buttona "Nowy wątek")



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 29 maja 2013, o 20:23 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 01 sty 2013
    Posty: 328
    Lokalizacja: Rzgów k. Łodzi
    Pomógł: 11

    Problem w tym, że w pętlach for masz tylko delay`e. Więc program wykonuje się dobrze, lecz nie tak jak chcesz tego ty ;). Musisz dorzucić do każdego for`a po linijce z "OCR1A = i;" ;) I wywal tego F_CPU na początku. No i masz stare funkcje przerwań. Zamiast signal używaj ISR.

    _________________
    sig off ;(



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 29 maja 2013, o 20:39 
    Offline
    Moderator
    Avatar użytkownika

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

    przede wszystkim wyrzuć to:

    #define F_CPU 8000000U

    i zapomnij o takim definiowaniu raz na zawsze

    przy okazji przejdź na Eclipse

    _________________
    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: 29 maja 2013, o 21:12 
    Offline
    Użytkownik

    Dołączył(a): 29 maja 2013
    Posty: 33
    Pomógł: 0

    Definiowanie wywaliłem,

    PawelGaj napisał(a):
    Problem w tym, że w pętlach for masz tylko delay`e. Więc program wykonuje się dobrze, lecz nie tak jak chcesz tego ty ;). Musisz dorzucić do każdego for`a po linijce z "OCR1A = i;" ;) I wywal tego F_CPU na początku. No i masz stare funkcje przerwań. Zamiast signal używaj ISR.


    Wiem, że to może być dziwna prośba, ale mógłbym prosić o gotowy kod, bo niezbyt rozumiem co mam zmienić (z elektroniką zacząłem od poniedziałku, a to jest mój drugi "projekcik" :D ).

    mirekk36 napisał(a):
    przede wszystkim wyrzuć to:

    #define F_CPU 8000000U

    i zapomnij o takim definiowaniu raz na zawsze

    przy okazji przejdź na Eclipse


    Kod całkowicie nie jest mój, więc nie wiem w jakim środowisku jest napisany. Zgodnie z Pana poradami na blogu zainstalowałem Eclipse Indigo i kod tam wkleiłem. Czy to oznacza, że ten kod nie będzie działać? Bo jeśli tak to znalazłem jeszcze taki kod:

    Kod:
    #include <avr/io.h>                     // dostęp do rejestrów
    #include <util/delay.h>               // zawiera definicję _delay_loop2
    #define przerwa 5
    int main(void)                              // program główny
    {
      uint8_t pwm=180;                    // zmienna zawiarająca wartość wypełnienia

      DDRD = 0x80;   
      DDRB = 0xff;
      DDRC = 0xff;
                                   
      PORTD = 0x7F;                          // podciągaj wejścia PORTD
      PORTC = 0xFF; 
      TCCR2 =  _BV(COM21) | _BV(COM20)| _BV(WGM21) | _BV(WGM20) |   _BV(CS20);
     
                                                        // czasomierz 2 w trybie PWM
                                                        // taktowany F_CPU
       uint8_t i,j,k=0;
      while(1)                                     // pętla nieskończona
      {

       for(i=0;i<250;i++)
       {
          OCR2=i;
          PORTC=0b11111110;
          _delay_ms(przerwa);
       }
       PORTC=0b11111111;
       for(j=0;j<250;j++)
       {
          OCR2=j;
          PORTC=0b11111101;
          _delay_ms(przerwa);
       }
       PORTC=0b11111111;
       for(k=0;k<250;k++)
       {
          OCR2=k;
          PORTC=0b11111011;
          _delay_ms(przerwa);
       }
       
       for(i=0;i<250;i++)
       {
          PORTC=0b11111100;
          OCR2=i;
           
          _delay_ms(przerwa);
       }
       PORTC=0b11111111;
       for(j=0;j<250;j++)
       {
          OCR2=j;
          PORTC=0b11111001;
          _delay_ms(przerwa);
       }
          PORTC=0b11111111;
       for(k=0;k<250;k++)
       {
          OCR2=k;
          PORTC=0b11111010;
          _delay_ms(przerwa);
       }
       PORTC=0b11111111;
      }
    }


    Z tym, że w tym wypadku autor użył chyba innych pinów niż ja i mi dioda tylko świeci na czerwono, próbowałem jakoś modyfikować ten kod zmieniając:

    Kod:
    DDRD = 0x80;   
      DDRB = 0xff;
      DDRC = 0xff;


    na:

    Kod:
      DDRD = PB0;
      DDRB = PB1;
      DDRC = PB2;

    Bo do tych pinów mam diodę podłączoną, ale dioda tylko zmieniła kolor z czerwonego na niebieski i nadal nic innego się nie dzieje.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 29 maja 2013, o 21:45 
    Offline
    Moderator
    Avatar użytkownika

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

    Polecam ci jednak zacząć od książki zamiast od sprawdzania kodów z netu na chybił-trafił, bo to nie nauka i najczęściej jak widzisz jest "nie trafił" :(

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

    a jak chcesz mieć kod do migania diodą LED napisany zgodnie ze sztuką i działający pod Eclipsem który masz (i dobrze) to oglądaj przynajmniej poradniki Video z mojego bloga (zanim np zdecydujesz się na książkę), np ten:

    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: 29 maja 2013, o 22:43 
    Offline
    Moderator
    Avatar użytkownika

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

    dokładnie ten wątek to także mała kopalnia przykładów dla początkujących ;)

    _________________
    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: 30 maja 2013, o 09:24 
    Offline
    Użytkownik

    Dołączył(a): 29 maja 2013
    Posty: 33
    Pomógł: 0

    Dzięki, przeglądnę ten wątek, co do książki to napewno ją kupię, ale jeszcze nie mogę. Mam niezbyt ciekawą sytuację finansową więc muszę kupować małymi partiami.

    PS: Orientuje się ktoś może czy jest możliwość wypożyczenia tej książki w bibliotekach, czy raczej tego typu książek się nie znajdzie.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 30 maja 2013, o 11:31 
    Offline
    Moderator zasłużony dla forum.atnel.pl
    Avatar użytkownika

    Dołączył(a): 18 lip 2012
    Posty: 3229
    Lokalizacja: Kraków - obok FAB5 ATMEL'a
    Pomógł: 91

    Cytuj:
    PS: Orientuje się ktoś może czy jest możliwość wypożyczenia tej książki w bibliotekach, czy raczej tego typu książek się nie znajdzie.


    Wątpię, raczej trzeba by szukać w bibliotekach jakichś uczelni i szkół technicznych.

    _________________
    http://www.jaglarz.info



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 30 maja 2013, o 12:03 
    Offline
    Moderator
    Avatar użytkownika

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

    dokładnie w bibliotekach wielu uczelni i niektórych szkół średnich są te książki

    _________________
    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: 30 maja 2013, o 12:04 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 08 mar 2013
    Posty: 236
    Lokalizacja: Warszawa
    Pomógł: 5

    Są, np. na mojej uczelni w kilku egzemplarzach. Ale jak się mówi są książki, które po prostu trzeba miec w swojej mini biblioteczce m.in. Te.

    _________________
    sig off ;(



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 30 maja 2013, o 13:23 
    Offline
    Użytkownik

    Dołączył(a): 29 maja 2013
    Posty: 33
    Pomógł: 0

    A w bibliotekach miejskich? Niedaleko mam parę bibliotek. Ewentualnie przejdę się do biblioteki Uniwersytetu Śląskiego i tam zapytam (oby tylko była otwarta dla każdego).

    PS: Znalazłem w Bibliotece Śląskiej :) muszę tylko poczekać do 13.06 bo narazie jest wypożyczona.



    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 5 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