Микроконтроллеры | Спидометр на Atmega8 |
|
---|---|---|
Хочу сделать электронный спидометр на Atmega8. Написал программу, в Протеусе вроде работает , посмотрите кто разбирается может что нибудь не так, лучше обнаружить ошибки до прошивки на реальный МК. Вот программа в CodeVisionAVR: #include <mega8.h> #define digit1 PORTC.0 flash char digits[] = { char digit_out[3], cur_dig ; void recoding(void) // External Interrupt 0 service routine // Timer 0 overflow interrupt service routine } cur_dig++; } // Timer 1 output compare A interrupt service routine // Declare your global variables here void main(void) // Input/Output Ports initialization // Port C initialization // Port D initialization // Timer/Counter 0 initialization // Timer/Counter 1 initialization // External Interrupt(s) initialization // Timer(s)/Counter(s) Interrupt(s) initialization // Analog Comparator initialization ACSR=0x80; i=0; // Global enable interrupts while (1) |
|
|
rtm7777: Написал программу, в Протеусе вроде работает А в чем вопрос? Если работает - значит работает. Спаяйте в железе и проверьте. |
|
|
Ну вдруг какой то неправильный подход использовал) |
|
|
Не бойся, там больше 1000 циклов записи флеша есть. Поход - не подход - не важно |
|
|
А как можно добавить снижение яркости когда включены габариты? Читал что надо ШИМ использовать, но пока не понял как его сюда прицепить. |
|
|
Может в нулевом таймере как то проверять текущее значение счетчика ? |
|
|
rtm7777: А как можно добавить снижение яркости когда включены габариты? Сейчас каждый сегмент горит до момента переключения на следующий. Для снижения яркости нужно гасить разряда заранее. Можно поступить иначе, ШИМить источник питания или общий провод индикаторов с частотой, как минимум в 10 раз выше частоты сканирования. Касательно представленной программы в первом посте, можно по "варианту 1" модифицировать код: |
|
|
Немного не понял как работают case с одинаковыми вариантами, но как я понял этим способом можно только -50% яркости убрать. Если же нужно -40 то это не вариант. Придумал вроде другой вариант, перенести отображение на 2 таймер, в нем есть прерывания по переполнению, а также по совпадению. Допустим активная цифра управляется по переполнению, но в момент когда происходит прерывание по совпадению ее нужно погасить. Такой вариант имеет право на жизнь?) Только еще и реализовать это нужно, опять на пары не пойду пока не придумаю) |
|
|
rtm7777: но как я понял этим способом можно только -50% яркости убрать да. Зато просто . rtm7777: Придумал вроде другой вариант, перенести отображение на 2 таймер, в нем есть прерывания по переполнению, а также по совпадению Можно несколько иначе. Рассчитать текущее время свечения 1 цифры, затем высвечивая цифру взводим второй таймер с таким расчетом, чтобы он переполнился ранее, чем время свечения цифры. В прерывании этого второго таймера и гасим цифру заранее (т.е. снижение времени свечения / яркости). |
|
|
case 1:{digit1=0;digit2=1;break;}; } здесь получается паразитная засветка следующего разряда значением предыдущего - переключился на следующий, а информация на порте стоит старая. Вывод на порт делайте в том же кейсе. |
|
|
Форум про радио — сайт, посвященный обсуждению электроники, компьютеров и смежных тем. pro-radio.online | Обратная связь |
© 2003—2024 |