| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Микроконтроллеры (MCU) и микропроцессоры (MPU) > timer0 в atmega 8515 |
| Автор: Я 12.10.2005, 15:33 |
| Вообщем ситуация такая. в таймере 0 есть регистр сравнения, заношу в регистр сравнения значение, наример АА. это делается для того чтобы на выходе получить напряжения 10 В, но на выходе я получаю 15 В, а если не использовать таймер то на выходе получается 30В, ситуация такая то, что не в зависимости от того, что я помещу в регистр сравнения он мне будет всегда выдавать 15 В. такое ощущение, что таймер не сравнивает с регистром сравнения. Вот код программы: void timer0_init(void) { TCNT0 = 0x00; // set count value OCR0= 0xAA; TIMSK= 0x03; TIFR=0x03; TCCR0 = 0x01; // start timer } void timer0_over(void) { PORTC=0x00; } void timer0_comp(void) { if (Device.ScanState == 0x02) // Rotate Left { PORTC=0x10; } if (Device.ScanState == 0x03) // Rotate Right { PORTC=0x01; } } void timer0_stop(void) { PORTC=0x00; TCCR0=0x00; } SIGNAL(SIG_OVERFLOW0) { timer0_over(); } SIGNAL(SIG_OUTPUT_COMPARE0) { timer0_comp(); } |
| Автор: cardinal 12.10.2005, 16:23 | ||
Что-то я не очень понял причем здесь таймер и при чем здесь напряжение на выходе? |
| Автор: PILOT 12.10.2005, 18:47 |
| Я думаю, что имеется ввиду управление напряжением через ШИМ, из кода который приведен тут видно что человек пытается по сравнению утановить бит, а по переполнению очистить бит. Но вот вопрос: я не вижу где портС настроен на выход (DDRC)? И еще не совсем понятно зачем устанавливать флаг в регистре TIFR (хотя это не влияет на результат)? СУВ. |
| Автор: Я 13.10.2005, 11:53 |
| в регистр TIFR уставновили потому что точно не знали почему у нас выдаёт 15 в. Я привёл кусок программы, PORTC у нас настроен как. Сегодня додумались, почему у анс 15 В, просто есть косяк контролера, здесь код программы приведён без предделителя, а если поставить предделитель частоты, то у нас всё нормально полуается. :-)) |