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



Teraz jest 18 wrz 2025, o 17:34


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: 27431
Lokalizacja: Szczecin
Pomógł: 1044

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: 27431
Lokalizacja: Szczecin
Pomógł: 1044

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: 27431
Lokalizacja: Szczecin
Pomógł: 1044

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: 3230
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: 27431
Lokalizacja: Szczecin
Pomógł: 1044

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