logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[atmega8][c]generator i zwykly program w 1

krzysztof_swist 04 Cze 2008 19:42 2371 8
  • #1 5213669
    krzysztof_swist
    Poziom 10  
    Witam!

    Mam pytanie: jak zrobić generator na jednym z pinów portu i wyjść z tej pętli aby móc robić dalej program tzn tu mam generator w nieskończonej pętli:
    	for (;;)
     {
    		unsigned char i;
    		
    		PORTB ^= _BV(0);		/* Zaneguj stan PB0 */
    		
    		for (i = 0; i < 1; i++)
    			_delay_ms(1);		
    	}
    


    a chce z niej wyskoczyć (tak aby na tym PB0 nadal był ten sygnał prostokątny) i pisać dalej program.

    Proszę o pomoc!
  • #2 5213694
    _Robak_
    Poziom 33  
    Jezeli chcesz miec sygnal prostokatny na pinie to uzyj trybu PWM jednego z licznikow, tyle ze bedziesz mial tylko konkretne piny do dyspozycji. Mozesz tez uzyc trybu CTC wtedy w przerwaniu mozesz dac ten wiesz ktory neguje pin :)
  • #3 5213858
    krzysztof_swist
    Poziom 10  
    To znaczy powiem tak... Chce mieć na którymś z pinów sygnał zmienny(sin, prost, trój wszystko jedno) a na drugim pinie taki sam sygnał ale o innej częstotliwości powiedzmy 1kHz i 10kHz. Ale tak aby np.:

    int main()
    {
    PB0 = 1kHz;
    PB1=10KHz;
    
    dalsza cześć programu...
    }


    Bo wszystkie przykładowe z timerami podają z pętlą "while(1)" a to uniemożliwia dalszą pracę. Proszę się nie śmiać z głupoty zapisu:)
  • #4 5213987
    pubus
    Poziom 30  
    Coś kolego strasznie mieszasz...
    Żeby na wyjściu mieć przebieg inny niż prostokąt musisz zrobić chociaż najprostszy DAC (PWM + RC)...
    Jeżeli wystarczy ci prostokątny przebieg to ustawiasz timer na żądaną częstotliwość i wypełnienie (50%) po czym zapominasz o nim i przechodzisz do głównej pętli programu...
    Tam robisz już coś innego a timer sam zajmuje się generowaniem przebiegu...
    Oczywiście w takim przypadku ten "jakiś pin" będzie konkretnie pinem przypisanym jako wyjściowy do danego timera...
  • #5 5215378
    bogo88
    Poziom 11  
    możesz też załączyć jakiś timer, i przerwanie od jego przepełnienia, a w obsłudze przerwania na początku ustawiasz sobie jakąś wartość wpisywaną do rejestru licznika(aby ustawić odpowiednią częstotliwość).
    A dalej w obsłudze przerwania już tylko negujesz obojętnie jaką nóżke układu. A inne częstotliwości możesz robiś przez wielokrotność tej podstawowej umieszczając w przerwaniu "licznik wejść do niego"(czyli jakąś dodatkową zmienną) i jakąś pętelke, i dopiero w niej negująć jakiś inny pin...
  • #6 5216034
    krzysztof_swist
    Poziom 10  
    Mógłbym prosić o jakiegoś pdf'a odnośnie tych timerów? Bo w tym ze strony atmela jest tylko o licznikach które można zrobić na nich, a po za tym, że można użyć je jako generator to nie jest nic więcej wspomniane w tej kwestii. Nie wiem jak się do nich w ogóle odnosić.
  • #7 5216180
    _Robak_
    Poziom 33  
    Po prostu ustawiasz odpowiednie bity w rejestrach funkcyjnych TCCR w jaki trybie ma dzialac licznik. poszukaj w googlach, np cos tutaj jakis tutorial http://avr.elektroda.eu/?q=node/42
  • #8 5216199
    pubus
    Poziom 30  
    Ściągasz dokumentację do konkretnego uC...
    W tejże dokumentacji pod zakładką 8/16 bit Timer/Counter masz wszystkie informacje jakie są potrzebne do ustawienia timera...
    Dokładny opis które rejestry służą do ich konfiguracji i za co dany bit w nich odpowiada...
    Co więcej ci potrzeba...?
    Nie wiesz jak się do rejestrów odnosić...?
REKLAMA