• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Часы на отечественных элементах

в sinaprog1.5.5.10
программер:AVR910 & com2 всо вроде работает
дык что делать? LongCat а тестовая программа актуальна стоит на ней попробовать?.
провильно ли определены порты?

исправил порты,
#define LED (3) //Номер бита, к которому подключен светодиод
#define POLA (0) //Первый бит управления полярностью
#define POLB (1) //Второй бит управления полярностью
#define BUTTON (2) //Бит, к которому подключена кнопка
диод 1 секунду светится 1 нет при этом POLA (0) POLВ (1) повторяют тоже самое L293b ещё не ставил
 
нажатие кнопки приводит к "занулению" 0 и 1 порта
 
Я не учел, что нажатие кнопки обнуляет порт, исправим
Код:
 if((fdiv60==60)||(PINB&&(1<<BUTTON)))
на
Код:
 if((fdiv60==60)||(!(PINB&&(1<<BUTTON))))
 
щас попробую, кстати сделал замер миандр 2 секунды "1" и 2 секунды "0"
 

Вложения

  • DSC02999.webp
    DSC02999.webp
    107.5 KB · Просмотры: 102
  • DSC03000.webp
    DSC03000.webp
    57.1 KB · Просмотры: 111
Все правильно, контроллер сейчас работает от генератора 1000000 Гц
 
Работает от внутреннего.
 
ну вот все работает, но часы двигают минутную стрелку каждые 2 секунды и ток в катушку не отключается, если так будет и при минутном отсчете l293 может не выдержать, т.к. сейчас она немного греется (~35-40 градусов) т.е. надо предусмотреть подачу сигнала в течении 1 секунды и 59 секунд без напряжения на портах 0 и 1.
P.S. как переключить контроллер на внешний 2мГц кварц?
 
Контроллер переключается путем перепрограммирования фузов, новые фузы выложу вместе с новой версией прошивки, в которой будет отключение тока.
Как обстоят дела с ускоренным движением стрелки? Не медленно?
 
Код:
#define F_CPU (1000000L)     //Тактовая частота в герцах 
#include <avr/io.h>            //Работа с портами и регистрами 
#include <avr/interrupt.h>    //Работа с прерываниями 
 
#define LED (2)                //Номер бита, к которому подключен светодиод 
#define POLA (0)            //Первый бит управления полярностью 
#define POLB (1)            //Второй бит управления полярностью 
#define BUTTON (3)            //Бит, к которому подключена кнопка 
 
 
typedef uint8_t BYTE;        //Беззнаковый байт, хранит 0..255 
 
volatile BYTE fdiv=0;                //счетчик для деления таймера 125Гц на 125 
volatile BYTE fdiv60=0;                //счетчик для деления на 60 секунд 
volatile BYTE status=0;                //состояние выходных линий 
 
inline BYTE invert(BYTE a,BYTE no)    //в байте а меняем бит no на противоволожный 
{ 
    const BYTE b=1<<no;                //получаем байт, в котором на месте инвертируемого бита стоит 1, остальные 0 
    return((a|b)&((~a)|(~b)));        //вычисляем новый байт 
 
    // a b  
    // 0 0 0 
    // 0 1 1 
    // 1 0 1 
    // 1 1 0 
} 
 
 
ISR(TIMER0_OVF_vect)           //прерывание от таймера 125 Гц 
{ 
    fdiv++;                       //инкремент счетчика 
    if(fdiv==125)               //если счетчик достиг 125, имеем событие, возникающее 1 раз в секунду 
    { 
        fdiv=0;                   //сброс счетчика - делителя  
        status=invert(status,LED); //переключаем светодиод 
     
 
        fdiv60++;            //увеличиваем счетчик секунд 
        if(fdiv60==1)       //если прошла 1 секунда после сброса
        { 
            status=invert(status,POLB);  //смена полярности B
        } 
        if((fdiv60==60)||(!(PINB&(1<<BUTTON)))) //если прошло 60 секунд или нажата кнопка 
        { 
            fdiv60=0;        //сброс счетчика секунд 
            status=invert(status,POLA);  //смена полярности A
        } 
        PORTB=status;                     //устанавливаем пины в новое состояние 
    } 
    TCNT0=5;                             //устанавливаем внутренний счетчик на 5, получая тем самым деление  
                                         //частоты инкремента таймера 31250 Гц на 250 = 125 Гц 
} 
 
 
int main()  //начало работы 
{ 
    BYTE mask=0;  //маска для установки битов режима работы порта 
    mask=invert(mask,POLA);  //бит 1 управления полярностью на вывод 
    mask=invert(mask,POLB);  //бит 2 управления полярностью на вывод 
    mask=invert(mask,LED);   //бит управления светодиодом на вывод 
 
    DDRB=mask;                 //установка значений 
 
    status=invert(status,POLA);  //установка 1 полярности в 1 
    status=invert(status,BUTTON); //подключение подтягивающего резистора для кнопки 
 
    PORTB=status;                  //установка пинов 
 
    TCCR0B=(1<<CS00)|(1<<CS01);   //установка деления тактовой частоты 2000000Гц на 64 для полачения частоты инкремента таймера 31250 Гц 
    TIMSK=1<<TOIE0;                  //разрешение прерывания от таймера 
 
    sei();                          //разрешение прерываний 
    while(1);                      //зацикливание программы, ожидание прерываний по таймеру 
}
Фузы-в последнюю очередь.
 
все отлично работает, только я не до конца понял что именно прошивать flash или EEPROM ? все готово для прошивки на внешний кварц. кнопка сейчас работает в 2х секундном шаге как и светодиод, при переходе на 2 мГц это будет секундный, мне кажется установка будет нормальной при ходе стрелки по секунде
 
Есть три области памяти - flash, eeprom, и fuse.
Фузов ровно три - hfuse, lfuse, efuse
Размер фуза-байт.
Нужно записать в lfuse байт 0xda.
Посл этого контроллер не будет шиться без кварца!
 
Есть три области памяти - flash, eeprom, и fuse.
Фузов ровно три - hfuse, lfuse, efuse
Размер фуза-байт.
Нужно записать в lfuse байт 0xda.
Посл этого контроллер не будет шиться без кварца!

кварц у меня есть на макетной плате (для программатора собрал)
если я правильно понял, то в программе SinaProg 1.5.5.10>advansed> но какой из 8 выбрать? и в чем у них различие
 

Вложения

  • Безымянный4.webp
    Безымянный4.webp
    58 KB · Просмотры: 89
Там нет возможности просмотреть параметры, которые она передает в AVRDUDE?
Различие во времени старта контроллера после включения питания - времени стабилизации частоты кварца после пуска. Я выбрал 14CK+64ms.
Также нужно сбросить CKDIV8, а то все будет в 8 раз медленнее.

Перед записью параметров выложите скриншот с установленными значениями фузов. А то контроллер заблокируете ненароком!
 
Последнее редактирование:
Различие во времени старта контроллера после включения питания - времени стабилизации частоты кварца после пуска. Я выбрал 14CK+64ms.
Также нужно сбросить CKDIV8, а то все будет в 8 раз медленнее.

Перед записью параметров выложите скриншот с установленными значениями фузов. А то контроллер заблокируете ненароком![/QUOTE]

если я правильно понял: галку на CKDIV8 надо убрать,
а какой из трех режимов выбрать не очень
 

Вложения

  • Безымянный5.webp
    Безымянный5.webp
    36 KB · Просмотры: 85
Выделенный, галку снять.
 
Частота генерации секунд верная?
Кнопка не зажата?
 
Частота генерации секунд верная?
Кнопка не зажата?

нет не верная блин длительность импульса 0,8 сек вместо 1,0 сек(у меня частота дискритизации на АЦП 400 гЦ в секунду и 24 разряда)
надо здесь исправить?
:
#define F_CPU (1000000L) //Тактовая частота в герцах
на
#define F_CPU (2000000L) //Тактовая частота в герцах
но похоже я контроллер испортил фьюзами и надо новый для конечной прошивки
но если так LONG Cat напишите все же попробую...
 
Назад
Сверху