Разработка устройства набора номера

Тема в разделе "Микроконтроллеры AVR", создана пользователем Evooool, 13 июн 2016.

Метки:
  1. Evooool

    Evooool Нуб

    Задание на КР "Разработка устройства набора номера". Разработать устройство на МК, реализующее функции ввода номера с клавиатуры, отображения набранного номера, формирование тонального сигнала(как я понял DTMF). Начал делать, по методичке от Атмел AVR314

    http://www.atmel.com/ru/ru/Images/doc1982.pdf

    Там же взял исходник для СИ. Подправил его. Делаю на МК ATtiny2313 . Исправил входные порты, выставил входной. Кнопки считывает, выход видит, но ничего на него не выводит, не могу понять в чем проблема, может быть кто нибудь сталкивался с DTMF, можете помочь? Ниже прикрепил схему и сам код.
     

    Вложения:

    • kodc1.txt
      Размер файла:
      5,7 КБ
      Просмотров:
      299
    • Screenshot_1.png
      Screenshot_1.png
      Размер файла:
      57,6 КБ
      Просмотров:
      697
  2. Alex19

    Alex19 Гуру

    Не являюсь специалистом в данной теме, но у Вас ошибка в коде.

    В частности.
    Код (C++):
    TIMSK  = 0x04;                     // Int T1 Overflow enabled
    Код один, комментарий другой, в AVR314 включается прерывание по переполнению. А у Вас TIMSK = 0x04, исходя из документации на ATtiny2313 (Bit 2 – OCIE0B: Timer/Counter0 Output Compare Match B Interrupt Enable).

    А дальше все про таймер 1
    Код (C++):
    TCCR1A=0x81;
    TCCR1B=0x01;
    И прерывание, в которое ни когда не попадем.
    Код (C++):
    interrupt [TIM1_OVF] void timer1_ovf_isr(void)
    Вероятно, надо как в оригинале.
    Код (C++):
    TIMSK  = 0x80;                     // Int T1 Overflow enabled  
    Так же в TCCR1A, в бите COM1A1 устанавливается поведение выхода Compare Output Mode for Channel A, для Вашего режима, а это пин PB3 который Вы используйте для подключения клавиатуры.

    Проверьте режим работы таймера, правильно ли он выбран, не вникал. Для AVR314 есть перевод - http://www.gaw.ru/html.cgi/txt/app/micros/avr/AVR314.htm.

    UPD. Да для включения прерывания по переполнению
    Код (C++):
    TIMSK  = 0x80;                    // Int T1 Overflow enabled  
    7 бит - Bit 7 – TOIE1: Timer/Counter1, Overflow Interrupt Enable.
     
    Последнее редактирование: 13 июн 2016
  3. ZAZ-965

    ZAZ-965 Гуру

    Evooool, собираете в железе или только моделирование в Proteus? Какие fuse выставлены? Если возможно, прикрепите проект в Proteus.
     
  4. Evooool

    Evooool Нуб

    Вообщем ночью, сидел разбирался с исходником Атмела на ассемблере, и вроде как уделал. А на си так и не получилось. Осталось прикрепить дисплей, только вот думаю что на ассемблере ето будет труднее сделать чем на си. Вот сижу сейчас и думаю как поступить, либо на си пытаться сделать. Либо на ассемблере разбираться с дисплеем.... Сейчас прикреплю оба проекта. Я только в протеусе моделирую, нам не надо собирать))) http://rgho.st/7XMF4YHmM