Обсуждаем контроллеры компании Atmel.
Ответить

Re: Динамическая индикация

Вт дек 26, 2023 14:28:45

изначально в коде и были единицы и гашение ноль. так зачем надо было просить менять?\
я не вдумывался. Была просьба поменять - инвертировал.
что-то Вы путаете.
В конце-концов, изучите как работает микроконтроллер и поменяйте сами, возни на пару дней, зато как в детской книжке будет: "не надо приставать к сестрице ну прочитай ещё страницу, не надо звать, не надо ждать, а можно взять и перепрограммировать"

Re: Динамическая индикация

Вт дек 26, 2023 16:50:34

metan, в оригинале программы сегменты управляются нолями.

Добавлено after 6 minutes 44 seconds:
Была просьба поменять - инвертировал.
что-то Вы путаете.

Поменять интервал просьба была в 2020 году, на что я получил четкий ответ. А увы на второй вопрос ответа нет :(
Принцип я понимаю, когда то даже программировал на Турбопаскале году так в 1989. Увы, но сейчас закидывать что-то в мозг почти в 52 года не просто, вот и обратился с просьбой к котам.

В программе выложенной выше сегменты управляются нолями и это видно по протеусу :(

Re: Динамическая индикация

Вт дек 26, 2023 19:38:15

Smith2011 писал(а):metan, в оригинале программы сегменты управляются нолями

Smith2011 писал(а):В программе выложенной выше сегменты управляются нолями и это видно по протеусу

Кому вы эту лажу задвигаете? Единицы там, разоруженным же взглядом это видно! В полном соответствии с кодом, кстати! Индикатор с общим анодом, на общих анодах разрядов единички, на катодах сегментов нолики. На выходах контроллера (до инвертора) единички, как вы и просили. Что не так-то?
Снимок.PNG
(36.43 KiB) Скачиваний: 32

Smith2011 писал(а):увы на второй вопрос ответа нет
да по-ходу и не будет до тех пор, пока вы игнорируете неоднократные просьбы нескольких людей привести в студию свою реальную схему!

Re: Динамическая индикация

Вт дек 26, 2023 21:27:37

А увы на второй вопрос ответа нет :(
Принцип я понимаю, когда то даже программировал на Турбопаскале году так в 1989. Увы, но сейчас закидывать что-то в мозг почти в 52 года не просто, вот и обратился с просьбой к котам.

В программе выложенной выше сегменты управляются нолями и это видно по протеусу :(


Martian дал ответ. разкомментируйте нужные строки
выбор активного 0 или 1 для зажигания сегмента и выбор активного 0 или 1 для зажигания разряда.
сегмент "0", разряд "0"
сегмент "0", разряд "1"
сегмент "1", разряд "0"
сегмент "1", разряд "1"

Код:
// Timer 1 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void) {
//        PORTD&=0b10000111;    // потушить все разряд "1"
           PORTD|=0b01111000;    // потушить все разряд "0"
       
//        PORTB=digits[digit_out[cur_dig]]; // сегмент "1"
        PORTB=(unsigned char)(~(digits[digit_out[cur_dig]])); // сегмент "0"
       
       
//        PORTD|=(cursor[cur_dig]);  // разряд "1"
          PORTD&=(unsigned char)(~(cursor[cur_dig]));  // разряд "0"
       
       
//        if ((zpt_ON == 1) && (cur_dig == 1)) PORTB.3=1;  // запятая во втором разряде "1"
        if ((zpt_ON == 1) && (cur_dig == 1)) PORTB.3=0;  // запятая во втором разряде "0"
 
       
        cur_dig++; if (cur_dig>3) cur_dig=0;
}


мудрость черпал отсюда :))) viewtopic.php?f=57&t=21235
Последний раз редактировалось Serzh2000 Ср дек 27, 2023 09:01:33, всего редактировалось 2 раз(а).

Re: Динамическая индикация

Вт дек 26, 2023 22:01:54

Serzh2000 писал(а):разкомментируйте нужные строки


В вашем коде 2 ошибки (вероятно, унаследованные :) ), выделять цветом внутри тега code не вышло, поставил '!!!'
Код:
// Timer 1 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void) {
//        PORTD&=0b10000111;    // потушить все разряд "1"
        PORTD&=0b01111000;    // потушить все разряд "0" !!!
 
       
//        PORTB=digits[digit_out[cur_dig]]; // сегмент "1"
        PORTB=(unsigned char)(~(digits[digit_out[cur_dig]])); // сегмент "0"
       
       
//        PORTD|=(cursor[cur_dig]);  // разряд "1"
        PORTD|=(unsigned char)(~(cursor[cur_dig]));  // разряд "0" !!!
       
       
//        if ((zpt_ON == 1) && (cur_dig == 1)) PORTB.3=1;  // запятая во втором разряде "1"
        if ((zpt_ON == 1) && (cur_dig == 1)) PORTB.3=0;  // запятая во втором разряде "0"
 
       
        cur_dig++; if (cur_dig>3) cur_dig=0;
}


я считаю правильным такой код:
Код:
// Timer 1 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void) {
//        PORTD&=0b10000111;    // потушить все разряд "1"
        PORTD|=0b01111000;    // потушить все разряд "0"
 
       
//        PORTB=digits[digit_out[cur_dig]]; // сегмент "1"
        PORTB=(unsigned char)(~(digits[digit_out[cur_dig]])); // сегмент "0"
       
       
//        PORTD|=(cursor[cur_dig]);  // разряд "1"
        PORTD&=(unsigned char)(~(cursor[cur_dig]));  // разряд "0"
       
       
//        if ((zpt_ON == 1) && (cur_dig == 1)) PORTB.3=1;  // запятая во втором разряде "1"
        if ((zpt_ON == 1) && (cur_dig == 1)) PORTB.3=0;  // запятая во втором разряде "0"
 
       
        cur_dig++; if (cur_dig>3) cur_dig=0;
}

Re: Динамическая индикация

Вт дек 26, 2023 22:23:24

metan . Да, Вы правы немного поспешил. Спасибо.

Re: Динамическая индикация

Сб дек 30, 2023 19:43:27

Коллеги! Я идиот!
Действительно на выходах все единицы, я разобрался. У меня на плате и на индикаторе были ошибки.

Всем спасибо!!!

И с Наступающим Новым Годом!!!!
Ответить