Модераторы: PILOT, ManiaK, Mazzi
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Генератор двоичного кода 
:(
    Опции темы
supercelt
Дата 1.8.2015, 20:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 658
Регистрация: 25.8.2005

Репутация: нет
Всего: 1



Помогите пожалуйста разобраться.
Дано. Atmega 16
Двоичный код: 100101100001110101011001110
Нужно вывести его на порт С 0 пин с частотой 125 кгц. По положительной части задающего такта.
Сначала я сделал таймер с СТС что бы на порт В 3пин выводился такт с частотой 125. Потом я пытался сделать так что когда имеем положительную часть такта на порте В 3 пин, то на порт С 0 пин вывести тоже 1. Выводить цифры это уже следующий шаг. 
Так вот проблема в том что импульс на PC0 немного запаздывает от импульса PB3. Хотя я видел в нете скрины что вывод на порт импульса в точности совпадает с тактом. Мой код и схема ниже.

Код

#define F_CPU 16000000
#include <avr/io.h>
#include <avr/interrupt.h>

ISR(TIMER0_COMP_vect){
    if(PINB & (1 << 3)){
        PORTC |= (1 << 0);
    } else {
        PORTC &= ~(1 << 0);
    }
}

int main(void)
{
    DDRC |= (1 << 0); //Port C - Out
    DDRB |= (1 << 3); //Port B Pin 3 - Out
    PORTB &= ~(1 << 3);
    OCR0 = 64;
    TCCR0 |= (0 << WGM00)|(1 << WGM01); 
    TCCR0 |= (0 << CS02)|(0 << CS01)|(1 << CS00); //предделитель 0
    TCCR0 |= (0 << COM01)|(1 << COM00);
    TIMSK |= (1 << OCIE0);
    asm("sei");
    while(1)
    {
        asm("nop");
    }
}


user posted image
PM   Вверх
Romikgy
Дата 1.8.2015, 23:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 3
Всего: 146



протеус не показатель задержек!

Цитата(supercelt @  1.8.2015,  19:59 Найти цитируемый пост)
#define F_CPU 16000000

плюс на частотах выше 8 мегагерц протеус вообще ведет себя как хочет... я все логику проверяю на частотах ниже 8.... 



--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
xvr
Дата 3.8.2015, 15:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 8
Всего: 223



Цитата(supercelt @  1.8.2015,  20:59 Найти цитируемый пост)
Так вот проблема в том что импульс на PC0 немного запаздывает от импульса PB3.

Разумеется будет запаздывать. У вас обновление порта С делается програмно, а обновление порта B - аппаратно. А любая программа требует времени для исполнения, так что как минимум задержка на вход в прерывание и исполнение пары команд между портом B и C будут.

Переносите оба выхода на один порт (что бы можно было оба бита обновить одновременно одним выводом) и делайте генерацию выходной частоты програмно (в обаботчике прерываний от таймера)


PM MAIL   Вверх
ФедосеевПавел
Дата 4.8.2015, 11:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 291
Регистрация: 7.2.2009

Репутация: 1
Всего: 10



И ещё. Хотя я может и не разобрался.

PortB.3 и PortC.0 настроены как выходы, а в ISR PortB.3 считывается, но нигде не изменяется.

При обмене данными по синхросигналам всегда есть периоды с достоверными и недостоверными данными. Если нужно, чтобы достоверные данные были по фронту PortB.3 - выставляйте их на PortC.0 по спаду PortB.3, когда данные на PortC уже считаются недействительными для приёмника.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Микроконтроллеры (MCU) и микропроцессоры (MPU)"
PILOT ManiaK
UniBomb Mazzi

На данный раздел помимо Правил форума распространяются текже следующие правила:


  • Прежде чем создать тему воспользуйтесь поиском или посмотрите в faq. Возможно на форуме уже есть ответ на ваш или близкий к вашему вопрос.
  • В заголовке темы в квадратных скобках обозначьте используемое семейство микроконтроллера: [avr],[pic],[arm].
  • При создании темы с вопросом указывайте участок кода с ошибкой, версию компилятора, схемы подключения, fuse биты и прочие данные, которые помогут найти правильный ответ. Для форматирования текста программ используйте кнопку код.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Для флуда, просьб выполнить задание, поиска партнёров или исполнителей существуют свои разделы.
  • Если вы заметили несовместимое с правилами сообщение, то можете уведомить об этом модератора раздела нажав кнопку Репорт у соответствующего сообщения.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, PILOT, ManiaK, UniBomb, Mazzi.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Микроконтроллеры (MCU) и микропроцессоры (MPU) | Следующая тема »


 




[ Время генерации скрипта: 0.1438 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.