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

[mega2560][C] problem z czestotliwościa taktowania procesora

majster256 16 Cze 2008 09:49 1706 8
  • #1 5250961
    majster256
    Poziom 21  
    witam jak w temacie mam problem z częstotliwością na uC. podłączyłem kwart 16MHz i coś za wolno chodził... dałem w pętelce żeby na porcie sie pojawiały naprzemiennie jedynki i zera... i zobaczyłem wszystko na oscyloskopie... troszkę sie podłamałem jak miałem czas trwania danego stanu 0,5µs a wiec mam 2MHz

    zrobiłem tak:
    
    while(1)
    {
    PORTA = 0x00;
    PORTA = 0xff;
    PORTA = 0x00;
    PORTA = 0xff;
    }
    
    


    i mierzyłem w tym miejscy gdzie nie czekam aż pętelka wróci do początku tak że pomiar jest pewny :D


    jak przyłożę śrubokręt to diody częstotliwość jeszcze bardziej zwalnia( to już sprawdzałem an diodach ale tak ok 2-3x wolniej mrugały)

    miałem wczesnej kondensatorki 33p zmieniłem na 27p bo takie miałem ale tak jak sie spodziewałem to nic nie zmieniło:(

    fuse bity mam ustawione na zewnętrzny kwarc powyżej 8MHz
    dokładnie CKSEL 1110 SUT 00

    nie wiem co to jest ten prescaler czestotliwosci ale jak fo fusami wylacze to prcek jest zimny:( a jak rejestr prescalera ustawiłem programowo na same 0 ( wg noty wtedy nie działa prescaler) to mam nadal te sama częstotliwość :cry:
  • #2 5250986
    mietekn
    Poziom 35  
    Sprawdź ile taktów procesora wykonywany jest rozkaz OUT. Jeśli 8 to wszystko się zgadza. Przesłanie danej na port trwa 8 taktów procesora a więc przy 16 MHz= 8*1/16µs=0,5µs.
  • #3 5250998
    Ch.M.
    Poziom 27  
    nie znam za bardzo C, ale po prostu wpisz w to miejsce ASM:
    l
    di R16, 0
    ldi R17, 255
    {
    out PORTA, R16;
    out PORTA, R17;
    out PORTA, R16;
    out PORTA, R17;
    out PORTA, R16;
    out PORTA, R17;
    out PORTA, R16;
    out PORTA, R17;
    }


    W ten sposób powinieneś otrzymać kwadrat o f=1/2mclk
  • #4 5251154
    majster256
    Poziom 21  
    problem rozwiązałem... właściwie to wcześniej dobrze kombinowaniem ale źle mi sie wydawało :D

    mianowicie jak wyłączyłem prescaler to diody dostały takiego powera ze mrugały 8 razy szybciej przez co myślałem ze po prostu świecą :D w końcu mruganie 3Hz i pozneij 8 razy szybciej to 24Hz przez co widzi sie je tak jakby świeciły:)

    mietekn nie masz racji ze na port dane wysyłane sa 8 taktów:) wszystko sie dzieje w 1 takcie zegara, AVR juz tak ma:) ma 1 MIPS przy 1 MHz nawet ARM nie ma takiej wydajności:D bo ARMy maja 0,8MIPS @ 1MHz

    słyszałem ze sa jakieś procki co maja ponad 1MIPS na każdy 1MHz, ale jak oni to zrobili <myśli>
  • #5 5251174
    mietekn
    Poziom 35  
    majster256 napisał:

    mietekn nie masz racji ze na port dane wysyłane sa 8 taktów:) wszystko sie dzieje w 1 takcie zegara, AVR juz tak ma:) ma 1 MIPS przy 1 MHz nawet ARM nie ma takiej wydajności:D bo ARMy maja 0,8MIPS @ 1MHz
    <myśli>

    Nie stwierdziłem że trwa 8 tylko zwróciłem uwagę byś się przyjrzał ile ma cykli. Ale to szczegół ;-)
  • #6 5251190
    Ch.M.
    Poziom 27  
    Owszem AVR32 mają ok 1,2MIPS/1MHz ale żeby osiągnąć taką wydajność, to musisz bawić się bardzo blisko FFT czy operacji na macierzach :)
  • #7 5251424
    majster256
    Poziom 21  
    widze ze znasz sie na AVR32 :D na ile one się różnią od AVR 8 bitowych?? to całkiem inna bajka czy dość podobne układy, chodzi mi głownie o ich programowanie i obsługę peryferii
REKLAMA