Перейти к содержанию
    

Devil Byte

Новичок
  • Постов

    18
  • Зарегистрирован

  • Посещение

Репутация

0 Обычный

Информация о Devil Byte

  • Звание
    Участник
    Участник
  1. почему линукс то? время считается от внутреннего счетчика таймера МК
  2. ну ок а как тогда ? создать переменную long int total? наращивать ее кнопкой по 10 А потом писать так \ int sec=total==10; int min=sec/60; а потом ээти переменные выводить?
  3. я попытался решить эту проблему через иф if (dsec==10){sec++; dsec=0;} if (sec==10){d_sec++; sec=0;} if (d_sec==6){min++; d_sec=0;} if (min==10){d_min++; min=0;}
  4. ну получу 0.6. Я же говорю яч использовал эту функкцию что бы дробить число для сигментного индикатора, но может стоить ее убрать и например мне конвертировать время исходя из того что в секунде 10 децесекунд, в минуте 60 секунд и так далее. просто я не понимаю как мне это написать и обрабатывать это сразу в переменных?
  5. одна минута это 600 децесекунд... так? подскажите.. я уже голову третий день ломаю)
  6. Это ни как на софт не влияет, до исполнения этого if не дайдет. Не понял вашей фразы- ряд сбивается
  7. Так он имеет от -32768 до 32767. но если сделать без знаковым, то должен вмещать 65534. Да и разрядность тут не причем. я не переполняю переменную. Я пишу о том что таймер не так отрабатывает.
  8. Доброго времени суток! Прошу помощи. Занялся изучением мк. Попытался написать таймер обратного отсчета. Суть следующая написал исходник где переменные должны меняться по достижению определенного значения. Важный момент, таймер МК настроен на децесекунды, и итерации кнопкой проходят по 10 децесекунд, то есть +1 секунда Но когда таймер получает первую минуту, то при дальнейшей итерации - увеличение минут не происходит, а продолжается наращивание секунд, уверен что ошибся в написании функции. ПРошу помощи как лучше реализовать данную функцию. Видео поведения таймера прикладываю https://youtu.be/8j1sTrgwCcw
  9. На счет документации не увидел что там есть раздел типа default fuses
  10. В общем поставил два фьюх бита JTAGEN и M103C. И все заработало!
  11. В общем, убрал оптимизацию кода на минимум. Да, razr1 получает значение 1, после того как функция chislo получает на вход 1987. Может это фьюзы, но я боюсь менять их, а какие по умолчанию не знаю
  12. Я пишу microchip studio, а вот как компилятор посмотреть даже не знаю, так как еще не изучал вообще эту тему. Смотрел в тулчейне, вроде как тоже тоже авр гсс, может надо менять уровень оптимизации?
  13. Так а какая разница? чар просто имеет меньшую вместительность. Ну попировал ради прикола, ничего не поменялось Ну это тоже не важно просто он тогда выведет число на все подключенные индикаторы. Но даже если оставлю один, то получаю тот же результат
  14. Вот так сказать без каши. все типы теперь одинаковые (хотя для си нет разницы знаковый или без, если они оба в одном диапазоне). Но все равно не работает. К стожалению мультиметр достать не пердставляется возможным, так как я в жопе мира на вахте, дома бы я глянул осциллографом... но увы. #define F_CPU 16000000UL #include <avr/io.h> #include <util/delay.h> #define SEG7_DDR DDRC //устанавливаю на регистр С дефайн SEG7_DDR (подключены индикаторы сегментные) #define SEG7_PORT PORTC //устанавливаю на порт С дефайн SEG7_PORT (подключены индикаторы сегментные) unsigned int numbers[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90}; // массив чисел от 0 до 9 (по порядку) // Инициализация переменных для разбивки числа на разряды unsigned int razr1 =0; unsigned int razr2 =0; unsigned int razr3 =0; unsigned int razr4 =0; // Создаю функцию деления числа на разряды void chislo (unsigned int razbivka_chisla) { razr1 = razbivka_chisla/1000; // тысячи razr2 = razbivka_chisla%1000/100; // сотни razr3 = razbivka_chisla%100/10; // десятки razr4 = razbivka_chisla%10; // единицы } int main(void) { DDRA |=(1<<PINA0) | (1<<PINA1); // Инициализирую пины порта А на выход (для управления индикаторами, стоит общий анод) PORTA |=(1<<PINA0) | (1<<PINA1); // Инициализирую пины порта А на включение (для управления индикаторами, стоит общий анод) SEG7_DDR = 0xFF; // Инициализирую пины порта С на выход SEG7_PORT = 0x00; // Инициализирую на низкий уровень для того что бы зажечь весь индикатор while(1) { //chislo(1987); //ввожу в функцию число razr1 = 1987/1000; //но если сделать руками операцию, то еденичка выводится нормально SEG7_PORT = numbers[razr1]; //вывожу первый разряд на индикатор (должна быть единичка, но индикатор отключается) } }
  15. Вот смысл в том что переменная razr1 содержит в себе единицу. И если я вместо номера элемента в массиве пишу rarzr1, то я из массива должен получить еденицу на сегменте, а он тухнет. А если например сделать запись razr1= 1/1; и сунуть её в numbers[rarzr1]; то пкоцно отобразится нужная цифра из массива
×
×
  • Создать...