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

Dwa generatory odwrócone w fazie na atmega

eldream 14 Sty 2009 22:48 1960 12
  • #1 6000530
    eldream
    Poziom 11  
    Witam !

    Mam mały problem mianowicie potrzebuję za pomocą procesora Atmega8 wygenerować dwa przebiegi odwrócone w fazie (na wyjściach OC1A i OC1B)
    Czy jest to możliwe do realizacji programowej ?

    Pozdrawiam

    KOD (dwa generatory):

    Config Timer1 = Timer , Prescale = 1 , Compare A = Toggle , Compare B = Toggle , Clear Timer = 1

    Compare1A=100
    Compare1B=100
  • #2 6003104
    Osmo
    Poziom 18  
    Programowej ? Duzo zależy od tego z jąka czestotliwościa te przebiegi chcesz generowac. Jak rozumie prostokat?

    Co do kodu - w basicu nie pomoge, nie znam ;]
  • #4 6005287
    Freddy
    Poziom 43  
    eldream napisał:
    Witam !

    Mam mały problem mianowicie potrzebuję za pomocą procesora Atmega8 wygenerować dwa przebiegi odwrócone w fazie (na wyjściach OC1A i OC1B)
    Czy jest to możliwe do realizacji programowej ?

    Pozdrawiam

    KOD (dwa generatory):

    Config Timer1 = Timer , Prescale = 1 , Compare A = Toggle , Compare B = Toggle , Clear Timer = 1

    Compare1A=100
    Compare1B=100


    Może uściślisz o co Ci chodzi.
    Czy to ma być po prostu "zanegowany" identyczny przebieg, czy mają być inne przebiegi ?
    Jakie częstotliwości przebiegów ?
    Jaka "dokładność" jeśli wystarczy kilka nanosekund, to daj kostkę CMOS inwerter i sprawa zgłowy
  • #5 6006125
    eldream
    Poziom 11  
    Witam !

    Zależy mi na przebiegu prostokątnym o wypełnieniu 50% i częstotliwościach z zakresu mniej więcej 500Hz - 30KHz - na obu wyjściach ta sama częstotliwość ale obie odwrócone w fazie (nie zależy mi na płynnej zmianie częstotliwości - wystarczą kroki z podziału CTC).

    Przepraszam za niezbyt dokładne sprecyzowanie założeń
  • #6 6006616
    Freddy
    Poziom 43  
    Spróbuj tak :

    Dwa generatory odwrócone w fazie na atmega

    Dojdzie Ci błąd czasu propagacji bramki rzędu nanosekund. Jeśli to nie gra wielkiej roli, to chyba najprostsze rozwiązanie.
  • #7 6007483
    Limonit
    Poziom 13  
    No ale chwilka. W rejestrze konrolnym licznika są bity COM1A1 COM1A0 COM1B1 COM1B. Jak je poustawiać "odwrtonie", zależnie od trybu generowania PWM, to chyba dostaniemy dokładnie to, o co chodzi, bez opóźnień i dodatkowych elementów. Okolice strony 97 w datasheecie od ATmegi8 przykładowo.
  • #8 6008120
    Freddy
    Poziom 43  
    Niech autor się wypowie czy o to mu chodziło. Według mnie tak.
  • #9 6008544
    ZbeeGin
    Poziom 39  
    Limonit napisał:
    Jak je poustawiać "odwrtonie", zależnie od trybu generowania PWM, to chyba dostaniemy dokładnie to, o co chodzi,

    Tylko, że tryb CTC automatycznie wyklucza używanie licznika jako PWM.

    Nic z tego, że w trybie CTC ustawisz reakcję na porównanie w jednym kanale SET, a w drugim RESET.
  • #10 6010165
    speecu
    Poziom 11  
    Witam!

    Nie mam takiego doświadczenia jak inni doradzający na tym forum, ale ja bym to rozwiązał tak:
    W obsłudze przerwania timera
    
    if(PORTC==1){PORTC=2;}else{PORTC=1;}
    


    Oczywiście nie będzie to na portach OC1x, ale może zmiana tego jest niewielkim problemem.

    Pozdrawiam
  • #11 6021600
    eldream
    Poziom 11  
    Witam !

    Dziękuję wszystkim za podpowiedzi i sugestie. Skoro się nie da w ten sposób wykonać generatora to chyba faktycznie pozostanie mi pobawić się zmianą stanu portu ( np OC1B ) ze sprawdzaniem stanu wyjścia OC1A ( coś na zasadzie OCR1B=not OCR1A ). Rozwiązania z inwerterem chciałbym uniknąć ze względu na ilość układów scalonych.
  • #12 6023238
    zumek
    Poziom 39  
    eldream napisał:
    ... Skoro się nie da w ten sposób wykonać generatora ...

    A kto powiedział , że sie nie da :?:
    Oczywiście , że się da ;)
    
    '...
       Set TCCR1B.WGM12                               'Tryb CTC
       Set TCCR1A.COM1A0                              'OCR1A- tryb toggle
       Set TCCR1A.COM1B0                              'OCR1B- tryb toggle
       Set TCCR1A.FOC1A                               'lub FOC1B
    '...
    
  • #13 6040253
    rpal
    Poziom 27  
    Jak bym był na miejscu kolegi to zawyżyłbym dwukrottnie częstotliwość i puścił ja na dzielnik czestotliwości np zrobiony z przerzutnika JK. Tym samym bedziesz miał gwarancję wypełnienia 50/50 i od razu odwrócenie fazy bo przerzutnik ma wyjście Q i negację Q :)
REKLAMA