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

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • 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.