roboforum.ru

Технический форум по робототехнике.

tiny13 низкая скорость и вопросы по ИК и прот. RC5

tiny13 низкая скорость и вопросы по ИК и прот. RC5

RoboTok » 11 фев 2008, 22:40

Здравствуйте.

Собрал плату и зашил программу в неё.
Перепрограммироваться контроллер отказался второй раз.

Всё проверил и был в замешательстве, но потом в программаторе выставил паузы большие для медленных МК.
И МК стал прошиваться без проблем.

Программу пишу в CodeVisionAVR и ничего не менял в окошке программирования(то есть фусе бит не трогал).

Вот код программы:

Код: Выделить всёРазвернуть
/*****************************************************
This program was produced by the
CodeWizardAVR V1.25.7 beta 5 Standard
Automatic Program Generator
© Copyright 1998-2007 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com

Project :
Version :
Date    : 10.02.2008
Author  : F4CG                           
Company : F4CG                           
Comments:


Chip type           : ATtiny13
Clock frequency     : 1,000000 MHz
Memory model        : Tiny
External SRAM size  : 0
Data Stack size     : 16
*****************************************************/

#include <tiny13.h>
#include <delay.h>

// Declare your global variables here
int timen = 0;// изменение по прерыванию каждые 4 Гц.

// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
// Place your code here
timen++;
}

void main(void)
{
// Declare your local variables here

// Crystal Oscillator division factor: 1
#pragma optsize-
//CLKPR=0x80;
//CLKPR=0x00;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif

// Input/Output Ports initialization
// Port B initialization
// Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State5=T State4=T State3=T State2=T State1=T State0=T
DDRB = 0b00010001;//выходы на диоды

//подымаем кнопки
PORTB = 0b00101110;


// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 0,977 kHz
// Mode: Normal top=FFh
// OC0A output: Disconnected
// OC0B output: Disconnected
TCCR0A=0x00;
TCCR0B=0x05;
TCNT0 = 244;
OCR0A=0x00;
OCR0B=0x00;

// External Interrupt(s) initialization
// INT0: Off
// Interrupt on any change on pins PCINT0-5: Off
GIMSK=0x00;
MCUCR=0x00;

// Timer/Counter 0 Interrupt(s) initialization
TIMSK0=0x02;

// Analog Comparator initialization
// Analog Comparator: Off
ACSR=0x80;
ADCSRB=0x00;

// Global enable interrupts
#asm("sei")

while (1)
      {

if(PINB.3 == 0)
        {
        if(timen > 2) {timen = 0; PORTB.4++;}
        }
else    {
        if(timen > 20) {timen = 0; PORTB.4++;}
         }
      }
}

По идеи диод должен мигать через 5 сек и при нажатой кнопке через 1\2 сек, но диод мигает через 48 сек.
Из чего я делаю вывод, что МК работает на 128кГц примерно частоте.

1) Как МК перевёлся на такой медленный режим работы ?
2) Как вернуть скорость 1МГц ?
3) Если вынуть батарейки и подключить к параллельному интерфейсу компьютера МК начинает работать, как это ?
Последний раз редактировалось Digit 12 фев 2008, 11:08, всего редактировалось 2 раз(а).
Причина: тег CODE!

Re: После прог-ния стал медленно работать tiny13

Duhas » 11 фев 2008, 23:37

1) видимо там по умолчанию стоит предделитель частоты ... поковыряй даташит..
2) фьюзы придется трогать.. см пункт 1 и будь осторожен
3) это называется паразитное питание... есть цепи по которым 5в с лпт проходят в МК.. и за счет них он питается... никаккой магии тут нет :crazy:

Re: После прог-ния стал медленно работать tiny13

rig » 12 фев 2008, 00:16

вот тут какие цифры стоят?
1.JPG

Re: После прог-ния стал медленно работать tiny13

RoboTok » 12 фев 2008, 00:20

Думаю, что при программировании синхронизация перенастроилась.
Наверно в МК что то вшито и если его переписывают, то начинают работать фюзы которые все по 1 были и МК работал на 128кГц.
Прошил CKSEL 01 и МК стал тактироваться примерно с 4.8МГц и таймер стал нормально работать и шиться МК стал без задержек.

Добавлено спустя 2 минуты 13 секунд:
rig писал(а):вот тут какие цифры стоят?
1.JPG


Когда спрашивал, стояло 1МГц, как у вас.

Re: После прог-ния стал медленно работать tiny13

rig » 12 фев 2008, 00:28

RoboTok писал(а):Наверно в МК что то вшито и если его переписывают, то начинают работать фюзы которые все по 1 были и МК работал на 128кГц.

ну это врятли. в кодевижене галочки по умолчанию стоят программировать фьюзы, если ее не снять в тут
1.JPG

то можно пролететь случайно прошив все единицами.

Re: После прог-ния стал медленно работать tiny13

RoboTok » 12 фев 2008, 01:59

rig писал(а):то можно пролететь случайно прошив все единицами.


Похоже у меня так и получилось.
Я считал с МК Фусе и там были все единицы.

Так же я шил mega48 и после прошивки он тоже стал не так работать.

Добавлено спустя 28 минут 20 секунд:
Re: tiny13 низкая скорость и вопросы по ИК и прот. RC5
Хочу сделать джойстик для управления машинкой.

Решил делать на ИК и уже собрал всё.

Осталось написать программу для передатчика-джойстика и приёмника.

Протокол RC5 как я понял передаёт данные импульсами с частотой 30кГц (у меня приёмник на 30кГц).

Мне надо написать программу для tiny13, которая будет генерировать эту несущую.

МК работает сейчас на частоте 4.8МГц с делителем 2, то есть 2.4МГц тактируется таймер.

Настраиваю таймер на режим Fast PWM top=OCR0A и ставим делитель в настройках таймера на 300кГц.
Далее делим 300\30 = 10 и записываем в OCR0A = 10 и на выходе PWM 30кГц.

И у меня вопрос: я правильно всё посчитал или где то ошибка ?

Re: tiny13 низкая скорость и вопросы по ИК и прот. RC5

Myp » 12 фев 2008, 02:03

во первых протокол RC5 не зависит от частоты
во вторых частота задаётся TSOP'ом который ты будешь использовать
самые типичные это tsop1736 на частоту 36 кГц(2 последние цифры это частота)

Re: tiny13 низкая скорость и вопросы по ИК и прот. RC5

RoboTok » 12 фев 2008, 02:16

у меня tsop1730

-------------------

Господа подскажите пожалуйста, как настроить PWM на частоту 30кГц у tiny13 или хоть кинте ссылочку на инфу полезную.

П.С.
Я то сам могу настроить, но будет ли 30кГц на выходе большой вОпРоС.

Re: tiny13 низкая скорость и вопросы по ИК и прот. RC5

RoboTok » 13 фев 2008, 16:47

Вот код программы для tiny13 на 4 МГц:

Код: Выделить всёРазвернуть
#include <tiny13.h>

unsigned long int timen = 0;//счётчик для светодиода
bit empty = 0;//флаг отправки
unsigned long int pulse = 0;//длительность ипульса

// Timer 0 output compare A interrupt service routine
interrupt [TIM0_COMPA] void timer0_compa_isr(void)
{
timen++;//счётчик для мигания светодиода

if(empty) PORTB.0++;//пульсируем несущей, если нужно отправить
        else PORTB.0 = 0;

if(pulse)//устанавливаем флаг отправки и уменьшаем оставшееся время импульса
        {
        empty = 1;
        pulse--;
        }
if(!pulse)//пульс окончен и скидываем флаг
        {        empty = 0;    }

}

void ir_send (unsigned long int byte)//записываем байт на передачу
{
if (!empty)   pulse = byte;
}

void main(void)
{
// Crystal Oscillator division factor: 1
#pragma optsize-
CLKPR=0x80;
CLKPR=0x00;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif

DDRB = 0b00010001;//выходы для светодиода и ИК

//подтяжка кнопок
PORTB = 0b00101110;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 600,000 kHz
// Mode: CTC top=OCR0A
// OC0A output: Disconnected
// OC0B output: Disconnected
TCCR0A=0x02;
TCCR0B=0x02;
TCNT0=0x00;
OCR0A=0x04;//60кГц по формуле из ДШ
OCR0B=0x00;

// Timer/Counter 0 Interrupt(s) initialization
TIMSK0=0x04;

// Global enable interrupts
#asm("sei")

while (1)
      {

#asm("nop");

if(PINB.3 == 0)//кнопка 1
        {        ir_send(500);        }

if(PINB.5 == 0)//кнопка 2
        { ir_send(5000); }

if(PINB.1 == 0) //кнопка 3
        {        ir_send(10000);        }

if(PINB.2 == 0) //кнопка 4
        {        ir_send(30000);        }

      }
}



То есть это не совсем протокол RC5, а я просто хочу получить ноль на TOSOP1730 в течении заданных промежутков.
Приемник устроен почти по такому же принципу, он записывает изменение на ноль входного сигнала с TSOP1730 и увеличивает счётчик, после изменения на + на входе считаем длительность и запускаем команду.

Но у меня всё это не работает и диоды на приёмнике мигают хаотично.

Подскажите пожалуйста будет ли с таким кодом у меня на выходе несущая 30кГц ?
Или может в коде ошибки, которая я не смог найти ?

Re: tiny13 низкая скорость и вопросы по ИК и прот. RC5

Myp » 13 фев 2008, 17:06

а ты в симуляторе попробуй

посмотришь там на осциллографе частоту...

Re: tiny13 низкая скорость и вопросы по ИК и прот. RC5

RoboTok » 13 фев 2008, 18:45

Myp писал(а):посмотришь частоту...


Не выходит.
В протеусе виснит, в VMLAB нету такого МК.

Re: tiny13 низкая скорость и вопросы по ИК и прот. RC5

Myp » 13 фев 2008, 19:40

а ты возьми тот который есть :)

код простенький
он на любом камне пойдёт

Re: tiny13 низкая скорость и вопросы по ИК и прот. RC5

RoboTok » 13 фев 2008, 20:46

Мне кажется у меня передатчик глючит и частота у него гуляет сильно.
Настроил задержки для команд и он то хорошо срабатывает, то плохо.
Потом, передатчик срабатывает ошибочно сам и посылает импульсы, хотя кнопки я не нажимаю на нём.
Вложения
plata3.gif
плата передатчика
plata3.gif (7.8 КиБ) Просмотров: 5635

Re: tiny13 низкая скорость и вопросы по ИК и прот. RC5

Myp » 13 фев 2008, 21:01

3 вольта

а у тебя точно тинька 13 низковольтная?

Re: tiny13 низкая скорость и вопросы по ИК и прот. RC5

RoboTok » 14 фев 2008, 02:27

Точнее точного :shock:

Короче МК глючило из-за бросков напряжения вообще ппц.

Я у себя в достижениях отписал подробно из-за чего.

И прошу посоветовать, как стабилизировать МК и увеличить дальность с углом приёма ИК.

Сделал по типу как тут: http://fi-com.ru/mcu/rc5.htm

Только несущую генерирую через прерывание таймера, а не ШИМом и приёмник по прерываниям работает, а не как в примере опрашивает ноги.


Rambler\'s Top100 Mail.ru counter