Elektroda.pl
Elektroda.pl
X
AM TechnologiesAM Technologies
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

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

04 Cze 2008 19:42 2164 8
  • Poziom 9  
    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:
    Code:
       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!
  • AM TechnologiesAM Technologies
  • 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 :)
  • Poziom 9  
    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.:

    Code:
    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:)
  • AM TechnologiesAM Technologies
  • 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...
  • 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...
  • Poziom 9  
    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ć.
  • 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ć...?
  • Poziom 38  
    Kolego słowa klucze do poszukania w PDFach:
    PWM
    CTC
    Powodzenia.