Witam !!! Jak ustawić w timerze1 fakt ze będzie on taktowany zewnętrznym kwarcem ?
Czy wolisz polską wersję strony elektroda?
Nie, dziękuję Przekieruj mnie tamqudi napisał:może zacznę jeszcze raz... otóż chce dołączyć kwarc 14,745 MHz do timera1, ale nie w jakimś zboczu opadającym/ rosnącym bo nie za bardzo to kumam... chce mieć po prostu taktowanie 14,745 MHz ale na timerze 1 czy jest to możliwe... i jak mam podłączyć kwarc ? (obiema koncówkami ?)
qudi napisał:nie o to mi chodzi, chce ustawić taktowanie zegara uC na 14,745 MHz. Potem chce po prostu skorzystać najzwyklej w świecie z timera1 (16-bitowego),....
qudi napisał:Odnośnie kolegi który myśli że nie umiem czytać, otóż umiem !
qudi napisał:a więc dam sobie przypuśćmy preskaler/1. Myślałem, że muszę ustawiać bity CS1...tak by ustawiać jakieś zewnętrzne zegary z jakimiś zboczami.
ISR(TIMER1_COMPA_vect) // przerwanie dla porownania
{
PORTC ^= 0x01; // zapalic/zgasic diode
ICR1=28798;
}
int main(void) {
DDRC |= 0x01;
// INICJALIZACJA LICZNIKA 1
TCNT1 = 0x0000; // wartosc poczatkowa
TCCR1A = 0x0000; // OC1A/OC1B odlaczone
// zwykly tryb pracy
//TCCR1A |= (1 << COM1A0);
TCCR1B |= ((1 << WGM12)|(1 << WGM13)); // Ustawia timer w tryb CTC
TCCR1B |= (1 << CS12);
TIMSK |= ((1<<TOIE1)|(1<<OCIE1A)); // wlaczenie przerwan od przepelnienia
// i porownania licznika T1
sei(); // zezwolenie na przerwania
while(1){}
return(0);
}
int main(void)
{
DDRC |= (1<<PC0); // kierunek pinu PC0 - WYJŚCIE
// INICJALIZACJA Timer1 w trybie CTC
TCCR1B |= (1 << WGM12); // Ustawia timer w tryb CTC - mode 4
TCCR1B |= (1 << CS12); // preskaler=256
OCR1A = 31250;
TIMSK |= (1<<OCIE1A); // wlaczenie przerwan CompareMatch
sei(); // zezwolenie na przerwania
while(1);
}
// procedura obsługi przerwania
ISR(TIMER1_COMPA_vect) // przerwanie dla porownania
{
PORTC ^= (1<<PC0); // zapalic/zgasic diode
}
ISR(TIMER1_COMPA_vect) // przerwanie dla porownania
{
PORTC ^= 0x01; // zapalic/zgasic diode
OCR1A=1440;
//OCR1A=14745000/(512*(0.0185*ADC + 0.9814));
}
int main(void) {
DDRC |= 0x01;
// INICJALIZACJA PRZETWORNIKA
ADMUX = (1<<REFS0);
ADCSRA = (1<<ADEN)|(1<<ADSC)|(1<<ADATE);
// INICJALIZACJA LICZNIKA 1
TCNT1 = 0x0000; // wartosc poczatkowa
TCCR1A = 0x0000; // OC1A/OC1B odlaczone
TCCR1B |= (1 << WGM12);
TCCR1B |= (1 << CS12);
TIMSK |=(1<<OCIE1A); // i porownania licznika T1
sei(); // zezwolenie na przerwania
while(1){}
return(0);
}
OCR1A=14745000/(512*(0.0185*ADC + 0.9814));
OCR1A=roundf(14745000/(512*(0.0185*(float)(ADC) + 0.9814)));