Skocz do zawartości

Attiny13A - zablokowany po zmianie Fusebitów(nie zewnętrzny kwarc)


miccaldo

Pomocna odpowiedź

Witam,

Próbowałem zmienić taktowanie uC z 9MHz(fabryczne) na 4.8MHz. Temu taktowaniu odpowiadają fusebity:

  • LOW - 0x69
  • HIGH - 0xFF

Fusy wgrywałem programem Eclipse. Po wgraniu, dostaje rc - 1... 🤨 Dlaczego, skoro ten problem dotyczy najczęściej jeśli ustawiło się taktowanie z kwarcem zewnętrznym, a ja przecież tego nie ustawiłem?? Tu nawet nie ma gdzie kwarca podłączyć chyba że jakiś generator.

Dodam, że jakiś czas temu wydaje mi się ze wgrywałem je dokładnie tak samo na taki sam kontroler i nie było problemu.

O co może chodzić?

Edytowano przez Treker
Poprawiłem formatowanie.
Link do komentarza
Share on other sites

Jak podejrzewasz przestawienie na zewnętrzny kwarc to podłącz sobie jakikolwiek procek z wyprowadzonym sygnałem zegarowym (wystarczy nawet digitalWrite 0 i 1 w pętli), ewentualnie "zaawansowany" programator MKII zrobiony z Arduino MICRO , ma ratunkowy zegar 4MHz wyprowadzony na pin 9: https://www.elektroda.pl/rtvforum/topic3516592.html, można też zrobić generator na innym attiny13 /attiny85, zegar 4,8MHz/8Mhz będzie na PB1:


// 9.6 MHz, built in resonator
//#define F_CPU 9600000



#include <avr/io.h>

#define LED PB1
void adc_setup (void)
{
    // Set the ADC input to PB2/ADC1
    ADMUX |= (1 << MUX0);
    ADMUX |= (1 << ADLAR);

    // Set the prescaler to clock/128 & enable ADC
    // At 9.6 MHz this is 75 kHz.
    // See ATtiny13 datasheet, Table 14.4.
    ADCSRA |= (1 << ADPS1) | (1 << ADPS0) | (1 << ADEN);
}

int adc_read (void)
{
    // Start the conversion
    ADCSRA |= (1 << ADSC);

    // Wait for it to finish
    while (ADCSRA & (1 << ADSC));

    return ADCH/4;
}

void pwm_setup (void)
{
    // Set Timer 0 prescaler to clock/8.
    // At 9.6 MHz this is 1.2 MHz.
    // See ATtiny13 datasheet, Table 11.9.
   // TCCR0B |= (1 << CS01);
    // Set Timer 0 prescaler to clock/1.
  TCCR0B |= (1 << CS00);

    // Set to 'Fast PWM' mode TOP=0xFF
   // TCCR0A |= (1 << WGM01) | (1 << WGM00);

    // Set to 'Fast PWM' mode TOP= OCR0A
    TCCR0A |= (1 << WGM01) | (1 << WGM00);
    // co ciekawe ten WGM02 jest w innym rejestrze
    TCCR0B|= (1 << WGM02);


    OCR0A = 1;

    // Clear OC0B output on compare match, upwards counting.
//    TCCR0A |= (1 << COM0B1);
    // Set OC0B output on compare match, down counting.
    TCCR0A |= (1 << COM0B1)|(1 << COM0B0);
}

void pwm_write (int val)
{
    OCR0B = val;
}

int main (void)
{


    // LED is an output.
    DDRB |= (1 << LED);

    adc_setup();
    pwm_setup();

    while (1) {
        // Get the ADC value
    	// uint8_t adc_in = adc_read() ;
        // Now write it to the PWM counter

        pwm_write(0);
    }
}

 

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.